1. 程式人生 > 實用技巧 >安卓逆向分析之ida動態除錯

安卓逆向分析之ida動態除錯

一。分析app包

  1. 可以使用 apktool 進行拆包,這裡不進行打包簽名,直接解壓,看到有如下等資訊。

  2. 進入 assets 檢視,發現全部是 lua 檔案。

  3. 開啟 lua 檔案發現已經加密了, 且全部檔案都是以 DADDY 開頭,可以推測這是 cocos 載入 lua 檔案。

  4. 開啟 lib 裡的庫檔案發現了載入 lua 檔案的 .so 二進位制檔案, 可以知道加密解密 lua 檔案就在這裡面處理的了。

  5. 檢視 lib 裡只有 arm 架構,所以不能用模擬器除錯,需要用真機除錯。

二。配置真機除錯

  1. 一臺 root 的安卓手機,設定裡開啟 開發者選項,勾選USB除錯。

  2. 在 ida 安裝目錄找到對應的android_server ,32 位 arm 就是android_server

  3. 把android_server 拷貝到 安卓手機裡面

  4. 以 root 許可權進入安卓手機

  5. 賦予android_server 全部許可權

  6. 啟動android_server

  7. 下載mprop ,目的是設定所有 app 可除錯

連結:https://pan.baidu.com/s/1bTF2R9S-y0X1qStwZjCohw  密碼:7agb

  8. 把對應的 mprop 放到安卓手機裡,並以 root 許可權進入該目錄

  9. 賦予許可權,執行,並設定可除錯

  10. 檢視是否可除錯成功

  11. 轉發本機埠到 安卓android_server監聽的埠

  12. 完成真機環境

三。ida 動態除錯

  1. 啟動要除錯的 app

  2. 開啟 ida,選擇 GO

  3. 點選下圖 attach 除錯

  4.填寫地址和埠,點選確定,因為本地已經轉發了埠,所以填 127.0.0.1 ,如果沒有轉發埠,輸入安卓手機的IP

  5. 找到要除錯的 程序ID 或者 包名,可以點下方的搜尋直接搜, 程序ID和包名可以在安卓裡面 ps 看到

  6. 確定之後可以看到該程式的彙編程式碼,且程式被暫停了

  7. 在想要的地方打上斷點,點選左上角的執行,然後就可以操作安卓裡的app了,會在執行到斷點的地方暫停程式,然後就可以分析了

四。ida 常用功能

  1. 列出程式所載入的所有靜態庫,即 .so 二程序檔案

  2. 在所有靜態庫中找出要除錯的, 這裡我們找載入 lua 檔案的 so 庫,ctrl + f 可以搜尋

  3. 雙擊進去即可找到該庫的所有方法了,ctrl + f 可以搜尋

  4. 雙擊要找的方法,進入該方法的彙編,按 F5 可以得到該彙編的虛擬碼

  5. 可以直接在虛擬碼中打斷點除錯

  6. 滑鼠懸浮在變數上可檢視到變數儲存在哪個暫存器裡和變數的虛擬地址,右邊也可以檢視暫存器儲存的虛擬記憶體地址

  7. 雙擊變數可以跳到變數儲存的值

  8. 右擊十六進位制檢視同步ida檢視,即可同步到一起

可以在十六進位制視圖裡看到詳細的資訊

  9. 右點選十六進位制檢視可以編輯記憶體裡的值

編輯完右點選更新值

  10. 地址儲存的是0即為變數的結束地址

十六進位制裡的 00 值

  11. 把記憶體裡的值匯出來

點選run,就可以以匯出開始地址到結束地址的內容

  12. 找到*(_DWORD *) 裡的值,也就是指標的值

比如這個 a2,開始地址為DC7002D4

雙擊可以檢視到地址裡的內容,區域性變數儲存在 棧 中,儲存的地址為 ad65d2d4

右點選跳轉地址

輸入地址即可跳轉

跳轉後十六進位制檢視可以檢視到值

五。參考

https://www.jianshu.com/p/4307cdb4b147