鎖鏈戰記3.0版本也是換上了il2cpp,所以剛好就用它來寫一篇簡單的il2cpp修改教程
使用的是日服3.0.1版的鎖鏈戰記
首先要使用一款工具:Il2CppDumper,暑假pokemon go火起來的時候國外出現了一堆U3D的修改工具,這就是其中之一。這里推薦使用這個增加了交互功能的版本,可以省的自己重新編譯。至於這工具具體功能我就懶得介紹了,反正往下看就知道啦~。
使用Il2CppDumper
從apk解壓出libil2cpp.so和global-metadata.dat,把libil2cpp.so丟進ida,等分析結束后,在左側Functions window搜索il2cpp::vm::MetadataCache::Register
雙擊.plt那一行,在右側可以看到一個引用,雙擊可以看到這個
接下來把上面的Il2CppDumper和libil2cpp.so,global-metadata.dat放在一起,雙擊運行,分別輸入上圖的頭兩個offset,就是174E858和1739C10,等待幾秒后就能生成dump.cs啦
修改
打開dump.cs看一眼,你大概就可以猜出Il2CppDumper的功能了。接下來就是找修改的位置,這里直接參考了我去年寫的一篇文章,里面列舉了非常基礎的修改位置,可以看出修改攻擊力的話就是修改CardInfo下的get_ATK函數的返回值,在dump.cs里搜索就能找到,右側的值就是函數所在的位置啦
接下來就是修改so,因為這就是個返回攻擊力int數值的函數,所以修改思路就是讓它返回一個大值,這里il的代碼還是有點參考價值的,arm下也就是兩句話
mov r0,#0x19000 —> ldc.i4 0x19000
bx lr —> ret
注意arm里不是所有數都可以是立即數的,具體的就自行百度啦
接下來就把這兩句話轉換成HEX,用這個在線轉換網站,輸入上面兩段代碼,在ida里明顯可以看出代碼的間隔是4字節,也就是32位,所以就選x32,點擊Convert后就可以得到HEX
190AA0E3
1EFF2FE1
接下來就在16進制編輯器里,跳轉到偏移0x91ae50,把上面的HEX寫進去就修改成功啦~