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,附加子进程。
你将受到所有人的崇拜! .学习了
你将受到所有人的崇拜! 很不错的教程,学习了!!! 十分感谢大佬 精彩文章希望继续努力 [快捷回复]-学破解防逆向,知进攻懂防守! 感谢楼主 大佬无敌 Thanks~ 向楼主致敬!