首页
社区
课程
招聘
[旧帖] [求助]如何看 DebugPort 0.00雪花
发表于: 2009-1-1 03:30 6546

[旧帖] [求助]如何看 DebugPort 0.00雪花

2009-1-1 03:30
6546
有一种反调试的方法 是 不停的向PEPROCESS->DebugPort 写入0

请问。。。如何检测 向 PEPROCESS->DebugPort 写入0?

编程如何实现? 给个揭示。。或者指引个道啊

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
最基本的调试器检测技术就是检测进程环境块(PEB)中的BeingDebugged标志。IsDebuggerPresent() API检查这个标志以确定进程是否正在被用户模式的调试器调试。
我们用调试器附加调试一个进程的步骤是:
DebugActiveProcess ---> DbgUiDebugActiveProcess -->NtDebugActiveProcess --> DbgkpSetProcessDebugObject --->DbgkpMarkProcessPeb
最终在DbgkpMarkProcessPeb中有这样一句代码:
Process->Peb->BeingDebugged = (BOOLEAN)(Process->DebugPort != NULL ? TRUE : FALSE);
即PEB中的BeingDebugged标志设置来源于DebugPort.
DebugPort对应的结构如下:
typedef struct _DEBUG_OBJECT {
    //
    // Event thats set when the EventList is populated.
    //
    KEVENT EventsPresent;
    //
    // Mutex to protect the structure
    //
    FAST_MUTEX Mutex;
    //
    // Queue of events waiting for debugger intervention
    //
    LIST_ENTRY EventList;
    //
    // Flags for the object
    //
    ULONG Flags;
} DEBUG_OBJECT, *PDEBUG_OBJECT;
BOOLEAN
PsIsProcessBeingDebugged(

    __in PEPROCESS Process

    )

{

    if (Process->DebugPort != NULL) {

        return TRUE;

    } else {

        return FALSE;

    }

}
2009-1-9 01:32
0
雪    币: 33
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
第一时间说个谢谢!!
等了好久。。终于等到你回复了
2009-1-9 04:00
0
游客
登录 | 注册 方可回帖
返回
//