Android动态调试--2

  • 继续动态调试吧~~这次看看网上的资源

在之前的文章中学习到了通过Log打印信息,和栈跟踪法来获取正确的注册信息。

这次来看看进阶的IDA调试SO库来动态破解

需要知道的两个小快捷键

1、shift+F12,速度打开so中所有字符串的窗口

2、Ctrl+S,有两个作用,在打开正常的so文件的IDA View 窗口时,可以查看 so对应的Segement信息

解释一下,这个快捷键可以看出一个段开始和结束的位置。

并且还能够查看到so文件映射到内存的地址

3、G快捷键:在IDA调试页面的时候,我们可以使用S键快速跳转到指定的内存位置


复习前方知识一波~

ARM中的寄存器

R0-R3:用于函数参数及返回值的传递

R4-R6, R8, R10-R11:没有特殊规定,就是普通的通用寄存器

R7:栈帧指针(Frame Pointer).指向前一个保存的栈帧(stack frame)和链接寄存器(link register, lr)在栈上的地址。

R9:操作系统保留

R12:又叫IP(intra-procedure scratch )

R13:又叫SP(stack pointer),是栈顶指针

R14:又叫LR(link register),存放函数的返回地址。

R15:又叫PC(program counter),指向当前指令地址。


下面就正式进入破解~

我们知道一般so中的函数方法名都是:Java类名方法名

那么这里我们直接搜:Java关键字即可,或者使用jd-gui工具找到指定的native方法

这里必须要说一下类似于EIP的寄存器,在ARM汇编里,它是PC

以及储存返回地址的寄存器 lr

pc:程序寄存器,保留下一条CPU即将执行的指令

lr: 连接返回寄存器,保留函数返回后,下一条应执行的指令

一般我们认为,在函数开头有lr寄存器的踪迹,在函数结尾有pc的踪迹。

分析完毕,开始使用IDA进行调试


调试配置

1、在IDA安装目录下获取android_server命令文件,把android_server保存到设备的/data目录下

2、上面就准备好了android_server,运行成功,下面就来用IDA进行尝试连接,获取信息,进行进程附加注入

3、找到函数地址,下断点,开始调试

一般我们认为,需要找到so的基地址,通过Ctrl+S来查找


很简略的写完了这篇博文~感谢这位博主大大的技术支持

http://blog.csdn.net/zhangmiaoping23/article/details/51834316

文章目录
  1. 1. 继续动态调试吧~~这次看看网上的资源