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

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文件其实是不完整的,因为代码段保存在了内存中的其他位置。

http://www.cnblogs.com/shaoge/p/5425229.html

时间: 2024-12-29 11:45:24

IDA远程调试 在内存中dump Dex文件的相关文章

在内存中dump Dex文件

在现在的移动安全环境中,程序加壳已经成为家常便饭了,如果不会脱壳简直没法在破解界混的节奏.ZJDroid作为一种万能脱壳器是非常好用的,但是当作者公开发布这个项目后就遭到了各种加壳器的针对,比如说抢占ZJDroid的广播接收器让ZJDroid无法接收命令等.我们也会在”安卓动态调试七种武器之多情环 - Customized DVM”这篇文章中介绍另一种架构的万能脱壳器.但工具就是工具,当我们发布的时候可能也会遭到类似ZJDroid那样的针对.所以说手动脱壳这项技能还是需要学习的.在这一节中我们会

IDA远程调试Android

IDA远程调试Android ADB 连接安卓设备.(不会ADB参考:http://www.cnblogs.com/ONDragon/p/6841787.html) 把IDA文件夹中dbgsrv目录下的android_server(作用:和IDA进行通信)文件push到手机的/data/local/tmp目录下,当然这个目录可以自己选. 然后在终端中adb shell登陆到手机的shell环境,获取root权限以后,chmod 655 android_server修改运行权限,然后运行它. 转发

IDA远程调试出现&quot;The file can&#39;t be loaded by the debugger plugin.&quot;云云

看到网上都没有像样的解答,我把我的情况分享出来给大家 先说说我的需求:IDA远程调试linux程序,按照教程配置好后,F9启动出现“The file can't be loaded by the debugger plugin.”,然后网上搜,然后懵逼了. 我的环境配置win7 x64 sp1 IDA PRO6.8 金山泄露版 Linux是CentOS6.x 解决办法是 关闭linux防火墙 service iptables stop IDA远程调试出现"The file can't be lo

net 编译报错:编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件

1,报错提示: 编辑器或项目正在尝试签出在内存中修改的文件,这将导致保存该文件. 在生成过程中保存文件是危险的,这可能会在将来导致不正确的生成输出. 是否仍然继续签出? 2,原因:licenses.licx属性设为了只读. 3,解决: a,搜索''licenses.licx',去掉只读属性; b,LicensesClear.exe放到项目根目录下,双击执行. 递归取消licenses.licx只读属性,源码 原文地址:https://www.cnblogs.com/qqhfeng/p/92947

IDA远程调试so库JNI_Onload函数

JNI_OnLoad函数大概功能就是在程序加载so的时候,会执行JNI_OnLoad函数,做一系列的准备工作.很多时候,程序猿们会将一些重要信息放在此函数中,而不是通过某种事件来重复触发.包括说将反调试函数放置在此函数中.因此,调试手段发生了改变,上述调试方法基本上被淘汰. 1.静态分析,找到JNI_OnLoad函数的偏移 2.执行android_server 3.端口转发 4. 以调试模式启动程序adb shell am start -D -n com.example.mytestcm/.Ma

IDA 远程调试设置

第一步,先去 IDA   dbgsrv  这个目录下,找到要调试的那个远程计算机对应的可用客户端, 比如,android_server, 把它拷贝到目标计算机中, 比如 adb push .... 然后如果是特殊的系统,给它一个执行权限, 比如 adb shell , chmod 777 ... 然后运行它,它会监听一个端口, 23946 , 使用某些方法,让这个端口可以被我们的电脑访问, 比如 adb forward tcp:23946 tcp:23946 然后,就可以打开IDA,连接这个端口

IDA 远程调试 Android so

1.把ida 目录下android_server 传到android 目录中如:adb push  android_server /data/local/tmp/adb shell 进入模拟器cd /data/local/tmp/chmod 755 android_server./android_server看到监听端口 23946 2.在windows 控制台下转发window 到模拟器或者手机的端口adb forward tcp:23946 tcp:23946 3.ida 中选择androi

在主机中通过xdebug远程调试Vagrant虚拟机中drush脚本的方法

改方法是调试drush所执行的php代码的方法,同样适用于普通的cli方式运行的php程序的调试. 1.首先需要调整cli方式的xdebug.ini配置: sudo vi /etc/php5/cli/conf.d/xdebug.ini [XDebug] zend_extension="/usr/lib/php5/modules/xdebug.so" xdebug.coverage_enable=0 xdebug.default_enable=0 xdebug.remote_enable

xdebug远程调试Vagrant虚拟机中web程序的注意点

主要的一点: xdebug.remote_connect_back=0 这里xdebug.remote_connect_back=1将会使xdebug.remote_host的设置无效,从而无法debug.虽然xdebug.remote_connect_back=1,官方说明是自动检测浏览器的IP地址,然后自动连接到相应的客户端,但在vagrant中似乎工作不正确,我猜测可能是client端有多个IP造成的.所以这里还是手工指定比较稳妥.