日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

反调试检测之一TracerPid

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 反调试检测之一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,可以參考逆向*修改手機內核*,繞過反調試



作者:difcareer
鏈接:http://www.jianshu.com/p/26c16c747720
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的反调试检测之一TracerPid的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。