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 数据

    结果验证

    总会有不期而遇的温暖. 和生生不息的希望。
  • 相关阅读:
    ubuntu系统安装Loadrunner压力机和负载端(linux agent)
    LoadRunner生成二进制参数的方法
    [02]树莓派无线USB网卡,Mercury WIFI配置
    6.4节“末端端接器的交流偏置”
    MIPS32的DIV和DIVU实现(除法指令)
    5.3节“开槽地平面的串扰”
    给自己挖坑
    电容降额
    MIPS32的ADDI和ADDIU的实现要点(加法指令)
    使用加法器实现减法
  • 原文地址:https://www.cnblogs.com/devi1/p/13486417.html
Copyright © 2011-2022 走看看