Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31808
  • 博文数量: 6
  • 博客积分: 65
  • 博客等级: 民兵
  • 技术积分: 71
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-23 21:40
文章分类

全部博文(6)

文章存档

2014年(2)

2013年(2)

2012年(2)

我的朋友

分类: LINUX

2014-12-14 19:16:11

方法四:(接上篇)

   另一种解决方法就是自己写一个.so文件,然后把环境变量LD_PRELOAD设置成你自己写的.so文件。

点击(此处)折叠或打开

  1. ptrace.c
  2. int ptrace(int i, int j, int k, int l)
  3. {
  4.     printf(" PTRACE CALLED!\n");
  5.     return 0;
  6. }
编译gcc -shared ptrace.c -o ptrace.so,然后执行export=`pwd`/ptrace.so,然后再用gdb调试。因为程序调用的ptrace函数变成了我们现在写的这个函数,返回值变成0,所以根据ptrace的返回值判断是否被调试的方法也解决了。

方法五:根据文件描述符判断

   一般情况下程序开始运行的时候只打开了三个文件描述符0和1还有2。如果这个程序是被gdb调试的打开的,那么它开始运行的时候因为继承了gdb的文件描述符,会有另外三个3和4还有5。所以可以在程序开始的时候打开一个文件判断它的描述符是多少来判断是不是在被调试。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. int main(int argc, char *argv[])
  3. {
  4.         int fd = open(argv[0], "r");
  5.         if(fd>5) {
  6.                 printf("gdb is not allowed\n");
  7.                 exit(1);
  8.         }
  9.         return 0;
  10. }


阅读(837) | 评论(0) | 转发(0) |
0

上一篇:基本的反调试技巧

下一篇:没有了

给主人留下些什么吧!~~