blog.hypfer.de

GitHub Twitter RSS

Der legale Weg zum Forza Horizon 4 Soundtrack

Ich spiele gerne Rennspiele und fahre daher folgerichtig auch gerne Auto.
Ich fahre gerne Auto und spiele daher folgerichtig auch gerne Rennspiele.
Insbesondere die mit offener Spielwelt in der man endlos untermalt vom Soundtrack umherfahren kann. Forza Horizon 4 ist da so ein Kandidat

Diese meditative Erfahrung möchte ich natürlich auch in die reale Welt übertragen. Leider gibt es den FH4 Soundtrack nicht online fürs Auto zu kaufen.
Ich besitze aber die Demo :^)

Im Spiel läuft ja die Musik, also muss sie auch irgendwo auf meinem Computer sein. Ist sie auch. Tief versteckt und geschützt in D:\WindowsApps

Microsoft versucht mit UWP alles in seiner Macht stehende um die Assets der Spiele zu schützen. Weder als TrustedInstaller noch über ein Live Linux war es mir möglich Dateien aus diesem Ordner zu kopieren.
Wie es das tut ist mir nicht ganz klar. Irgendwas mit Filesystem level encryption.

Ich muss es aber auch gar nicht wissen. Jemand anders hat sich damit bereits befasst und eine Lösung gefunden: https://github.com/Wunkolo/UWPDumper

Anstatt die ACLs auszuhebeln injected man einfach eigenen Code in die Anwendung, die die Assets sowieso lesen darf: Die FH4 Demo selbst.

Der Dumper tut genau das was der Name vermuten lässt: Er dumpt alle Assets an einen Ort der für normale Nutzer lesbar ist.

Für den Soundtrack relevant sind hierbei nur eine Handvoll Files:
R1_Tracks.bank bis R6_Tracks.bank und RadioInfo_DE.xml für die Metainformationen.

In diesen Dateien mit .bank Dateiendung befinden sich sich Soundbanks im FMOD Sample Bank Format. Scheint wohl so eine Middleware/Library von einem Drittanbieter zu sein damit nicht jeder Spielentwickler das Rad neu erfinden muss wenn es um Audio Assets geht.
Durch diese große Verbreitung wurde das Format natürlich schon lange reversed und Tools zum entpacken sind frei verfügbar.

Um die fsb Soundbank entpacken zu können muss man zunächst aber mittels des folgenden QuickBMS Skripts aus der .bank-Datei bekommen:

for OFFSET = 0
goto OFFSET
findloc OFFSET string "FSB5"
goto OFFSET
getdstring FSB_SIGN 4 # FSOUND_FSB_HEADER_FSB5 (fsb.h)
get version long
get numsamples long
get shdrsize long
get namesize long
get datasize long
xmath SIZE "0x3c + shdrsize + namesize + datasize"
log "" OFFSET SIZE
next OFFSET + SIZE

Woher das Skript kommt ist für mich leider nicht so recht nachvollziehbar.
Vermutlich ein Werk des Autors von QuickBMS.

Bei QuickBMS scheint es sich um eine Art Baukasten für diverse RE Aufgaben mit unbekannten Dateitypen zu handeln.
Kann man mal im Hinterkopf behalten und beizeiten näher betrachten. Scheint sehr nützlich und vor allem mächtig zu sein.

Mit den fsb Soundbanks braucht es dann nur noch eine fsb_aud_extr.exe, welche unter diesem Namen durch das Internet geistert, um am Ende einen Ordner voller .wav Dateien zu haben. Die Musik selbst liegt innerhalb der fsb als Vorbis mit knapp über 100kbps. 320k ist für MP3s aus diesen WAV-Dateien also nicht sonderlich zielführend.

Nun folgt viel Fleißarbeit in der die nicht weiter mit Metainformationen versehenen WAV-Dateien den richtigen Titelnamen aus der 
RadioInfo_DE.xml zugeordnet bekommen müssen.

~3h später hat man dann sein Ziel erreicht und kann den FH4 Soundtrack auch im echten Auto hören. Das ganze funktioniert übrigens genau so auch mit FH3.