如何检测程序是否被调试

 如何检测程序是否被调试,其实很简单,几行代码就行了,常应用于软件防破解等方面,但对于某些调试器而言无效(比如改进的OllyDbg--OllyICE)。
下面是C+asm代码,大家可以试试。
#include <stdio.h>
#include <conio.h>
int IsDebugged()
{
    __asm
    {
        mov eax, fs: [30h] //获取线程环境块中对应的进程环境块的地址
        movzx eax, byte ptr[eax + 2h] //获取BebingDebugged标志的值
        or al, al  //测试BebingDebugged标志的值
        jz FLAG1
        mov eax, 1
        jmp END
 FLAG1:
        mov eax, 0 //推荐使用xor eax,eax语句
 END:
    }
}

int main()
{
    if (IsDebugged())
    {
        printf("有调试器!/n");
    }
    else
    {
        printf("无调试器!/n");
    }
    getch();
    return 0;
}
Delphi 7 (也称为Borland Delphi) 提供了一种名为`TThread.Suspended`属性来检测程序是否正在被调试器(如OllyDbg、IDA Pro等)中断并单步执行。这种方法不是绝对精确的,因为一些高级调试器可能会绕过这种检查,但它可以作为一个初步的防御机制。 下面是一个简单的示例: ```delphi unit Unit1; interface uses Windows, Classes; type TMyForm = class(T TForm) private FIsDebuggerPresent: Boolean; // 存储当前状态 procedure FormCreate(Sender: TObject); public procedure CheckIfDebugged; end; var MyForm: TMyForm; implementation procedure TMyForm.FormCreate(Sender: TObject); begin FIsDebuggerPresent := False; end; // 检查函数,每秒更新一次检测结果 procedure TMyForm.CheckIfDebugged; var SleepInterval: Integer; begin if not FIsDebuggerPresent then begin // 当前不是调试模式,尝试获取线程状态 Try FIsDebuggerPresent := TThread.Suspended <> 0; except // 如果无法获取,可能是调试器干扰了 FIsDebuggerPresent := True; end; // 更新UI显示当前状态 if Assigned(DebugInfo) and DebugInfo.Active then Memo1.Lines.Add('Detected debugger presence: ' + IntToStr(FIsDebuggerPresent)); // 设置定时器定期检查(这里设置每秒) SleepInterval := 1000; Timer1.Interval := SleepInterval; Timer1.Enabled := True; end else Timer1.Enabled := False; // 如果是调试模式,停止检查 end; end. ``` 在这个例子中,`TThread.Suspended`非零值表示线程处于暂停状态,这通常意味着被调试器中断。如果检测到这个状态,`CheckIfDebugged`函数会记录并可能采取相应措施,如关闭敏感功能。 然而请注意,这种方法有其局限性,比如它依赖于操作系统级别的线程信息,而有些高级调试器可以隐藏它们的存在。因此,仅作为安全意识的一种增强手段,而不是全面的安全解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值