码迷,mamicode.com
首页 > 移动开发 > 详细

浅谈android反调试之 转发端口

时间:2017-05-03 13:25:37      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:nbsp   十进制   双击   修改   sock   arm   接下来   偏移地址   版本   

反调试方案:

我们最通常使用的动态工具是IDA, IDA的动态调试端口默认为23946,我们可以通过/pro/net/tcp 查看android 系统所有TCP Socket
技术分享
启动android_server之后,/proc/net/tcp ,端口号是0x5D8A,十进制为23946

技术分享

我们可以利用默认的调试端口23946 来实现反调试。实现代码如下, 实现原理: Android操作系统不允许一个IP可能同时存在多个相同的端口的套接字
技术分享
 
技术分享
 

解决方案:

最常见的解决的解决方案, 我们不使用默认转发端口23946。 android_server 提供命令指定转发端口
命令: ./android_server -p12345 ,注意端口号和参数之间没有空格
技术分享
端口号变为0x3039,即12345
技术分享
虽然这种做法很简单,但是对于一个崇尚简约的程序员而言,每次都要都要指定端口,烦不烦。我们能不能和之前的通过逆向android_server, 通过修改android_server的默认端口来永久改变端口号。不同IDA版本的android_server 使用指令集不太一样,比如IDA6.6 使用是ARM指令集, IDA6.8 使用的是Thumb指令集。不过修改方案是一致的, 笔者以使用Thumb指令集的IDA6.8的android_server.
1. IDA打开android_server, 找到main函数,如下:
技术分享
对应的二进制指令代码

技术分享

2.这里需要知道一点关于ARM指令的知识,这里的LDR R5, =5D8A, 一条伪指令, =5D8A指的指令和变量(存储值为5D8A)的相对偏移地址,这句为什么同一条ARM汇编对应16进制不一样了,因为指令地址不一样,导致偏移地址不一样。 按照惯例,这个存储5D8A的地址就在所在函数结束的后面.如下:

技术分享

右侧有个DATA_XREF可知,这里有两处被应用,即两个伪指令LDR, R5, =0x5D8A的地址, 双击可以验证。
 
3.接下来我们用二进制编辑工具010 Editor 编辑文件偏移B8D8
技术分享
将这个值改成我们指定端口号:12345(0x3039),保存,测试
技术分享
 
3. 测试OK
 
技术分享

 

浅谈android反调试之 转发端口

标签:nbsp   十进制   双击   修改   sock   arm   接下来   偏移地址   版本   

原文地址:http://www.cnblogs.com/jiaoxiake/p/6801093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!