android+反调试+方案,浅谈android反调试之 转发端口(示例代码)

反调试方案:

我们最通常使用的动态工具是IDA, IDA的动态调试端口默认为23946,我们可以通过/pro/net/tcp 查看android 系统所有TCP Socket

aaecc5d5543ed17fe0e501b4929ff9ea.png

启动android_server之后,/proc/net/tcp ,端口号是0x5D8A,十进制为23946

072fa00651809d15ce3220d63fc4abfb.png

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

50a97939cb5f53018ed571ce3a85056b.png

5e07fb65bbbf4d2ff9bbeef90648405a.png

解决方案:

最常见的解决的解决方案, 我们不使用默认转发端口23946。 android_server 提供命令指定转发端口

命令: ./android_server -p12345 ,注意端口号和参数之间没有空格

4b15efd99aacd27376ad0d01689bbd28.png

端口号变为0x3039,即12345

9eb44c851dc90550b98ef7bf7a1e104e.png

虽然这种做法很简单,但是对于一个崇尚简约的程序员而言,每次都要都要指定端口,烦不烦。我们能不能和之前的通过逆向android_server, 通过修改android_server的默认端口来永久改变端口号。不同IDA版本的android_server 使用指令集不太一样,比如IDA6.6 使用是ARM指令集, IDA6.8 使用的是Thumb指令集。不过修改方案是一致的, 笔者以使用Thumb指令集的IDA6.8的android_server.

1. IDA打开android_server, 找到main函数,如下:

95f9cefc57eeeef48b2931ad865825fd.png

对应的二进制指令代码

6a576d5475983979353522996398f35a.png

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

05c28a41df55c3ca4558b015fb6c66df.png

右侧有个DATA_XREF可知,这里有两处被应用,即两个伪指令LDR, R5, =0x5D8A的地址, 双击可以验证。

3.接下来我们用二进制编辑工具010 Editor 编辑文件偏移B8D8

1875954a58786c9ff42cce82bb8b2c8c.png

将这个值改成我们指定端口号:12345(0x3039),保存,测试

937bc2f73b73ab3ecbc6548008bed50f.png

3. 测试OK

c9098870d2342bc19387116b96488b43.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值