1. 程式人生 > 實用技巧 >"AliCrackMe"過反除錯

"AliCrackMe"過反除錯

1.把apk拖進模擬器

獲取一個金鑰 2.使用jadx-gui開啟apk 主介面是我們的Launcher 我們開啟AndroidMenifest.xml檔案 找到主介面 3.簡單分析一下Java程式碼 4.該方法實現在so層 我們來分析一下SO

5.使用IDA工具開啟libcrackme.so

有動態註冊 和 靜態註冊

6.我們先看靜態註冊吧 點進去F5一下

我們把方法引數 幫他改一下 這樣程式碼看起來更完整(第三個引數 根據我們的密碼它是字串型別 然後新增為字串型別)

首先看到它的最後 要麼返回1 要麼返回 0 再根據Java層定義的那個native方法為bool型別 估計大概金鑰就在這塊了

7.我們來仔細分析一下這個邏輯

這邊V4通過GetStringUTFChars函式 傳給v5 v6=off_628C off_628C我們點進去 發現一個字串 aWojiushidaan 以為幸福來得這麼突然 一下子就找到了 將金鑰輸進去 發現不對 8.我們來動態除錯一下 除錯步驟在這塊就不細講了
1~建立模擬器(有真機可以忽略這個) 要記得開啟ddms(要不然後面會報錯)
2~在IDA裡面找到android_server(dbgsrv目錄)
3~把android_server檔案放到手機/data/local/tmp
    adb push 檔名 /data/local/tmp/as
4~開啟一個cmd視窗:執行android_server 1)adb shell 連線手機 2)給一個最高許可權:su 3)來到/data/local/tmp:cd /data/local/tmp 4)給androi_server一個最高的許可權:chomd 777 android_server 5)檢視android_server是否擁有許可權:ls -l 6)執行andorid_server: ./android_server(埠號預設是:23946) 補充:執行andorid_server並且修改埠號:./android_server -p埠號
5~埠轉發: adb forward tcp:埠號 tcp:埠號(之前轉發的埠號是什麼,這裡就是什麼) adb forward tcp:23946 tcp:23946 6~開啟DDMS:觀察程式的埠號 7~掛起程式: adb shell am start -D -n 包名/類名 例子:adb shell am start -D -n com.example.javandk1/.MainActivity adb shell am start -D -n com.yaotong.crackme/.MainActivity 補充:此時觀察DDMS,被除錯的程式前面有一個紅色的蟲子; 8~IDA裡面勾選三項 1)開啟ida,選擇debugger -第二項-Remote ARMlinux(第四項) 2)新增hostname和portt: hostname:主機號(預設127.0.0.1) port:埠號(之前android_server執行時的埠號或者埠轉發的埠號) 3)出來程序列表:選擇要除錯的程式(可以ctrl+f,搜尋包名) 4)進來後,勾選三項: Suspend on process entry point程式入口點 斷下 Suspend on thread start/exit執行緒的退出或啟動 斷下 Suspend on library load/unload庫的載入和解除安裝 斷下 補充:可以直接在這裡F9(左上角有一個三角形)執行程式,然後放手; 也可以,直接執行第九步,然後IDA執行程式 9~掛載、釋放(放手) jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=埠號 補充:此時觀察DDMS,被除錯的程式前面有一個綠色的蟲子;

我們到剛剛分析的Java靜態方法那塊下個斷點

按F9

9.程式崩掉了 應該是有反除錯了 我們來靜態分析看看Java_com_yaotong_crackme_MainActivity_securityCheck這個函式 沒找到什麼異常 再根據 我們是剛進入到該函式 就觸發了反除錯 估計在動態註冊裡面 10.動態註冊分析 就是一些資料操作 這些程式碼當中 sub_17F4比較扎眼 點進去看一下 大概反除錯的點十有八九在著塊了

11.再來動態調一下這個動態方法

12.我們根據之前分析的虛擬碼 和動態除錯的虛擬碼進行分析比較 會找到程式大概的彙編程式碼位置 方便我們下斷點 13.開始除錯 我們按F7一路跟 會跟到F7 F7會進入到一個執行緒 再往下走就會崩(以測 就不寫出來了) 我們需要做的事就是把它nop掉 14.nop掉之後 我們發現我們的app也是處於執行狀態(動態除錯用的是真機)

15.我們現在開始除錯Java_com_yaotong_crackme_MainActivity_securityCheck這個函式 在函式開始處下一個斷點 用手機隨便輸一串密碼 觸發程式

成功斷下

16.我們在剛剛靜態分析的邏輯那塊打上斷點 然後不斷同步hex View窗口裡面的資料 17.拿到正確的金鑰