安卓逆向13.静态Patch IDA Pro v7.2 android_server 默认调试端口 23946

前言:

adb shell下可以使用-p命令修改android_server的默认调试端口,但每次都要加个-p感觉很麻烦,于是有此一文。通过静态Patch的方法,就不用每次启动android_server都要加个-p命令来修改调试端口了!

 附件下载:

链接:https://pan.baidu.com/s/1TE0Ww-0GZtPd33M7BlnsoQ
提取码:updm

1.默认的Ida android_server调试端口是23946,顺便看到了提示信息"Listening on xxxxxx",我们通过这句话来定位关键代码。

2.用IDA加载android_server,并【shift+F12】打开字符串窗口,搜"Listening xxxxx"

3.快捷键【X】查看交叉引用,发现三处,挨着看看。

4.发现都是在函数Sub_5561C内进行的引用

5.F5伪代码查看,发现端口号来源于变量v1+4

6.继续查看变量v1来源于哪里,发现变量v1来源于参数a1,看来参数a1就是关键了,参数a1+4的位置就是端口号。

7.为了寻找参数a1的来源,只能到上层函数去找。快捷键【X】查看交叉引用,发现是main函数调用传参的。

8.转到main函数查看伪代码,调用位置如下

9.dword_9942C这个全局变量结构体就是关键,理论上鼠标双击点过去就能看到端口号了。
当我们转过去后发现实际情况并不是这样。.并没有看到端口号,线索也就断了!仔细看前面地址发现位于so文件的bss节里。
这个节的数据是需要在程序运行起来之后才初始化的!

10.在bss节 0009942C开始分析此结构体,很容易能得到2字节的word_99430就是端口号

11.【X】之后来到函数Sub_C364,已经可以找到端口号了0x5D8A就是23946,只要改掉这个值就patch成功了。

12.然而在修改这个值的时候是很麻烦的"LDR  R3, =0x5D8A"是IDA帮我们生成的伪代码,这是一条PC寄存器寻址指令,可以看到前面的十六进制硬编码为0B 4B,根本就没有0x5DA8这个值,所以不能在这里修改。

13.对0B 48进行反汇编后得到实际指令为"LDR  R3, [PC, #0x2C]" ,所以我们可以计算出0xC3CC才是需要修改的值

14.将8A 5D修改成0A 1A并保存

15.运行测试,完美

原文地址:https://www.cnblogs.com/fuhua/p/12767275.html