anti debugging
ref: http://erenyagdiran.github.io/I-was-just-asked-to-crack-a-program-Part-1/ #include<stdio.h> #include <sys/ptrace.h> int main() { if (ptrace(PTRACE_TRACEME, 0, 1, 0) < 0) { printf("DEBUGGING... Bye\n"); return 1; } printf("Hello\n"); return 0; } zakk@lex:[~/test]$ ./a.out Hello zakk@lex:[~/test]$ gdb ./a.out (gdb) r Starting program: /home/zakk/test/a.out DEBUGGING... Bye [Inferior 1 (process 338) exited with code 01] http://blog.linux.org.tw/~jserv/archives/002027.html http://www.oenhan.com/gdb-principle gdb主要功能的实现依赖于一个系统函数ptrace,通过man手册可以了解到,ptrace可以让父进程观察和控制其子进程的检查、执行,改变其寄存器和内存的内容,主要应用于打断点(也是gdb的主要功能)和打印系统调用轨迹。 gdb使用ptrace的基本流程 gdb调试一个新进程:通过fork函数创建一个新进程,在子进程中执行ptrace(PTRACE_TRACEME, 0, 0, 0)函数,然后通过execv()调用准备调试的程序。 attach到已运行进程:将pid传递给gdb,然后执行ptrace(PTRACE_ATTACH, p...