Super Mario Run: *.COMPRESSED (Encrypted)

Extraction and unpacking of game archives and compression, encryption, obfuscation, decoding of unknown files
LolHacksRule
Posts: 865
Joined: Fri Apr 20, 2018 12:41 am

Super Mario Run: *.COMPRESSED (Encrypted)

Post by LolHacksRule »

I want to view the .compressed files from Super Mario Run's text assets, but they are encrypted or compressed in some way I cannot figure out, any advice on decrypting and viewing these files? If so thanks. :)
Last edited by LolHacksRule on Sun May 03, 2020 11:47 pm, edited 1 time in total.
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Super Mario Run (.COMPRESSED)

Post by aluigi »

I'm not sure if the ".compressed" extension is honest. These files look more encrypted than compressed, moreover because they already come from a ZIP archive that uses compression.
LolHacksRule
Posts: 865
Joined: Fri Apr 20, 2018 12:41 am

Re: Super Mario Run (.COMPRESSED)

Post by LolHacksRule »

Yeah, I think its encrypted too... I found ZLIB asset compression loading mentioned in the game assembly, not sure if that's 100% useful but it's something... I'll dive into it more when I get home...
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Super Mario Run (.COMPRESSED)

Post by aluigi »

Eh no, no zlib or deflate used in the .compressed files.
LolHacksRule
Posts: 865
Joined: Fri Apr 20, 2018 12:41 am

Re: Super Mario Run (.COMPRESSED)

Post by LolHacksRule »

Oh ok. The monobehaviours for relating to these files list the files in them, and their dependencies...

Code: Select all

(Sample MonoBehaviour for .compressed)

PPtr<GameObject> m_GameObject
   int m_FileID = 0
   int64 m_PathID = 0
UInt8 m_Enabled = 1
PPtr<MonoScript> m_Script
   int m_FileID = 1
   int64 m_PathID = 1344
string m_Name = "XXX.compressed"
String AssetBundleName = "XXX.compressed"
String[] AssetBundleKey
   int size = 13
      [0]
      String data = "XXX.XXX"
String[] AssetBundleDependencies
   int size = 13
      [0]
      String data = "XXX.compressed"


Almost the assets from the CDN also use this extension after the STIR (SimpleEncryption) mechanism, however, .compressed in those files are just notes as decryption of these files output plain Unity3D files.
Last edited by LolHacksRule on Sun May 03, 2020 11:53 pm, edited 1 time in total.
LolHacksRule
Posts: 865
Joined: Fri Apr 20, 2018 12:41 am

Re: Super Mario Run: *.COMPRESSED (Encrypted)

Post by LolHacksRule »

A setting for fullEncryption (.ENCRYPT) is present, luckily the developers didn't go that far...
LolHacksRule
Posts: 865
Joined: Fri Apr 20, 2018 12:41 am

Re: Super Mario Run: *.COMPRESSED (Encrypted/Chunkbased [?] Unity AssetBundles)

Post by LolHacksRule »

Coming back to this. According to code and internal directory naming, these are Unity AssetBundles in some form. There's three forms of encryptions to them, being None, Simple or Full, the only one enabled is Simple being STIR from the CDN. According to internals, these files may be chunkbased. Can someone crack them? There's interesting files in them. This does NOT have any keys. I attempted to look at the game's lib and got nowhere.

Code: Select all

AssetBundleSettings (MonoBehaviour):
{
  "m_GameObject": {
    "m_FileID": 0,
    "m_PathID": 0
  },
  "m_Enabled": 1,
  "m_Script": {
    "m_FileID": 1,
    "m_PathID": 1500
  },
  "m_Name": "AssetBundleSetting",
  "outputFolder": "bundles/",
  "baseUrl": "http://localhost/",
  "indexFolder": "Assets/AssetBundle/Indexes/",
  "descriptionFolder": "Assets/AssetBundle/Descriptions/",
  "originalFolder": "Assets/AssetBundle/Original/",
  "mode": 1,
  "debugBuild": true,
  "wwwTimeout": 120.0,
  "assetBundleLoadWorkerNum": 4,
  "useHttpBasicAuthentication": false,
  "username": "",
  "password": "",
  "preloadPriorityThreshold": 5,
  "isZlibCompressed": false,
  "usePrefabInAssetBundle": true,
  "zlibCompressedThreshold": 0.8,
  "zlibExclusiveAssetBundle": [],
  "assetListPrefix": "",
  "useFullEncryption": false,
  "fullEncryptionSuffix": ".encrypt",
  "fullEncryptionKey": {
    "p": [],
    "c": [],
    "i": false
  },
  "useSimpleEncryption": true,
  "simpleEncryptionSuffix": ".stir",
  "simpleEncryptionSpan": 256,
  "simpleEncryptionInitialSpan": 512,
  "simpleEncryptionKey": 93,
  "useAssetCompress": true,
  "isAssetCompressChunkbased": true,
  "assetCompressAffix": ".compressed",
  "assetGroups": [
    ".*"
  ],
  "useGroupDirectory": true,
  "runtimeAssetBasePath": "",
  "bundlePlatformList": [
    {
      "platform": "ios"
    },
    {
      "platform": "android"
    }
  ]
}