1. 程式人生 > >靜態分析第三發 so文件分析(小黃人快跑)

靜態分析第三發 so文件分析(小黃人快跑)

調試 代碼 lin 很大的 inline fse ati line 運算

本文作者:i春秋作家——HAI_

0×00 工具

1.IDA pro

2.Android Killer

0×01 環境

小黃人快跑 下載地址http://download.csdn.net/download/qq_36869808/10179100

0×02 支付分析

技術分享圖片

和其他的支付不一樣,沒有使用原生的Toast,所以我們要進行進一步分析。

0×03 祭神器

之前隱藏了一個技能,當然不是我的哈,是神器的技能。這個技能厲害到不需要動態調試就可以查看LOG。也是感謝程序員的辛勤奉獻,不知道是不是調試完之後忘記刪除還是偷懶,不過這對做逆向的反而是一個好事情。換句話說,程序員自己給逆向分析人才留下了可以操作的後門地址。不多說了,直接祭出神器吧。

1.首先在這裏連接Android模擬器

技術分享圖片

關於Android模擬器,下載了夜神還有海馬玩,還有藍疊。藍疊是剛開始的時候的用的,卡鼠標,好處是遊戲不卡。海馬玩性能還好,遊戲一般,但是不支持拖拽,不喜歡。夜神,不知道是在我的電腦上有問題還是普遍問題。遊戲超級卡,而且需要通過夜神的應用商店進入。最後還是用藍疊吧,卡就卡點,但是模擬真機性能沒有問題。

2.第二步,點擊安裝

如果安裝出現問題,直接安裝在虛擬機就行,可以不通過Android Killer安裝。

技術分享圖片

3.第三步,點擊運行

技術分享圖片

4.第四步,點擊日誌

技術分享圖片

5.第五步,LOG界面一個簡單的介紹

技術分享圖片

6.第六步,首先設置過濾篩選,然後點擊開始

技術分享圖片

7.第七步,在遊戲裏點擊購買,查看LOG

技術分享圖片

8.分析輸出日誌

技術分享圖片

在我們每次點擊返回的時候都會輸出一大串字符,每次都有,這裏就是我們的終點了,這裏就是程序員留下來的突破點了。

0×04 關鍵字分析

1.不細講了,看https://bbs.ichunqiu.com/thread-30248-1-1.html這裏就好了。

技術分享圖片

這裏找到了這串字符,並且向上查看,發現了一個X類()。

    sget-object v0, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->N:Lcom/gameloft/android/ANMP/GloftDMHM/Game;

    new-instance v1, Lcom/gameloft/android/ANMP/GloftDMHM/x;
    # 這裏的意思就是new 了一個名為 x的類。

2.打開這個x()類

技術分享圖片

分析發現這裏有一個GameInterface->doBilling,繼續溯源。

3.搜索GameInterface

技術分享圖片

根據方法來進行判斷,找到了一個NDK調用的方法,nativeBillingDone,意思就是購買完成,或者支付完成的意思。如果看了之前有關於NDK開發的,並且進行過嘗試的,這裏應該會認得,會簡單一些。

4.搜索加載so的文件。

技術分享圖片

找到了文件名despicablemefree

技術分享圖片

關鍵字分析到這裏就結束了,我們成功的找到了so文件,接下來就該到so文件的分析了。

0×05 so 文件靜態分析

1.在export中搜索一下

nativeBillingDone

技術分享圖片

2.雙擊,然後進行分析

技術分享圖片

這裏的B是調用的意思,調用了addCash,cash是現金的意思,addcash就是增加金幣的意思。

3.進入函數進行一個簡單的分析(為了更加了解ARM匯編所以這裏會進行一個詳細分析)。

技術分享圖片

(1)STMFD SP!, {R3-R8,R10,LR} 這個看起來很復雜其實作用就是入棧
(2)CMP R0, #1 CMP指令的作用是把一個寄存器的內容和另一個寄存器的內容或立即數進行比較,更新CPSR中條件標誌位的值。CMP會進行一次減法運算,不存儲結果,只更改條件標誌位。這裏是 把傳入的R0和1進行比較。
(3)LDR R5, =(_GLOBAL_OFFSETTABLE - 0×209014)LDR的作用就是把數據送入R5,_GLOBAL_OFFSET_TABLE_的含義就是全局偏移量。
(4)MOV R6, R0 傳入的參數給R6
(5)ADD R5, PC, R5 ; _GLOBAL_OFFSETTABLE ADD指令用於把兩個操作數相加,並將結果存放到目的寄存器中。
(6) BNE loc_209028BNE指令是“不相等(或不為0)跳轉指令”:

以上六條語句大意就是如果輸入的值是1的話就把傳入的參數給R6

然後接著往下看。

(7) LDR R3, =(off_A45CC4 – 0xA48944)
(8)MOV R2, #2,給R2賦值為2
(9) LDR R3, [R5,R3] ; unk_A56BE0把R5+R3的地址寫入R3
(10) STR R2, [R3] 32位的大小送入寄存器,把R3的地址送入R2
(11)LDMFD SP!, {R3-R8,R10,PC} 出棧,也就是所謂的釋放。

我們去看看如果條件不滿足跳轉到loc_209028的語句。

(1)CMP R0, #0比較,如何R0=0就執行一下語句。
(2)MOV R3, #1 R3賦值為1
(3)LDREQ R2, =(off_A45CC4 – 0xA48944) EQ的意識是如果相等的話就執行。
(4)MOVEQ R1, R0如何R1==R0,則執行mov R1,R0。
(5)LDREQ R2, [R5,R2] ;如果R2的地址==R5+R2則執行
(6)STREQ R3, [R2]如果R3的值和R2的相等,則執行
(7)BEQ loc_209074 如何R3==R2,跳轉
(8)CMP R0, #3 BNE loc_20905C,如果R0!=3就跳轉。

loc_20905C代碼分析

CMP R0, #4 BNE loc_20907C如果不等於4則跳轉到loc_20907C

loc_20907C分析

(1)CMP R0, #6 BEQ loc_209064如果R0==6則跳轉
(2)LDR R0, [R4] BNE loc_2090D4如果R0!=R4就跳轉。

loc_2090D4分析

(1)CMP R6, #8 BNE loc_209118,如果R6!=8就跳轉
(2)MOV R1, #0x49C8 BL sub_208DAC如果8R==6,就會有一個很大的數字生成,這裏可能就是初始化的數值,可以通過好幾種方法來觀察。

0×06 進行初始化修改。

1.返回Android killer,在何時的位置加上

const/16 v3, 0x9

    invoke-static {v3}, Lcom/gameloft/android/ANMP/GloftDMHM/Game;->nativeBillingDone(I)V

2.然後進行測試即可,這個時候會發現初始的香蕉數量已經變成了18888

>>>>>>黑客入門必備技能 帶你入坑,和逗比表哥們一起聊聊黑客的事兒,他們說高精尖的技術比農藥都好玩!

靜態分析第三發 so文件分析(小黃人快跑)