静态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.运行测试,完美
是不是有人盗了画眉的号?来冒充菜鸟了…{:1_925:} 进来向大佬学习下。 你也玩上安卓了 本帖最后由 赤座灯里 于 2020-4-24 16:06 编辑
地址应该是C3A0+2C=C3CC吧,ARM是三级流水线结构,PC总是指向正在取指的指令,ARM就是当前执行的指令+8,thumb就是+4 感谢楼主,受教了! @凉游浅笔深画眉
亲,IDA的改名函数名(N键),这个能不能修改成为“中文呢” {:1_901:}看不懂,就想白嫖下大佬的截图工具,好流弊。 好好厉害啊{:1_899:} 画眉老师NB!!!