在之前的文章中学习到了通过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