1. 程式人生 > >android某加固脫殼(一)

android某加固脫殼(一)

先來一張圖對比下:加固前和脫殼後dex檔案比對:
這裡寫圖片描述
對比結果發現:將原有的dex檔案頭抹除,保留其它區段。將一個新的將“殼”的dex檔案放到抹除檔案頭部分,在修復dex檔案校檢相關引數。(沒仔細研究這個殼給出的步驟直接從Ida中拿到修復後的檔案。)

  1. 首先檢視:lib/armeabi/或x86資料夾下多了一個so檔案libshella-0.0.0.so或libshellx-0.0.0.so:拖入Ida進行分析。發現so檔案竟然沒被處理過。。。
    這裡寫圖片描述

  2. 具體分析思路略去,shift+F12檢視字元,ctrl+f搜尋字串“classes.dex”(可下斷點的地方有很多,這裡選擇classes.dex的地方)。
    這裡寫圖片描述

  3. 附加到程序上去:首先debug模式開啟程序:adb shell am start -D -n 包名/入口
    然後執行以下命令:
    adb shell su -c /data/local/tmp/android_server
    adb forward tcp:23946 tcp:23946
    轉發
    adb forward tcp:8899 jdwp:5205
    第五:在執行此命令之前Ida要已經附加程序上去:
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8899
  4. 中間可能會有幾次異常直接pass掉就行:我們來到了斷點出 檢視R0暫存器:
    這裡寫圖片描述

  5. 此時F5 可以看到如下:圖中sub_5F4EB0B0((int)&v46, (int)&s, 0x70u, 32);函式即為解密函式:有興趣的可以跟進去看看。這裡跳過此步驟。
    這裡寫圖片描述

  6. 解密步驟完成可以即可dump(下面演示一個地方:)
    這裡寫圖片描述