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

来源:互联网 发布:淘宝滔搏运动城 真的吗 编辑:程序博客网 时间:2024/05/14 10:11

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

 

1.IDA附加调试apk程序


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

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


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


转发端口

在打开一个控制台

 

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

 

之后打开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脚本,并运行。

打开脚本窗口- FileScriptCommand 或直接用快捷键“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工具查看具体情况。

后续更近。。。





0 1
原创粉丝点击