1122cf 发表于 2020-10-29 17:24

self-debugging反调试

Self的英文意思是自己,顾名思义,self-debugging就是通过调试自身检测出是否被调试。

一:self-debugging反调试原理

1.通过观察下图可知,当前的进程就是父进程,也就是即将被调试的进程。



2.然后通过父进程来fork一个子进程,如下图所示。



3.子进程实现了调试器的功能,如下图所示。



4.作为调试器的子进程附加父进程,如下图所示。



5.通过子进程调试父进程,进而阻止其他调试器来调试父进程,如下图所示。






一般的调试器,先附加待调试程序的进程,获取相关进程的信息,才能进行相应的动态调试,如果由子进程来附加调试父进程,那么其他调试器就不能附加该进程,因为同一时刻,一个进程只能被一个进程附加。

二:self-debugger调试器的反调试流程

1.先将这两个文件push到手机目录:data/local/tmp,如下图所示。



2.分别给最高权限chmod 777,如下图所示。



3.执行命令:ps | grep com,过滤手机中以com开头的进程,选中这个以phone结尾的进程,如下图所示。



4.运行debugger,调试此进程,如下图所示。



5.如果进程被调试,执行命令cat /proc /10529/status,它的进程pid值会发生变化,如下图所示。



6.继续执行命令:ps | grep debugger,查看debugger的进程信息,发现存在两个进程信息,第一个进程22229就是刚才被调试程序的tracepid的值,第二个是系统的,可以直接忽略它,如下图所示。



此时就说明debugger调试器附加成功了,既然附加成功,说明调试器的实现是没有问题的。

7.接着运行self debugger进行测试,如下图所示。




8.显示有主进程pid和子进程pid,如下图所示。



9.使用debugger附加它的主进程,显示失败,如下图所示。



10.原因是它的主进程正在被子进程调试,此时debuger再去附加,就会报错,如下图所示。




11.如果过掉self-debugger反调试,则可以附加它的子进程,如下图所示。



小结
分析了self-debugger原理,还演示self-debugger调试器的反调试流程,这个过程中需要关注其中的执行命令,最后还学了如何过掉self-debugger,附加子进程。



九幽小丑 发表于 2020-10-29 20:32

你将受到所有人的崇拜!

HlccFu 发表于 2020-10-29 22:59

.学习了
你将受到所有人的崇拜!

wilesilly 发表于 2020-11-6 16:35

很不错的教程,学习了!!!

拿着雪糕 发表于 2022-1-30 11:52

十分感谢大佬

ghostxu 发表于 2022-2-7 16:01

精彩文章希望继续努力

我是好人 发表于 2022-2-7 18:52

[快捷回复]-学破解防逆向,知进攻懂防守!

bQSkjiZKq 发表于 2022-2-22 16:36

感谢楼主

YLa3 发表于 2022-3-1 07:06

大佬无敌

BPWK8 发表于 2022-3-1 07:46

Thanks~ 向楼主致敬!
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: self-debugging反调试