PTRACE_TRACEME 反调试
原理有两条
反调试先附加自己,防止其他ptrace附加。
反调试后附加自己失败,则被其他ptrace附加
其实就这样:
1
2
3
4
|
if
(ptrace(PTRACE_TRACEME,...)
=
=
-
1
)
{
/
/
exit ...
}
|
常见的过这个反调试是hook ptrace调用,过滤参数,返回。
我的反反调试思路也和这个差不多:
伪造ptrace(PTRACE_ME,...)的返回值为0,这样
反调试先附加自己,以为自己附加成功了,实际上失败了,我们调试器可以附加上。
反调试后附加自己,以为自己附加成功了,实际上他失败了,所以认为没有其他ptrace附加。
这也就骗过了反调试。
可修改源码的情况下,这里直接return即可。
和这帖子的方法有异曲同工之处,也是自己改完想学学大佬的方法,才发现的。比较下来,还是感觉改系统源码这种方式一劳永逸,但也学习了大佬的思路。(如果没有破坏稳定性的话)
https://bbs.pediy.com/thread-212404.htm
如果有其他方式调用,绕过了这种反反调试,还是可以在ptrace_traceme函数内部直接return的
更多【【从源码过反调试】二、过PTRACE_TRACEME】相关视频教程:www.yxfzedu.com