专栏首页difcareer的技术笔记反调试检测之一TracerPid

反调试检测之一TracerPid

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

Paste_Image.png

Paste_Image.png

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

Paste_Image.png

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

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

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

下面说一下改动点:

kernel/msm/fs/proc/base.c 
kernel/msm/fs/proc/array.c 

base.c在 line285 处修改如下:

      else { 
           if (strstr(symname, "trace")) { 
                return sprintf(buffer, "%s", "sys_epoll_wait"); 
           } 
           return sprintf(buffer, "%s", symname); 
      } 

array.c在 line134处修改如下:

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 处修改如下:

"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,可以参考逆向修改手机内核,绕过反调试

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • “爱加密” 动态脱壳法

    2.附加成功后按"G"键 跳到dvmDexFileOpenPartial函数与fopen函数与fgets函数去下好断点。

    我是小三
  • frida调试不了怎么办?着急,在线等!

    frida越来越流行,针对他的检测也越来越多了,什么特征串检测,TracerPid检测,双进程保护。搞的我们茶饭不思,啤酒都不香了。

    fenfei331
  • Android应用防止so注入防止动态调试参考代码

    由于公司应用需要过安全测试,测试那边说有so注入漏洞,所以找到了这份代码,并成功通过测试。

    用户1696846
  • [Android][Security] Android 逆向之安全防护基本策略

    使用混淆主要可以减小包的大小。混淆对于安全保护来说,只是增加了阅读难度而已。混淆不会把关键代码混淆掉,比如MainActivity,Application等,可...

    wOw
  • Android APP安全防护总结

    使用Lint对无用资源进行清理,而Lint则可以检查所有无用的资源文件,只要使用命令./gradlew lint或者在Android Studio工程中点击An...

    天钧
  • android 防止反编译的若干方法

    第一种方式:混淆策略 混淆策略是每个应用必须增加的一种防护策略,同时他不仅是为了防护,也是为了减小应用安装包的大小,所以他是每个应用发版之前必须要添加的一项...

    xiangzhihong
  • android逆向学习路线

    就我自己从事安卓逆向这几年的经验来说,对没有编程基础的朋友如何学习安卓逆向最好制定以下学习路线:

    悲伤的夏洛特@席玉铎666
  • 反调试手法之CreateProcess反调试

    在学习Win32 创建进程的时候.我们发现了有一个进程信息结构体. STARTUPINFO. 这个结构体可以实现反调试.

    IBinary
  • RADARE2+FRIDA=R2FRIDA Best Dynamic Debugging Tool (Weibo Crack)

    然后用frida-ls-devices工具获取 usb device id ;接着用frida-ps -U | grep xhs获取完整包名

    吾爱小白
  • 企业壳的反调试及Hook检测分析

    *本文原创作者:y0nLandroid,本文属FreeBuf原创奖励计划,未经许可禁止转载 1.写在开始 最近在学习梆梆壳,在调试的过程中遇到了反调试,很是苦恼...

    FB客服
  • Android逆向|反调试实战_文件名端口检测

    声明:所有实验含部分虚构,纯属技术练习,未对真实环境造成任何影响。也请勿将相关技术用于非法操作,否则责任自负。

    辞令
  • CTF逆向指南

    在CTF比赛中, CTF逆向题目除了需要分析程序工作原理, 还要根据分析结果进一步求出FLAG。逆向在解题赛制中单独占一类题型, 同时也是PWN题的前置技能。在...

    小道安全
  • 借你一双慧眼,鸟瞰二进制世界的秘密

    由于Java世界的特性所致,安卓应用在代码自身保护方面一直乏善可陈。所谓的Java混淆等技术,也不过是一层簿簿的面纱,极易被撕开,毫无秘密可言。所以,当前也没有...

    FB客服
  • DASCTF|June GKCTF X DASCTF应急挑战杯WriteUP-PWN&REVERSE篇

    本次竞赛涵盖WEB、CRYPTO、MISC、PWN、REVERSE常规CTF五大类赛题。

    安恒网络空间安全讲武堂
  • 『贝壳找房APP』反编译到底有多简单–反编译和调试实践

    最近,在朋友圈看到有人发贝壳找房在Appstore上的下载排行榜,已进入前三。于是,我在应用宝上下载了贝壳release apk。

    全栈程序员站长
  • 安卓反调试|常见的Xposed框架检测手段与突破方式​

    原理:当App获取到系统权限的时候,可以获取系统的所有运行中的App的列表,通过列表发现是否存在有Xposed相关的App(通常都是Xposed Install...

    云爬虫技术研究笔记
  • 单元测试类检测调用是否正确

    用户8671053
  • 性能测试之测试分析与调优

    适用于需要进行性能分析及调优的工作。 预期读者为测试管理人员、测试实施人员、技术支持人员、项目质量管理人员、项目管理人员等系统技术质量相关人员。

    用户9029030
  • 反爬虫之检测PhantomJS访客(翻译文)

    翻译前言:作为数据采集工程师经常和反爬虫技术做斗争,其中我使用的爬虫结构是:分布式+多机器+adsl | tor+phantomjs无界面浏览器+机器学习验证码...

    我在鹅厂做安全

扫码关注云+社区

领取腾讯云代金券