跟着鬼哥學so修改,四,實例第一篇
圖/文 聽鬼哥說故事
---------------------------------------------分割線--------------------------------------------
這篇文章是前段時間的文章,最近這個系列的so分析剛好可以做爲一個實例教程,所以就補充拿回來了。
前三篇沒看的,請繼續關注博客,看完前面三篇。
趁熱打鐵,加深對so的分析過程,於是就有了這篇文章的補充························
另,此文章需要對android反編譯逆向有一定基礎,簡單瞭解so的作用,有任何疑惑,可去羣裏和論壇或自行google搜索解決。
文章受www.pd521.com 站長邀請,首發在其論壇,大家可以過去關注,很多基礎資料,方便新手學習。
請大家自己動手去練習!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------------------------------分割線--------------------------------------------
今天我們來分析的是小黃人快跑,小黃人的形象從電影上面一直都蠻好的,現在都拍到了第二部了,所以我們找到這個遊戲來進行分析。
第一層次分析:
拿到遊戲,首先我們得先安裝看看有什麼地方是值得破解的。
通過觀察,我們發現遊戲中主要的消費方式在香蕉和金幣上面,既然這樣,那麼我們就先看看支付上面是否可以直接破解內購。購買截圖如下圖所示:
和遊戲支付的方式,那麼就查詢相關資料,例如以前我的教程中對onPayFailed方法的修改,對onBillingFinish方法的修改,在這裏可能是對移動支付進行了升級,沒法直接那樣操作。既然這樣,那麼我們就查看下Logcat,看看有無有價值的信息。
通過多次測試,我們發現在點擊進入遊戲支付的時候有這行輸出,那麼好,我們就跟進觀察這行代碼,這行代碼後面肯定是啓動支付流程的相關代碼。
對於smali代碼不熟悉的同學,那麼直接使用jd-gui打開jar文件查看吧,如下:
搜索找到我們發現的特徵字符,如下:
搜索找到我們發現的特徵字符,如下:
曉得了so的名稱,那麼我們就掛起ida,java可以直接調用使用的肯定都是export導出函數,所以我們在export中搜索nativeBillingDone:
然後看到這個方法:
好,大致看懂第一段代碼後,我們往下翻翻:
通過圖片中的文字說明,我們也簡單能夠明白,我們需要做的,就是先測試一下,將這個addcash(int)方法的傳入參數設置爲8會怎麼樣,是不是會增加金幣。所以我們回到最初分析的時候,看這裏:
通過圖片中的文字說明,我們也簡單能夠明白,我們需要做的,就是先測試一下,將這個addcash(int)方法的傳入參數設置爲8會怎麼樣,是不是會增加金幣。所以我們回到最初分析的時候,看這裏:
進行完第一層次分析後,我們知道已經分析對了位置。So文件中的算法也找對了,那麼,我們初始化多增加點金幣多好,於是,我們繼續開始分析
關鍵點就在addcash方法中的這一行對R1複製的代碼上面,我們打開16進制看一眼:
因爲那個本身的立即數,通過觀察發現原本的指令剛好反過來爲E3 04 19 C8 ,那麼對照0x49C8,我直接修改爲如上圖所示:
發現直接修改成功了,好了,這樣就更給力了,我們直接使用010Editor或者UE,操作so文件
排版看的不舒服的,直接看文檔即可,相關附件地址:
鏈接:http://pan.baidu.com/s/1eQILJkI 密碼:7kyr
其實此遊戲還有很多方式去破解的,這裏只是介紹一兩種而已,大家可以自行補充~
轉載請註明出處~~~~~~~~~~