跟著鬼哥學so修改,五,執行個體第二篇,so第二篇
圖/文 聽鬼哥說故事
---------------------------------------------分割線--------------------------------------------
這篇文章也是前段時間的文章,最近這個系列的so分析剛好可以做為一個執行個體教程,所以就補充拿回來了。
前四篇沒看的,請繼續關注部落格,看完前面四篇。
趁熱打鐵,加深對so的分析過程,於是就有了這篇文章的補充························
另,此文章需要對android反編譯逆向有一定基礎,簡單瞭解so的作用,有任何疑惑,可去群裡和論壇或自行google搜尋解決。
文章受www.pd521.com 站長邀請,首發在其論壇,大家可以過去關注,很多基礎資料,方便新手學習
請大家自己動手去練習!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------------------------------分割線--------------------------------------------
以TTX連萌來多層次分析遊戲破解
這裡只是摘取so部分過來給大家看,原文詳細連結:
http://blog.csdn.net/guiguzi1110/article/details/40586339
0x1:直接修改金幣
通過OnBillingFinish()方法
我們進入到這個PopStar查看:
當然,這個類裡面還有很多方法,很多支援破解的方法,如:
定義購買金幣數量的,即購買成功後增加的數量。等等。。。
長話短說,咱們看到PopStar.nativeAddCoin方法後,確定是一個native方法,那麼我們找到上文
System.loadLibrary("xinxin");
用IDA載入libxinxin.so,然後定位到nativeAddCoin方法.
現在大家多數用的大佬的那個IDA,帶F5的,那麼我們直接f5
查看到這裡的方法,useGameCoin方法。開啟這個方法查看:
這裡有我加的注釋,很清晰的,看不明白的,F5一下也就知道了。
因為getIntegerForKey,返回值為R0,然後往下第二行代碼,R0=R0+R6,所以我們關鍵是在這裡修改R0,即金幣數量
Hex查看一下二進位,這裡為Thumb指令,那麼我們可以操作局限性也很高了。
所以,這裡提供一個思路,大家可以尋找更加簡便的方法。
即,BL getIntegerForKey,我們直接複製R0一個數值,然後在下面Adds R0,R0,R6這裡,直接對R0邏輯左移一下,即LSL一下,將其數值變大。
因為第一個BL是4個位元組,我們直接修改 00 00 09 20 ,即Movs R0,R0 代表沒有任何操作,09 20是將數字9賦值給R0
然後ADDs那一行,有兩個位元組,直接改為 00 04,即 LSLS R0,R0,#0x10
這樣,我們即完成了對金幣數量的賦值,如:
然後,我們在16進位下修改,選用010Editor或UE,ctrl + g,進行地址跳轉,尋找到我們在IDA修改的地址,按照上文修改,儲存,替換,回編譯。
注釋:: int a=9 ; a=a<<0x10; 即金幣鎖定為589824
這裡需要說明的是,這個方法何時被調用,即才能啟用我們對金幣的賦值呢?
直接在IDA裡面對這個方法按下x鍵,查看調用,有5處。那麼應該很容易被啟用。
紅色標註的,是使用金幣的道具,按照我們看到方法被調用的地方,這裡被調用了,然後金幣數量即我們定義的。
0x2:修改簡訊
這裡不多說了,根據系統傳送簡訊函數進行尋找修改,替換簡訊內容,替換簡訊發送人即可。
我直接使用hook的方式替換的,比較省事了。。
相關代碼不難,看完我前面幾篇hook java的文章的同學,應該很容易能夠寫出來代碼,這裡不再多寫,有興趣,自己動手去。
文檔和相關附件:
http://pan.baidu.com/s/1kTLwwDL