參考: 網易雲加密: http://apk.aq.163.com 網易雲捕: http://crash.163.com
1、結構體的建立及導入,結構體指針等。 以JniNativeInterface, DexHeader為例。 解析Dex的函數如下:

F5後如下:
File->load file->parser c header file,導入Dex.h 上圖中a1,右鍵轉成結構體,選擇dexheader,效果如下:
2、 函數指針時的參數個數調整,不定參數等。 以__android_log_print為例,選中該函數。
Edit->operand type-> set operand type,修改參數如下: int (__cdecl *)(int, char *, char *, char *, int *, int *),F5重新整理後,效果如下:
3、thumb/arm模式的轉換 快捷鍵ALT +G,其中0x01是THUMB,0x00是ARM模式。一般4個位元組ARM模式,兩個位元組為THUMB模式,如:
4、函數被誤認為chunk,導緻調用者函數多個入口。 以Java_by_Ericky_crackme01_JNI_EatRice為例,可以看到有兩個入口。
來到第一個入口的結束位置為BX跳轉指令, 應該讓他跳轉到第二個入口出,才正确。
所有首先要remove function tail, 選中,結尾處,然後edit->functions-> remove function tail,效果:
然後再将跳轉指令BL,修改為Call,edit->others-> force bl call,效果
5、C++RTTI,類名識别。 來的 JNI_OnLoad處
sub_A558為構造函數。
可以得在該函數名為9ArtLoader,
6、建立函數,設定函數結尾位址。 F5,效果如下:
解決辦法,按P,再F5。如果P沒有效果,則可以選中後再按P。 7、Elf的修複,記憶體dump該so及其以來檔案,然後修改dump出來的基址, File-->LoadFile-->binary file 。 dump指令為: dd if=/proc/1935/mem of=/sdcard/alimsc4 skip=1578049536 ibs=1 count=3993600 8、資料複制、patch。 選中資料,然後edit->export data,即可
9、腳本,idc,IDAPython http://magiclantern.wikia.com/wiki/IDAPython/intro http://drops.wooyun.org/tips/11849 http://drops.wooyun.org/tips/12060
10、 lsof檢視被删除的檔案,cat從記憶體中得到被删除的檔案 [email protected]:/ # lsof |busybox grep com.sxiaoao.car3d3 system_se 523 system 298 /data/app/com.sxiaoao.car3d3-2.apk com.sxiao 10370 u0_a65 44 /data/data/com.sxiaoao.car3d3/files/app_sdk103700_.jar (deleted) com.sxiao 10370 u0_a65 48 /data/app/com.sxiaoao.car3d3-2.apk com.sxiao 10370 u0_a65 49 /data/app/com.sxiaoao.car3d3-2.apk
10370是程序号 44是打開檔案的fd 檔案fd映射在/prop/pid/fd裡面 用cat指令把檔案拷貝出來 1|[email protected]:/ # cat /proc/10370/fd/44 > /data/local/tmp/test.jar
11、arm指令模拟器
12、 為什麼不能F5, 不能全信F5