• 浅谈android反调试之 转发端口


    反调试方案:

    我们最通常使用的动态工具是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
     
  • 相关阅读:
    ztree学习---将默认勾选的展开
    CentOS之RPM
    CentOS之文档的压缩与打包
    CentOS之Vim
    CentOS用户和用户组管理
    Linux CentOS更改文件的权限
    CentOS的文件属性:命令 ls -l
    CentOS命令
    Java解析excel
    easyUI的combotree的树的懒加载。
  • 原文地址:https://www.cnblogs.com/jiaoxiake/p/6801093.html
Copyright © 2020-2023  润新知