摘要: ProcessHeap 是`Windows`进程的默认堆,每个进程都有一个默认的堆,用于在进程地址空间中分配内存空间。默认情况下`ProcessHeap`由内核进行初始化,该堆中存在一个未公开的属性,它被设置为加载器为进程分配的第一个堆的位置(进程堆标志),`ProcessHeap`标志位于`PEB`结构中偏移为`0x18`处,第一个堆头部有一个属性字段,这个属性叫做`ForceFlags`属性偏移为`0x44`,该属性为0说明程序没有被调试,非0说明被调试,另外的`Flags`属性为2说明被调试,不为2则说明没有被调试。 阅读全文
posted @ 2023-09-26 12:20 微软技术分享 阅读(24) 评论(0) 推荐(0) 编辑
摘要: NtGlobalFlag 是一个`Windows`内核全局标记,在`Windows`调试方案中经常用到。这个标记定义了一组系统的调试参数,包括启用或禁用调试技术的开关、造成崩溃的错误代码和处理方式等等。通过改变这个标记,可以在运行时设置和禁用不同的调试技术和错误处理方式,比如调试器只能访问当前进程、只允许用户模式调试、启用特定的错误处理方式等等。但由于`NtGlobalFlag`标记是内核全局标记,其改变会影响整个系统的行为,需要谨慎处理。利用该标记反调试,首先定位`dt -rv ntdll!_TEB`找到`TEB`结构并通过`TEB`找到`PEB`结构,然后找到`+0x068 NtGlobalFlag`,这个位置的`NtGlobalFlag`类似于`BeingDebugged`,如果是调试状态`NtGlobalFlag`的值会是`0x70`,所以可以判断这个标志是否为`0x70`来判断程序是否被调试了,首先我们来使用汇编代码解决。 阅读全文
posted @ 2023-09-26 12:19 微软技术分享 阅读(17) 评论(0) 推荐(0) 编辑
摘要: BeingDebugged 是`Windows`系统`PEB`结构体中的一个成员,它是一个标志位,用于标识当前进程是否正在被调试。BeingDebugged的值为0表示当前进程未被调试,值为1表示当前进程正在被调试。由于`BeingDebugged`是在`PEB`结构体中存储的,因此可以通过访问`PEB`结构体来获取`BeingDebugged`的值。恶意软件可以使用`BeingDebugged`来判断自己是否正在被调试,以此来防止被反病毒工程师或调试程序进行分析。反病毒工程师们也可以通过检查`BeingDebugged`的值来判断程序是否正被调试从而进行恶意软件的检测和分析。 阅读全文
posted @ 2023-09-26 12:14 微软技术分享 阅读(27) 评论(0) 推荐(0) 编辑

loading... | loading...
博客园 - 开发者的网上家园