[原創]基於frida的脫殼工具
阿新 • • 發佈:2019-02-04
frida-unpack
基於Frida的脫殼工具
0x0 frida環境搭建
frida環境搭建,參考frida官網:frida。
0x2 原理說明
利用frida hook libart.so中的OpenMemory方法,拿到記憶體中dex的地址,計算出dex檔案的大小,從記憶體中將dex匯出。
ps:檢視OpenMemory的匯出名稱,可以將手機中的libart.so通過adb pull命令匯出到電腦,然後利用:nm libart.so |grep OpenMemory
命令來檢視到出名。
0x3 指令碼用法
- 在手機上啟動frida server端
- 執行脫殼指令碼
1
.
/
inject.sh 要脫殼的應用的包名 OpenMemory.js
- 脫殼後的dex儲存在
/data/data/應用包名/
目錄下
0x4 指令碼測試環境
此指令碼在以下環境測試通過
- android os: 7.1.2 32bit (64位可能要改OpenMemory的簽名)
- legu: libshella-2.8.so
- 360: libjiagu.so
0x5 參考連結
0x06 python指令碼支援
python frida_unpack.py 應用包名
0x07 相關技巧
-
利用
c++filt
命令還原C++ name managling之後的函式名1
2
3
4
c
+
+
filt _ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_
輸出:
art::DexFile::OpenMemory(unsigned char const
*
, unsigned
int
, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned
int
, art::MemMap
*
, art::OatDexFile const
*
, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >
*
)
原始碼見github連結:https://github.com/dstmath/frida-unpack