IDA远程调试 在内存中dump Dex文件

本文介绍了一种通过调试JNI_OnLoad函数并利用IDA工具挂载APK的方法,来定位并dump内存中的DEX文件,从而实现脱壳的过程。文章还提到了这种方法的局限性,即对于动态修改DEX结构体的高级壳可能无法完全脱壳。
摘要由CSDN通过智能技术生成

1. 首先使用调试JNI_OnLoad函数的方法,先将apk以调试状态挂起,使用IDA附加上去。

2. 然后在libdvm.so中的dvmDexFileOpenPartial函数上下一个断点

3. 然后我们点击继续运行,程序就会在dvmDexFileOpenPartial()这个函数处暂停,R0寄存器指向的地址就是dex文件在内存中的地址,R1寄存器就是dex文件的大小

4. 然后我们就可以使用ida的script command去dump内存中的dex文件了。

static  main( void )
{
   auto fp, begin, end, dexbyte;
   fp =  fopen ( "C:\\dump.dex" "wb" );
   begin = r0;
   end = r0 + r1;
   for  ( dexbyte = begin; dexbyte < end; dexbyte ++ )
       fputc (Byte(dexbyte), fp);
}

 Dump完dex文件后,我们就可以用工具来查看了。

 当然这只是最简单脱壳方法,很多高级壳会动态修改dex的结构体,比如将codeoffset指向内存中的其他地址,这样的话你dump出来的dex文件其实是不完整的,因为代码段保存在了内存中的其他位置。

转载于:https://www.cnblogs.com/shaoge/p/5425229.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值