////IDC dump dex//// auto fp, dex_addr, end_addr; fp = fopen("F:\\dump.dex", "wb"); end_addr = r0 + r1; for ( dex_addr = r0; dex_addr < end_addr; dex_addr ++ ) fputc(Byte(dex_addr), fp);
通常在dvmDexFileOpenPartial()這個函數下斷點,R0寄存器指向的地址就是dex文件在內存中的地址,R1寄存器就是dex文件的大小。如果經過了加固,那么內存中可能沒有完整的dex,或者如360加固不再走dvmDexFileOpenPartial而是自己實現此函數功能,那么在此處下斷點也無法拿到完整的dex。可以考慮使用dexHunter的類抽取法,或者hook mmap等。