解決了一些問題,取之於apk,那就回饋於apk
1. symbol的address有可能不同
這點是我在公司開3.0.0的版本來試驗時發現的...
對照perfare的 超簡單的il2cpp遊戲修改教程,我發現我找到的symbol address跟截圖有差,目前不確定是不是因為用ida 32/64的差異
2. 用大神寫的unity_loader.py這個plugin可能會出問題
我自己是ida 6.8,load那個script會出問題,因為我的ida沒有ida_idp這個python module
從git hub的report issues發現,可以check回某一版
作者說他ida_idp只是用來check binary是否為x86,所以如果用舊版的話,不support x86,但用回舊版還有其他issues (詳見issues report)
所以我個人的解法是手動幹掉:
import ida_idp
if "PC" in ida_idp.ph_get_regnames() or "pc" in ida_idp.ph_get_regnames():
ARCH = "arm"
else:
ARCH = "x86"
這樣load scriopt後就能跑了
按下ctrl alt a後,等他跑完,所有的symbol就都對得上了,然後就也不用用Il2CppDumper.exe dump cs出來找位置(我自己試過,Il2CppDumper.exe dump出來的dumped.cs跟他mapped的address是一致的)
3. 此時在ida的function table已經有所有的symbole,我直接搜尋get_atk
然後修改如下圖
然後......load activity就crash了......Q Q
有人可以再給一下提示嗎?
dump如下
12-28 01:02:56.987 30388-30434/? D/dalvikvm: Trying to load lib /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so 0x41fdbd30
12-28 01:02:57.011 30388-30434/? D/dalvikvm: Added shared lib /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so 0x41fdbd30
12-28 01:02:57.011 30388-30434/? D/dalvikvm: No JNI_OnLoad found in /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so 0x41fdbd30, skipping init
12-28 01:02:57.637 30388-30434/? E/CRASH: pid: 30388, tid: 30434, name: UnityMain >>> com.sega.chainchronicle <<<
12-28 01:02:57.714 30388-30434/? E/CRASH: #00 pc 01429d7c /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: #01 pc 01429d04 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: #02 pc 0142a370 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 6305315c 6613fc88 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 63053160 66307b62 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 630531a4 66140d08 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 630531c0 6630db68 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 630531c4 6630e1fc /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.714 30388-30434/? E/CRASH: 630531cc 66141374 /data/app-lib/com.sega.chainchronicle-1/libil2cpp.so
12-28 01:02:57.717 30388-30434/? W/System.err: pid: 30388, tid: 30434, name: UnityMain >>> com.sega.chainchronicle <<<
12-28 01:02:57.718 30388-30434/? E/AndroidRuntime: FATAL EXCEPTION: UnityMain
java.lang.Error: FATAL EXCEPTION [UnityMain]
Unity version : 5.4.3p2
Device model : Foxconn International Holdings Limited InFocus M320
Device fingerprint: infocus/M320_15TW/M320:4.2.2/JDQ39/15TW_0_13T:user/release-keys
Caused by: java.lang.Error: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 6b0531cc
Build fingerprint: "infocus/M320_15TW/M320:4.2.2/JDQ39/15TW_0_13T:user/release-keys"
Revision: "0"
pid: 30388, tid: 30434, name: UnityMain >>> com.sega.chainchronicle <<<
r0 01ffffff r1 00000012 r2 701c4000 r3 00000001
r4 665bbebc r5 00000000 r6 00000008 r7 66d762c0
r8 fffffff7 r9 ffffffff sl 630531d0 fp 6305320c
ip 6650efd4 sp 63053180 lr 66140d54 pc 66140d7c cpsr 5f575435
at libil2cpp.01429d7c(Native Method)
at libil2cpp.01429d04(Native Method)
at libil2cpp.0142a370(Native Method)
12-28 01:02:57.719 670-3095/? W/ActivityManager: Force finishing activity com.sega.chainchronicle/.MainActivity
|