首页 > 移动平台 > 详细

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

时间:2020-04-24 15:36:28      阅读:164      评论:0      收藏:0      [点我收藏+]

前言:

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]" ,所以我们可以计算出0xC3CA才是需要修改的值

技术分享图片

 

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

技术分享图片

 

 

15.运行测试,完美

技术分享图片

 

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!