實戰脫殼360加固

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文件

 

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