IDA附加调试apk程序,并修改内存,编写IDA脚本程序,把修改后的dex文件dump到本地

我的测试环境:模拟器 Android 4.2 armeavi-v7a

1.IDA附加调试apk程序

找到IDA所在目录,在dbgsrv文件夹下找到程序android_server

在这里按住“Shift +鼠标右键”,打开控制台


把程序android_server     push到安卓设备/data/local/tmp/目录下、提权并运行


转发端口

在打开一个控制台


 

注意:在这里我们要先在设备中运行之前安装的apk。

扫描二维码关注公众号,回复: 4386723 查看本文章

之后打开IDA程序


到这里就附加成功了,我们下一步就可以修改程序的内存了。

2.修改程序内存


这个程序是一个算加法的程序,正常结果是13,我们修改内存中方法的二进制代码,将其改为减法。


再打开一个IDA,找到方法的代码相对于dex文件的偏移。

将apk文件解压,把解压出的dex文件在IDA中打开,找到这个方法的偏移大小

因为这个测试程序是自己写的,所以我知道方法就在MainActivity这个类中,为了快速找到,我们“Ctrl +F "直接搜索


我们看到相对于dex文件头的偏移大小是0x13F808

然后我们在附加进程的IDA中找到内存中dex头的地址大小

在附加进程的IDA界面按快捷键“Ctrl + S”,选择dex文件


在Hex View-1视图中点击鼠标右键,完成如下操作


找到dex头在内存中的地址 0x4BD6B028

到这了我们就可以算出方法在内存中的位置

dex头在内存中的地址 0x4BD6B028  + 相对于dex文件头的偏移大小是0x13F808 = 内存中方法的地址是 4BEAA830

我们在附加进程的IDA中找到这个地址位置

快捷键“G”,输入地址0x4BEAA830

我们将90 改为 91,便将方法中的加法改为减法了

鼠标点击90,按快捷键“F2”,将其修改为91,之后在按F2 保存

之后点击运行程序

结果为1,我们已经将加法变为减法了


3.接下来我们将内存中的dex文件通过运行IDA脚本程序dump到本地

前面我们已经知道了dex头在内存中的地址 0x4BD6B028

接着来要知道dex文件的大小

了解文件结构的话,就知道0x261A94就是dex文件的大小

不知道,那也没关系,我们使用工具010 Editor运行dex模板查看,结果相同

接着我们编写IDAdump脚本,并运行。

打开脚本窗口- File–ScriptCommand 或直接用快捷键“Shift +F2”

static main(void){
    auto fp, begin, end, dexbyte;
    //打开或创建一个文件
    fp = fopen("d:\\dump.dex", "wb");
    //dex基址
    begin =  0x4BD6B028;    
//dex基址 + dex文件大小
end = begin + 0x261a94;
    for ( dexbyte = begin; dexbyte < end;     dexbyte ++ ){
//按字节将其dump到本地文件中
fputc(Byte(dexbyte), fp);
}
}
 

我们发现dump下来的dex文件,与我们本身的dex文件是不同的

用工具Beyond Compare,选择16进制比较

找到不同的地方后用010 Editor工具查看具体情况。

后续更近。。。
 

猜你喜欢

转载自blog.csdn.net/weixin_41508948/article/details/84547390