zoukankan      html  css  js  c++  java
  • 【移动安全基础篇】——27、常用调试检测方法与过检测方法

    1.  调试检测
    在调试加壳软件的时候,总是会突然出现调试中断,或者是程序的异常退出,但是一旦不处于调试的时候又能够正常启动,这些都是因为调试被 app 检测到的原因。
    2.  基本的调试监控
    常用的监控手段:
    1)  检测用户组 cmdline 中是否存在调试进程(gdb、gdbserver、android_server、xposed 等)修改调试器的名称
    2)  检测线程状态,查看是否存在被调试的线程修改读取文件中特征值
    3)  检测进程状态,查看是否存在调试的进程修改读取文件中特征值
    4)  检测传输端口,如 23946(ida 调试的默认端口)等端口是否被调试进程启用了

    可以通过修改调试端口绕过

    3. Demo  演示
    使用 jeb 打开目标 apk 文件,找到该 app 中进行调试监控的函数

    因为 findTrace()函数是 native 层函数,所以需要分析它的 so 文件,使用 ida 打开该 so 文件,没有搜索到 findTrace()函数,证明它为动态加载的。

    在 jni native 结构体中找到 findTrace()函数的地址和名称描述

    找到 findTrace()函数的地址,跳转过去之后找到 findTrace()函数

    然后使用 ida 进行动态挂接

    开始动态调试,程序在 findTrace()处断下

    调试器已经被检测到

    调试器判断的代码数 (函数 1 )

    根据代码可以得出绕过的方法:改 修改 android_server 

    此外,调试检测还会检测 stat  文件中的内容数 (函数 2 )

    调试(t)与非调试(s)状态下 stat 文件内容的变化

    绕过方法:

    调试判断还会读取 status  文件内容检测其中的 TracePid  的值(函数 3

    绕过方法:将 将 TracePid  的值改为 0

    直接读取 status  文件中 TracePid  的值(函数 4

    绕过方法:改 修改 fget  中获取数据的地方将 TracePid  数值改为 0

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    Java中的Date类型无法赋值给数据库的datetime类型
    在HTML中改变input标签中的内容
    sizeof计算类的大小
    UML类图,转载
    大端小段详解—转载
    leetcode练习
    linux基础
    排序算法和查找算法

    链表
  • 原文地址:https://www.cnblogs.com/devi1/p/13486419.html
Copyright © 2011-2022 走看看