I have recently found a bunch of old iPod (pre-touch) games. These ipg
files (similar to modern iOS ipa
files). Are application bundles which contain resources (images, music files, textures), sometimes a localized strings file, and executables.
Each bundle contains a Manifest.plist file, with executable information. Below is the manifest for Bomberman 1.0:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>BuildIdentifier</key>
<string>1465338237-ae7bdef1533
</string>
<key>Files</key>
<array>
<dict>
<key>Digest</key>
<string>D576EBCA193EA6C08060394435497CBE52288730</string>
<key>Path</key>
<string>bombLaunchm25.raw.lcd5</string>
<key>Size</key>
<integer>138256</integer>
</dict>
<dict>
<key>DRM</key>
<true/>
<key>Digest</key>
<string>10A5CD8E82B692D4A3136753639FFE9EC96F9E72</string>
<key>Path</key>
<string>Executables/iPodBomberman_7052137.bin</string>
<key>Size</key>
<integer>425664</integer>
<key>Verify</key>
<true/>
</dict>
<dict>
<key>Digest</key>
<string>3DBFC1556706CF12555448CC5103FCCB59E6E773</string>
<key>Path</key>
<string>bombLaunchm1a.raw.lcd5</string>
<key>Size</key>
<integer>6176</integer>
</dict>
<dict>
<key>DRM</key>
<true/>
<key>Digest</key>
<string>99B99192D77939DAB9A7E05AEB9ED564D33ECFDB</string>
<key>Path</key>
<string>Executables/iPodBomberman_7052208.bin</string>
<key>Size</key>
<integer>633344</integer>
<key>Verify</key>
<true/>
</dict>
</array>
<key>GUID</key>
<string>20000</string>
<key>Name</key>
<string>Bomberman</string>
<key>Platforms</key>
<array>
<dict>
<key>BuildID</key>
<integer>7052137</integer>
<key>ExecutablePath</key>
<string>Executables/iPodBomberman_7052137.bin</string>
<key>LaunchingArtwork</key>
<string>bombLaunchm25.raw.lcd5</string>
<key>PlatformID</key>
<integer>1</integer>
<key>PlatformVersion</key>
<integer>1</integer>
<key>Size</key>
<integer>425664</integer>
</dict>
<dict>
<key>BuildID</key>
<integer>7052208</integer>
<key>ExecutablePath</key>
<string>Executables/iPodBomberman_7052208.bin</string>
<key>LaunchingArtwork</key>
<string>bombLaunchm1a.raw.lcd5</string>
<key>PlatformID</key>
<integer>2</integer>
<key>PlatformVersion</key>
<integer>1</integer>
<key>Size</key>
<integer>633344</integer>
</dict>
<dict>
<key>BuildID</key>
<integer>7052208</integer>
<key>ExecutablePath</key>
<string>Executables/iPodBomberman_7052208.bin</string>
<key>LaunchingArtwork</key>
<string>bombLaunchm1a.raw.lcd5</string>
<key>PlatformID</key>
<integer>3</integer>
<key>PlatformVersion</key>
<integer>1</integer>
<key>Size</key>
<integer>633344</integer>
</dict>
</array>
<key>Version</key>
<string>1.0</string>
</dict>
</plist>
The Manifest appears to contain two different builds (one is listed twice), presumably for two different iPod architectures (?). For each executable there also appears to be an accompanying .bin.sinf
file, which I believe contains purchaser information used by Apple's FairPlay DRM.
Here's where I get stuck:
Running
strings
on either of the executables,.bin.sinf
files, or the.raw.lcd5
files prints garbage.Running
nm
gives me an error that the files are not object files.file
just tells me that the files are binary data.I cannot use
otool
because the files are not Mach-O binaries.
According to Wikipedia, all iPods before the 6th gen classic used an ARM processor (one or more 7TDMI-derived CPUs).
What are my options for dissembling or reading any of the information (strings, etc) of these executables and binary files?
sinf
contain purchaser-specific keys to start the executable. But wouldn't it be odd for all the binary files in the bundle to be encrypted? Surely the game data should be somehow visible.