前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >反调试检测之一TracerPid

反调试检测之一TracerPid

作者头像
用户2930595
发布2018-08-23 09:47:02
1.6K0
发布2018-08-23 09:47:02
举报

当我们使用Ptrace方式跟踪一个进程时,目标进程会记录自己被谁跟踪,可以查看/proc/pid/status看到这个信息,下图展示的是使用ida进行调试的情况。

Paste_Image.png

Paste_Image.png

而没有被调试的时候TracerPid为0:

Paste_Image.png

因此一种常见的检测调试的办法就是去读取这个值,发现不是0则判定为被调试。

本文提供一个反检测的方法,通过修改和重新编译kernel的方式来让TracerPid在调试的时候仍然为0。

编译kernel参考编译nexus5的linux kernel源码

下面说一下改动点:

代码语言:javascript
复制
kernel/msm/fs/proc/base.c 
kernel/msm/fs/proc/array.c 

base.c在 line285 处修改如下:

代码语言:javascript
复制
      else { 
           if (strstr(symname, "trace")) { 
                return sprintf(buffer, "%s", "sys_epoll_wait"); 
           } 
           return sprintf(buffer, "%s", symname); 
      } 

array.c在 line134处修改如下:

代码语言:javascript
复制
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 */ 
           "K (wakekill)",       /* 128 */ 
           "W (waking)",         /* 256 */ 
      };  

在 line187 处修改如下:

代码语言:javascript
复制
"Gid:\t%d\t%d\t%d\t%d\n", 
                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); 

修改后,重新编译kernel,替换zImage-dtb,重新编译AOSP,刷机即可。

效果:

Paste_Image.png

至于代码为啥这么改,参考:http://www.evil0x.com/posts/26301.html

假如你不想重新编译kernel,可以参考逆向修改手机内核,绕过反调试

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档