0x7.so文件匯編修改

0x7.so文件匯編修改


本文通過cocos2d游戲的修改來介紹so文件的匯編修改,提綱如下:



本文使用的樣本是cocos2d手游貪婪洞窟,可自行下載,也可以使用鏈接下載 https://pan.baidu.com/s/1d6BVzS  密碼: 8nyk
開始破解之前,照舊安裝和確認(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ù)量。

?