musicpreservationreverse-engineeringunitywriteup

The Father and Son soundtrack wasn't encrypted, it was just Unity

Someone on r/lostmedia did the hard part of trying to save a dead 2017 museum game's soundtrack, and reasonably guessed the music was encrypted or hard-coded into the engine. It turned out to be one piece of Unity trivia away from recoverable.

/3 min read

Someone on r/lostmedia was looking for the full soundtrack to Father and Son (FAS), a 2017 narrative game made by the collective TuoMuseo for the MANN archaeological museum in Naples, scored by Arkadiusz Reikowski. The game's distribution infrastructure is dead, the donation storefront the music was sold through is broken, the developers have gone dark, and emails have gone unanswered for over half a year. The "Main Theme" survives on the composer's SoundCloud, but the atmospheric level themes, the Egypt and Pompeii tracks specifically, exist nowhere.

The OP had already done the hard part: caring enough to chase it, documenting the whole situation, and going as far as opening the APK to look for the audio themselves. That's more legwork than most people would put in. Their read on what they found was that the APK "does not contain raw audio assets, meaning the music is likely encrypted or hard-coded into the game engine."

It's an honest and reasonable conclusion. If you open an APK, see no audio files anywhere, and you're not a Unity developer, "it must be hidden or compiled in" is exactly where you'd land. There just happens to be one piece of game-engine trivia that turns this from lost to recoverable, and it's worth writing down for the next person who goes looking.

Why it looked encrypted

If you crack open the APK and go looking for .ogg or .mp3 files, you find nothing. Easy to conclude the audio is hidden. But Father and Son is a Unity game, and Unity never ships loose audio files. It serializes everything, audio, sprites, scenes, into its own container files under assets/bin/Data/. There's no music/ folder because that's not how the engine works.

The soundtrack was right there the whole time, in a 34.6 MB file called sharedassets0.resource. The first four bytes of that file are:

FSB5

That's an FMOD Sample Bank, version 5. It's the default container Unity uses for compressed audio on mobile, it's well documented, and there are multiple open-source readers for it. Inside, the audio is plain Vorbis at 44.1 kHz stereo. Not encrypted. Not hard-coded into native code. Just stored the way every Unity game on your phone stores its audio.

The one thing that probably stopped a casual look: the .assets files are split into 1 MB chunks for the Android build (sharedassets0.assets.split0, .split1, all the way up). You can't browse them until you concatenate the pieces back in order. That's the entire "protection."

Getting it out

The whole recovery is four steps with free tools:

  1. Unzip the APK (an APK is just a ZIP) and pull assets/bin/Data/.
  2. Concatenate every *.assets.splitN group back into one file, in numeric order.
  3. Parse the serialized files with UnityPy. It walks every object and hands you all 237 AudioClips by name.
  4. Decode each clip. UnityPy reads the FSB5 Vorbis stream and writes PCM WAV. 237 of 237 came out with zero errors.

Out of the 237 clips, 226 are sound effects, footsteps per surface, foley, plus a pile of licensed freesound.org clips whose original IDs are still baked into the filenames. The other 11 are the actual score:

  • Intro, Inspiration
  • Egypt 1187BC / Egypt 2017, Pompeii 79 / Pompeii 2017, Bourbon 1787 / Bourbon 2017. Every location has a past theme and a present-day 2017 theme
  • Concert_PV / PS / PSV, three layered mixes of the concert finale

The Egypt and Pompeii themes the post said were trapped came out clean, in stereo, the first try.

The caveat

What you get from the APK is the in-game audio, and in-game audio is Vorbis, which is lossy. Decoding it to WAV or FLAC is a faithful copy of what ships in the game, but it is not the composer's master. The lossless masters a collector would ultimately want aren't in any APK and never will be, only the game-encoded version is.

The soundtrack was never lost. It was never encrypted. It was just Unity, doing the most normal thing Unity does.