zoukankan      html  css  js  c++  java
  • 【移动安全基础篇】——29、Android源码定制添加反反调试机制

    1. Kernel proc
    内核修改
    检测都是通过 proc 进行的,因此我们需要从 proc 入手
    要修改的数据:
    /fs/proc/base.c、/fs/proc/array.c
    要修改对以下文件的写入:
    status, stat
    修改点:

    base line:285
    else{
        if(strstr(svmname, “trace”)){
            return sprint(buffer, “%s”, “sys_epoll_wait”);
        }
        return sprint(buffer, “%s”, symname);
    }
    array line: 134
    static const char * const task_state_array[] = {
        “R (running)”, /* 0*/
        “S (sleeping)”, /* 1*/
        “D (disk sleep)”,  /* 2*/
        “S (sleeping)”, /* 4*/
        “S (sleeping)”, /* 8*/
        “Z (zombie)”, /* 16*/
        “X (dead)”,  /* 32*/
        “x (dead)”,  /* 64*/
    array line 187
    “Gid:	%d	%d	%d	%d
    ”,
        get_task_state(p),
        task_tgid_nr_ns(p, ns),
        pid_nr_ns(pid, ns),
        ppid, /*tpid*/0,
        cred->uid, cred->euid, cred->suid, cred->fsuid
        cred->gid, cred->egid, cred->sgid, cred->fsgid);

    修改完成后,编译内核,刷入系统
    2. Demo 

    导入内核源代码

    定位到/fs/proc/base.c 文件中找到 status 相关的方法

    status 文件中的信息如下图

    task_name 方法

    task_state 方法

    想把status数据中的状态信息进行修改的话就要修改task_status_array内容( 修改点一),这样便绕过了 State

    对 TracePid 进行绕过:TracePid 通常都是对父进程 pid 进行检测,这里将 ppid 改为 0,这样不管是否为调试状态,TracePid 都无法检测出

    定位到 Stat 相关方法

    Stat 文件中存放着用户属性的简短描述符

    跳转到 do_task_start 方法

    定位到写数据的相关代码

    找到 state 的位置

    跳转到 state 被赋值的地方

    get_task_state 方法

    修改相应的 state 数据就会绕过检测

    对 wchan 文件的修改

    whan 文件如果是在调试过程中会变成 Trace 数据

    结果验证

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    程序数据校验
    修改文件名后,pip命令报错:Fatal error in launcher: Unable to create process using
    算法竞赛平台
    连续子数组的元素之和最大值
    【数学计算】圆周率
    使用DOS命令关闭tomcat端口(其他服务也是可以的)
    微软project文件mpp解析
    关于读取上传文件问题的两个解决办法
    关于office在卸载了某一应用之后无法试图使用的功能所在的网络位置
    关于eclipse的一些问题
  • 原文地址:https://www.cnblogs.com/devi1/p/13486417.html
Copyright © 2011-2022 走看看