2019年2月360加固逆向分析

vmp

vmp調用api的時,會跳出vm,所以可以不關注vm邏輯運算,直接追蹤vm調用用了哪些api,從而分析殼,從jni_onload中一步步跟進在_Z10__fun_a_18Pcj中文件偏移0x0000FF00和0x00010060 處是vm函數調用,在此下斷。

軟中斷

由於api有可能會被下斷,所以可以採取軟中斷方式實現系統調用,arm下是svc,等ida解析完成so,搜索這條指令,會發現有open、mprotect還有個syscall。
在這裏插入圖片描述

反調試

tracerid

0x6850 打開/proc/self/status文件,獲取tracerid,修改讀取的內容,在讀到tracerid時修改爲0

時間檢測

0x6C9C 時間差大於3,則退出
在這裏插入圖片描述

rtld_db_dlactivity

0x00024F4 rtld_db_dlactivity這個函數默認情況下爲空函數,這裏的值應該爲0,而當有調試器時,這裏會被改爲斷點指令,所以可以被用來做反調試。在函數sub_24F4中,libjiagu.so查找rtld_db_dlactivity函數的地址的,獲取到rtld_db_dlactivity的地址,將其修改爲nop指令0x46C0。

so動態加載

so從內存中加載,肯定需要mprotect賦予執行權限,之前已經分析過svc實現mprotect,所以在mprotect時找到代碼段,從內存中dump出以下二進制文件如下。


對比正常的elf頭
在這裏插入圖片描述
發現出現很多0x4f,嘗試與0x4f異或,可以直接解出elf頭,用010editor 解析出錯,說明dump的尚不完整,於是在沿着內存dump下去,直至能夠成功解析。

ida打開完整的so,沒有報錯。
在這裏插入圖片描述
jni動態註冊,都在第二個so中,後面的動態加載dex文件基本上沒什麼區別。

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