这里只说 AssetBundle,只有思路。
1 废话般前提:逻辑上 AssetBundle 文件加密后肯定是需要解密了,再进行加载。
2 Unity 加载AssetBundle文件可以使用 AssetBundle.LoadFromFile,加载内存流可以用AssetBundle.LoadFromMemory 和 AssetBundle.LoadFromStream。
这些方法对应还有代Async后缀的异步加载方法。
文档在:https://docs.unity3d.com/ScriptReference/AssetBundle.html
3 打断点,看backtrace。
4 慢慢调试。
在我这个场景里,il2cpp dump是没有需求的。
贴一个bt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1 * frame #0: 0x0000000101234a68 global`AssetBundle_LoadFromMemory_m412557059 frame #1: 0x000000010025a610 global`U3CLoadDynamicAssetBundleU3Ec__AnonStorey3_U3CU3Em__0_m1954562509 + 72 frame #2: 0x000000010013a09c global`MainThreadDispatcher_SendAndWait_m4140732116 + 192 frame #3: 0x0000000100259414 global`AssetBundleLoader_LoadDynamicAssetBundle_m153660618 + 540 frame #4: 0x0000000100259e70 global`AssetBundleLoader_Load_m859069093 + 732 frame #5: 0x000000010072930c global`SpriteLoader_Load_m3286678683 + 1784 frame #6: 0x00000001005327c0 global`ExtImage_Awake_m3150663317 + 456 frame #7: 0x00000001017d6ad0 global`RuntimeInvoker_Void_t1841601450(MethodInfo const*, void*, void**) + 28 frame #8: 0x00000001021a1e24 global`il2cpp::vm::Runtime::Invoke(MethodInfo const*, void*, void**, Il2CppException**) + 68 frame #9: 0x0000000101c035f4 global`ScriptingInvocation::Invoke(Il2CppException**, bool) + 60 frame #10: 0x0000000101c0352c global`ScriptingInvocation::InvokeChecked(Il2CppException**) + 68 frame #11: 0x0000000101ce10ac global`MonoBehaviour::CallMethodInactive(ScriptingMethodIl2Cpp) + 88 frame #12: 0x0000000101ce2e34 global`MonoBehaviour::CallAwake() + 76 frame #13: 0x0000000101ce3134 global`MonoBehaviour::AddToManager() + 132 frame #14: 0x0000000101ce2dcc global`MonoBehaviour::AwakeFromLoad(AwakeFromLoadMode) + 568 frame #15: 0x0000000101c0c548 global`AwakeFromLoadQueue::InvokePersistentManagerAwake(AwakeFromLoadQueue::Item*, unsigned int, AwakeFromLoadMode) + 96 frame #16: 0x0000000101c0c48c global`AwakeFromLoadQueue::PersistentManagerAwakeFromLoad(int, AwakeFromLoadMode) + 140 frame #17: 0x0000000101c0c3e8 global`AwakeFromLoadQueue::PersistentManagerAwakeFromLoad() + 36 frame #18: 0x0000000101bfc9b8 global`LoadSceneOperation::CompleteAwakeSequence() + 96 frame #19: 0x0000000101bfc3e0 global`LoadSceneOperation::PostLoadSceneAdditive() + 32 frame #20: 0x0000000101bfc304 global`LoadSceneOperation::IntegrateMainThread() + 80 frame #21: 0x0000000101bfd01c global`PreloadManager::UpdatePreloadingSingleStep(PreloadManager::UpdatePreloadingFlags, int) + 316 frame #22: 0x0000000101bfd59c global`PreloadManager::UpdatePreloading() + 252 frame #23: 0x0000000101b07c4c global`PlayerLoop() + 332 frame #24: 0x0000000101d4381c global`UnityPlayerLoopImpl(bool) + 32 frame #25: 0x0000000100047c80 global`UnityRepaint + 140 frame #26: 0x0000000100047b6c global`-[UnityAppController(Rendering) repaintDisplayLink] + 88 frame #27: 0x0000000184da2f24 QuartzCore`CA::Display::DisplayLinkItem::dispatch(unsigned long long) + 44 frame #28: 0x0000000184da2dd0 QuartzCore`CA::Display::DisplayLink::dispatch_items(unsigned long long, unsigned long long, unsigned long long) + 444 frame #29: 0x0000000181dba094 IOKit`IODispatchCalloutFromCFMessage + 372 frame #30: 0x0000000181ae2e50 CoreFoundation`__CFMachPortPerform + 180 frame #31: 0x0000000181afb218 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 56 frame #32: 0x0000000181afa9cc CoreFoundation`__CFRunLoopDoSource1 + 436 frame #33: 0x0000000181af84b0 CoreFoundation`__CFRunLoopRun + 1840 frame #34: 0x0000000181a262b8 CoreFoundation`CFRunLoopRunSpecific + 444 frame #35: 0x00000001834da198 GraphicsServices`GSEventRunModal + 180 frame #36: 0x0000000187a6d7fc UIKit`-[UIApplication _run] + 684 frame #37: 0x0000000187a68534 UIKit`UIApplicationMain + 208 frame #38: 0x00000001000417dc global`main + 156 frame #39: 0x0000000180a095b8 libdyld.dylib`start + 4 |
工具:
https://github.com/Perfare/UnityStudio
https://github.com/HearthSim/UnityPack
Unity3d资源文件解密 by @sskaje: https://sskaje.me/2018/02/unity3d-asset-bundle-decrypt/
Link to this post!