0x7.so文件匯編修改
本文通過cocos2d游戲的修改來介紹so文件的匯編修改,提綱如下:
開始破解之前,照舊安裝和確認(rèn)破解項,發(fā)現(xiàn)初始金幣為100,我們姑且定為破解金幣數(shù)量。
對于cocos2d手游,可修改的函數(shù)主要位于libcocos2dcpp.so中。
接下來我們開始進(jìn)行so文件的分析:反編譯、確認(rèn)關(guān)鍵函數(shù)及邏輯、十六進(jìn)制修改。
0x1. so文件反編譯
反編譯工具為我們熟知的IDA,將so文件拖拽進(jìn)IDA窗口,反編譯后可以得到匯編代碼。
0x2.確認(rèn)關(guān)鍵函數(shù)及邏輯
既然是修改金幣,那我們在IDA的Exports一欄按Ctrl+F搜索gold,結(jié)果如下:
看到結(jié)果后,很顯然我們需要的是getgold,排除掉兩個bool型(布爾型,只有0和1)的getgold,只剩下GameController::getGold(CAVE_MODE),雙擊進(jìn)入查看:
那么我們要做的就是,給R0一個更大的值,比如一個固定的比較大的數(shù)。在修改之前我們先熟悉一下ARM匯編中的MOV指令:
如果我們需要將1024000賦值給R0,則可以寫為 MOV R0,,#1024000
0x3.so文件十六進(jìn)制修改
這個賦值指令如何修改呢? 這里我們需要借助ARM匯編轉(zhuǎn)換器,將該指令轉(zhuǎn)換為十六進(jìn)制,然后在so文件中修改十六進(jìn)制數(shù)據(jù)達(dá)到修改指令的目的。
經(jīng)轉(zhuǎn)換我們得到
MOV R0,,#1024000的十六進(jìn)制為 FA 0A A0 E3
IDA中,我們定位到該語句偏移地址,切換到十六進(jìn)制查看:
我們現(xiàn)在要做的就是,地址為8552B0的十六進(jìn)制 03 00 A0 E1 修改為
FA 0A A0 E3,此步驟我們使用010Editor來完成。
上圖為我們修改后的值,將修改后的so文件放回lib目錄下,打包運(yùn)行即可,請大家自己嘗試;可舉一反三嘗試修改鉆石數(shù)量。