凉游浅笔深画眉 发表于 2020-4-24 15:11

静态Patch IDA Pro v7.2 android_server 默认调试端口 23946

本帖最后由 凉游浅笔深画眉 于 2020-4-24 16:32 编辑


这是本菜鸟学习逆向的第二天,入门级水平,大佬勿喷。如果文中有写错的地方,请大佬纠正。

前言:

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

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




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




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




15.运行测试,完美




无闻无问 发表于 2020-4-24 16:10

是不是有人盗了画眉的号?来冒充菜鸟了…{:1_925:}

bachelor66 发表于 2020-4-24 16:28

进来向大佬学习下。                                 

浙江-杺庝 发表于 2020-4-24 15:14

你也玩上安卓了

赤座灯里 发表于 2020-4-24 15:40

本帖最后由 赤座灯里 于 2020-4-24 16:06 编辑

地址应该是C3A0+2C=C3CC吧,ARM是三级流水线结构,PC总是指向正在取指的指令,ARM就是当前执行的指令+8,thumb就是+4

dsanke 发表于 2020-4-24 15:54

感谢楼主,受教了!

冥界3大法王 发表于 2020-4-24 16:08

@凉游浅笔深画眉
亲,IDA的改名函数名(N键),这个能不能修改成为“中文呢”

pwp 发表于 2020-4-24 16:10

{:1_901:}看不懂,就想白嫖下大佬的截图工具,好流弊。

yuxinfei 发表于 2020-4-24 16:14

好好厉害啊{:1_899:}

Only1Studio 发表于 2020-4-24 16:26

画眉老师NB!!!
页: [1] 2 3 4
查看完整版本: 静态Patch IDA Pro v7.2 android_server 默认调试端口 23946