Crakeme01.apk過反調試,取密碼

1.準備工作完成後,在JNI_OnLoad函數第一行設置斷點,然後F8往下執行,會發現調試將在D03140C8這個位置崩掉

 

2.在新IDA窗口中分析該so文件,找到這個崩掉的位置的這個方法,進去查看該函數幹了什麼事情 

(1) 

(2) 

(3) 進去後,能F5查看僞代碼就查看僞代碼,雖然看不是很懂C/C++代碼,大致可猜測他是檢測是否被調試,從內容中沒看到它在執行除了檢測調試之外的其他代碼,那麼大可放心把進入這個函數的入口給幹掉.

3.把進入AD的這個BLX指令幹掉 

(1) 

 

(2)

(3) 幹掉之後,F9 安全通過

4.在smali中得知校驗密碼調用的是greywolf(Landroid/content/Context;Ljava/lang/String;)V方法,有兩個參數

接下來就是取正確密碼了,先取消勾選的三項,進入bc方法,在bc方法設置個斷點

(1)

(2) 

 

5.java調用so層的方法,有默認的兩個參數,一個是JNIEnv *env, 一個是jobject obj, greywolf有兩個參數,一個是Context(R2),一個是String(R3),那麼String正常就是存在R3這個寄存器中,接下來就是追蹤R3這個寄存器的走向

 

 6.到了下一個跳轉的位置,在靜態分析中,繼續跟進,

(1) 

(2) 通過dh函數一路進去,可發現這是一個簽名校驗的方法

 

 (3)由於很多地方都調用到了dh這個方法,把每個調用到dh的地方都幹掉不太現實,那麼久直接修改dh的返回值,讓它直接返回true(true爲1)

 

 

 

7. 通過F5可發現,這是一個解密函數,

 (1)

 (2)

8. 可以看到,此函數返回的是"hello5.1"

 

 9.偷一下懶,暫不去考慮其他的,拿這個字符串去輸一下,可以發現祕密是正確的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章