【发布时间】:2013-01-17 08:54:27
【问题描述】:
我曾经使用 gdb 等工具进行调试,但我对它们的实现知之甚少。我正在尝试在我的程序中实现一种反调试技术,但对调试知之甚少,我需要一些帮助。我遇到了来自http://www.julioauto.com/rants/anti_ptrace.htm的以下代码
void anti_ptrace(void)
{
pid_t child;
if(getenv("LD_PRELOAD"))
while(1);
child = fork();
if (child)
wait(NULL);
else
{
pid_t parent = getppid();
if (ptrace(PTRACE_ATTACH, parent, 0, 0) < 0)
while(1);
sleep(1);
ptrace(PTRACE_DETACH, parent, 0, 0);
exit(0);
}
}
我想听听各位大师的专家意见,关于上面的代码会有多成功,利弊是什么?
任何帮助将不胜感激。
【问题讨论】:
-
要反调试?为什么?
-
实际上我正在构建一个库,我不希望其他进程可以对其进行跟踪。这是一种强迫。
-
并且会阻止我简单地获取您的二进制文件并对其进行修补以跳过这些事情?
-
你在浪费时间。
-
这种“保护”是 a) 很容易检测到 b) 很容易被覆盖 c) 可以很容易地从编译的二进制文件中删除
标签: c linux debugging process ptrace