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


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

0×00 工具

1.IDA pro

2.Android Killer

0×01 環境

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

0×02 支付分析

1.png

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

0×03 祭神器

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

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

2.png

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

2.第二步,點擊安裝

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

3.png

3.第三步,點擊運行

4.png

4.第四步,點擊日志

5.png

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

6.png

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

7.png

7.第七步,在游戲里點擊購買,查看LOG

8.png

8.分析輸出日志

9.png

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

0×04 關鍵字分析

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

10.png

這里找到了這串字符,並且向上查看,發現了一個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()類

11.png

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

3.搜索GameInterface

12.png

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

4.搜索加載so的文件。

13.png

找到了文件名despicablemefree

13.png

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

0×05 so 文件靜態分析

1.在export中搜索一下

nativeBillingDone

15.png

2.雙擊,然后進行分析

16.png

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

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

17.png

(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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM