Linux反调试小记(一)

本文介绍了Linux程序的反调试策略,包括忽略int3指令以防止调试器介入,通过检查getppid来探测是否被gdb、strace等跟踪,以及利用session id的特性来判断是否处于调试状态。通过这些方法,开发者可以增强程序的安全性。
摘要由CSDN通过智能技术生成

在编写Linux程序过程中,考虑到自己写的程序可能会被别人调试,因此对Linux的反调试技术进行了一些研究,这里一共总结了9种方法,我将分三篇文章对这些方法进行说明。当然了,如果在这个过程中你有更好的、更加新颖的思路与方法,欢迎交换。现在开始进入正题啦。

一、忽略int3指令

我们知道,X86从它的第一代产品8086开始就提供了int 3作为它的调试指令,int 3又叫做断点指令,专门用来给调试器使用。那么如果这样的话,很容易就能够联想到,要反调试,只要插入int 3来迷惑调试器即可。但是这会影响正常的程序吗?当然了,因为int 3会在用户空间产生SIGTRAP。其实这个很简单,我们只要忽略这个信号就可以啦。

#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <dirent.h>
#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/stat.h>

void handler(int signo)
{
  
}

void PassByInt3()
{
  signal(SIGTRAP, handler);
  __asm__("nop\n\t"
    "int3\n\t");
  printf("Hello from main!\n");
}


int main(int argc, char *argv[])
{
  PassByInt3();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值