1、最近一直在搞工控設備方面的漏洞挖掘,其中遇到一個應用程序進行滲透時遇到請求參數被加密或者簽名的情況, 在請求數據被修改後提示異常, 導致無法有效地進行漏洞挖掘,因此把最近關於脫殼的方法做個記錄,逆向反編譯應用進行查看
2、通過查殼和上面分析是360加固,經過加固後的apk,通過常規方法反編譯無法獲取到源碼
3、配置環境並啓動frida服務
4、端口轉發
5、相關命令
--version show program's version number and exit
-h, --help show this help message and exit
-D ID, --device=ID connect to device with the given ID
-U, --usb connect to USB device
-R, --remote connect to remote frida-server
-H HOST, --host=HOST connect to remote frida-server on HOST
-f FILE, --file=FILE spawn FILE
-n NAME, --attach-name=NAME attach to NAME
-p PID, --attach-pid=PID attach to PID
--debug enable the Node.js compatible script debugger
--disable-jit disable JIT
-I MODULE, --include-module=MODULE include MODULE
-X MODULE, --exclude-module=MODULE exclude MODULE
-i FUNCTION, --include=FUNCTION include FUNCTION
-x FUNCTION, --exclude=FUNCTION exclude FUNCTION
-a MODULE!OFFSET, --add=MODULE!OFFSET add MODULE!OFFSET
-T, --include-imports include program's imports
-t MODULE, --include-module-imports=MODULE include MODULE imports
-m OBJC_METHOD, --include-objc-method=OBJC_METHOD include OBJC_METHOD
6、腳本編寫並把libart.so 拿出來.然後IDA逆向OpenMemory的對應簽名函數名.
Interceptor.attach(Module.findExportByName("libart.so", "_ZN3art7DexFile10OpenMemoryEPKhjRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEjPNS_6MemMapEPKNS_10OatDexFileEPS9_"), {
onEnter: function (args) {
//dex起始位置
var begin = args[1]
//打印magic
console.log("magic : " + Memory.readUtf8String(begin))
//dex fileSize 地址
var address = parseInt(begin,16) + 0x20
//dex 大小
var dex_size = Memory.readInt(ptr(address))
console.log("dex_size :" + dex_size)
var packageName = "com.********"
var file = new File("/data/data/"+packageName+"/" + dex_size + ".dex", "wb")
file.write(Memory.readByteArray(begin, dex_size))
file.flush()
file.close()
},
onLeave: function (retval) {
if (retval.toInt32() > 0) {
/* do something */
}
}
});
7、上面利用腳本配置好後進行脫殼如下
8、可以看到下面是我們脫殼的dex文件