斷點的設置方法

斷點的設置,本質上就是動態調試時,在大量代碼中快速找到關鍵代碼的過程。


在 Android 逆向過程中,設置斷點有兩個思路:

一)。順流程思路

拿登錄流程來說,必定有用戶名及密碼輸入框以及登錄按鈕!

順流程思路的關鍵,就是找到登錄按鈕點擊事件的處理函數!(或者回車鍵盤處理函數)

然後一級級分析函數的下層調用關係,直到向服務器發送請求數據部分爲止

數據加密、封裝請求包,一定是在這個過程中進行的!

(注:加密、封包等操作不一定是在同一線程中進行,要分析的目標程序有可能會另外開新線程來做這些操作)



二)。逆流程思路

還是拿登錄流程來說,當輸入錯誤的密碼並點擊登錄按鈕後,

服務器端必定返回登錄失敗的代碼,然後客戶端也必定會提示密碼錯誤!

提示密碼錯誤,就是顯示字符串的過程,所以,逆流程的關鍵是:

找到顯示這個字符串的函數,然後從這個函數開始,逐層分析上層調用者,直到接收服務器數據的網絡請求部分!

數據解密、解封響應包,一定是在這個過程中進行的!

(注:有可能開新線程)


如何找到登錄按鈕點擊事件的處理函數?

第1步:使用android sdk 的 "UI Automator Viewer" 工具找到登錄按鈕的資源ID:

(這個工具在 android sdk 目錄中, 如:D:\Android\sdk\tools\uiautomatorviewer.bat )



第二步:使用 adb shell dumpsys activity | findstr "mFocusedActivity" 指令取當前界面所屬的包名及界面的類名


得到的類名像這樣:com.lenovo.testApp/.ui.LoginUI


上面兩步得到了 登錄按鈕的資源ID 和 界面的類名

這時,只要在分析反編譯出來的代碼中分析這個界面類,查找這個資源相關的代碼,即可以找到登錄按鈕的 onclick 函數

但很多時候,資源ID不是一個數字的時候,則說明這個資源ID被做了映射或轉化

遇到這種情況也不難找出真正的資源ID

步驟如下:

a). 使用 xsearch 等文件內容搜索工具,在反編譯出來的源碼目錄中搜索type="id" name="從界面找到的那個按鈕的資源ID"

    <public type="id" name="bd4" id="0x7f100b3a" />



然後再用 xsearch 搜索 7f100b3a, 得到一個變量名: ceo



然後使用 JEB2 定位到 R$h.smali 類, 經 JEB2 反編譯後的代碼, 這個類名應該變成 R 了

查找 ceo (JAVA 區分大小寫)的交叉引用函數,找到如下的代碼:



雙擊找到的交叉引用函數,定位到這個函數體代碼



將按鈕重命名爲 btnLogin 後,找其 onclic 函數也就是掃一眼LoginUI類代碼的事。。。









如何找到顯示密碼錯誤字符串的函數?

一般的, 在打包 apk 的時候,字符串也被編譯成資源, 也一樣有資源ID

找人方法跟上面差不多, xsearch 全目錄搜索錯誤提示信息,如:帳號或密碼,請重新輸入。。。。

跟找按鈕資源ID過程的惟一的區別是:

type="id" name="=:> type="string" name="字符串ID"




秀一下成功下斷的截圖:








以上,就是在反編譯代碼中,定位到關鍵類和關鍵函數的具體步驟!

記個筆記,免得以後忘了。



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