首页 > 其他分享 >反调试专题丨反调试之NtGlobaFlag

反调试专题丨反调试之NtGlobaFlag

时间:2023-06-28 13:01:55浏览次数:45  
标签:专题 Void Ptr32 Pos 0x003 Ptr64 Bit NtGlobaFlag 调试

一、32位系统 nt!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar isDbg值,8字节 +0x003 BitField : UChar +0x003 ImageUsesLargePages : Pos 0, 1 Bit +0x003 IsProtectedProcess : Pos 1, 1 Bit +0x003 IsLegacyProcess : Pos 2, 1 Bit +0x003 IsImageDynamicallyRelocated : Pos 3, 1 Bit +0x003 SkipPatchingUser32Forwarders : Pos 4, 1 Bit +0x003 SpareBits : Pos 5, 3 Bits +0x004 Mutant : Ptr32 Void +0x008 ImageBaseAddress : Ptr32 Void 镜像基址 +0x00c Ldr : Ptr32 _PEB_LDR_DATA _PEB_LDR_DATA结构 +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS +0x014 SubSystemData : Ptr32 Void +0x018 ProcessHeap : Ptr32 Void
+0x01c FastPebLock : Ptr32 _RTL_CRITICAL_SECTION +0x020 AtlThunkSListPtr : Ptr32 Void +0x024 IFEOKey : Ptr32 Void +0x028 CrossProcessFlags : Uint4B +0x028 ProcessInJob : Pos 0, 1 Bit +0x028 ProcessInitializing : Pos 1, 1 Bit +0x028 ProcessUsingVEH : Pos 2, 1 Bit +0x028 ProcessUsingVCH : Pos 3, 1 Bit +0x028 ProcessUsingFTH : Pos 4, 1 Bit +0x028 ReservedBits0 : Pos 5, 27 Bits +0x02c KernelCallbackTable : Ptr32 Void +0x02c UserSharedInfoPtr : Ptr32 Void +0x030 SystemReserved : [1] Uint4B +0x034 AtlThunkSListPtr32 : Uint4B +0x038 ApiSetMap : Ptr32 Void +0x03c TlsExpansionCounter : Uint4B +0x040 TlsBitmap : Ptr32 Void +0x044 TlsBitmapBits : [2] Uint4B +0x04c ReadOnlySharedMemoryBase : Ptr32 Void +0x050 HotpatchInformation : Ptr32 Void +0x054 ReadOnlyStaticServerData : Ptr32 Ptr32 Void +0x058 AnsiCodePageData : Ptr32 Void +0x05c OemCodePageData : Ptr32 Void +0x060 UnicodeCaseTableData : Ptr32 Void +0x064 NumberOfProcessors : Uint4B CPU的个数 +0x068 NtGlobalFlag : Uint4B . . .

PEB 有一个名为NtGlobalFlag(32位系统下偏移量0x68)的字段,程序可以挑战该字段以确定它们是否正在被调试。通常,当进程未被调试时,NtGlobalFlag字段包含值0x0。调试进程时,该字段通常包含值0x70,表示设置了以下标志:

标志

FLG_HEAP_ENABLE_TAIL_CHECK

FLG_HEAP_ENABLE_FREE_CHECK

FLG_HEAP_VALIDATE_PARAMETERS

其余

所以可以通过检测此标志位来检测是否被调试。 实现代码可以通过汇编或者通过C++实现,汇编实现如下:

DWORD MyIsDebug1(){ DWORD Flag = 0; __asm { mov eax,fs:[30h] mov eax,[eax+68h] mov Flag,eax } return Flag; }

完整代码如下:

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //

#include #include DWORD MyIsDebug1(){ DWORD Flag = 0; __asm { mov eax,fs:[30h] mov eax,[eax+68h] mov Flag,eax } return Flag; }

DWORD WINAPI MyIsDebug( LPVOID lpThreadParameter ) { DWORD myFlag = 0; while (1) { myFlag = MyIsDebug1(); if (myFlag == 0x70) { MessageBox(NULL, L"警告", L"调试中", MB_OK); } } return 1; }

int main() { //IsDebuggerPresent(); CreateThread(NULL, NULL, MyIsDebug, NULL, NULL, NULL); std::cout << "Hello World!\n"; system("pause"); return 0; }

反调试之NtGlobalFlag.png

二、64位系统 ntdll!_PEB +0x000 InheritedAddressSpace : UChar +0x001 ReadImageFileExecOptions : UChar +0x002 BeingDebugged : UChar +0x003 BitField : UChar +0x003 ImageUsesLargePages : Pos 0, 1 Bit +0x003 IsProtectedProcess : Pos 1, 1 Bit +0x003 IsImageDynamicallyRelocated : Pos 2, 1 Bit +0x003 SkipPatchingUser32Forwarders : Pos 3, 1 Bit +0x003 IsPackagedProcess : Pos 4, 1 Bit +0x003 IsAppContainer : Pos 5, 1 Bit +0x003 IsProtectedProcessLight : Pos 6, 1 Bit +0x003 IsLongPathAwareProcess : Pos 7, 1 Bit +0x004 Padding0 : [4] UChar +0x008 Mutant : Ptr64 Void +0x010 ImageBaseAddress : Ptr64 Void +0x018 Ldr : Ptr64 _PEB_LDR_DATA +0x020 ProcessParameters : Ptr64 _RTL_USER_PROCESS_PARAMETERS +0x028 SubSystemData : Ptr64 Void +0x030 ProcessHeap : Ptr64 Void +0x038 FastPebLock : Ptr64 _RTL_CRITICAL_SECTION +0x040 AtlThunkSListPtr : Ptr64 _SLIST_HEADER +0x048 IFEOKey : Ptr64 Void +0x050 CrossProcessFlags : Uint4B +0x050 ProcessInJob : Pos 0, 1 Bit +0x050 ProcessInitializing : Pos 1, 1 Bit +0x050 ProcessUsingVEH : Pos 2, 1 Bit +0x050 ProcessUsingVCH : Pos 3, 1 Bit +0x050 ProcessUsingFTH : Pos 4, 1 Bit +0x050 ProcessPreviouslyThrottled : Pos 5, 1 Bit +0x050 ProcessCurrentlyThrottled : Pos 6, 1 Bit +0x050 ReservedBits0 : Pos 7, 25 Bits +0x054 Padding1 : [4] UChar +0x058 KernelCallbackTable : Ptr64 Void +0x058 UserSharedInfoPtr : Ptr64 Void +0x060 SystemReserved : Uint4B +0x064 AtlThunkSListPtr32 : Uint4B +0x068 ApiSetMap : Ptr64 Void +0x070 TlsExpansionCounter : Uint4B +0x074 Padding2 : [4] UChar +0x078 TlsBitmap : Ptr64 Void +0x080 TlsBitmapBits : [2] Uint4B +0x088 ReadOnlySharedMemoryBase : Ptr64 Void +0x090 SharedData : Ptr64 Void +0x098 ReadOnlyStaticServerData : Ptr64 Ptr64 Void +0x0a0 AnsiCodePageData : Ptr64 Void +0x0a8 OemCodePageData : Ptr64 Void +0x0b0 UnicodeCaseTableData : Ptr64 Void +0x0b8 NumberOfProcessors : Uint4B +0x0bc NtGlobalFlag : Uint4B

可以看到64位系统下面,NtGlobalFlag标志位有所不同,位于PEB偏移0xbc。其余和x86没有区别。可以通过readgsqword(60h)获取到PED地址,再检查偏移0xbc位置标志位达到反调试效果。

三、反反调试

  1. 手动修改标志位

  2. 使用OD插件

  3. 在WinDbg中,在禁用调试堆的情况下启动程序 ( windbg -hd program.exe )

标签:专题,Void,Ptr32,Pos,0x003,Ptr64,Bit,NtGlobaFlag,调试
From: https://blog.51cto.com/u_15452079/6570620

相关文章

  • 【Flutter专题】Android Flutter入门笔记、技术解析与项目实战
    Flutter是一个跨平台、高性能的移动UI框架,其采用Dart语言开发,并使用自己的渲染引擎来绘制UI,保证了自身的高性能,保证了在Android和iOS上UI的一致性。目前Flutter已经支持iOS、Android、Web、Windows、macOS、Linux、Fuchsia(Google新的自研操作系统)等众多平台。与其他跨平......
  • Firebug调试CSS布局
    Firebug与CSS布局  译/raywill  当CSS盒子之间没有正确的对齐的时候,可能很难找到原因。这时候可以用Firebug来测量一下盒子的偏移、外边距(margin)、内边距(padding)以及大小(size)。玩CSS,离不开它!     盒模型阴影在css中,所有元素都适用于盒模型,拥有margin、border、padding和具......
  • 【杂题乱写】6 月多校字符串专题训练
    ACodeForces-547EMikeandFriends*2800肯定要建广义SAM。在每个\(cur\)打一个标记,没有区间限制就在对应节点上查一下后缀树子树标记总数,有区间限制线段树合并维护标记。点击查看代码intn,q;chars[maxn];intmark[maxn];structSegmentTree{#definemid((l+r)>......
  • 监听调试web service的好工具TCPMon
    一般的远程监控软件都是用c或者c++等语言开发的,而使用java如何来实现相同的功能呢。 首先我们先介绍一下一个简单的远程监控程序的实现原理。 功能一,远程屏幕监视 (1)必须要有监控端与被监控端,而且程序保持启动。 (2)被监控端获取本机的屏幕截屏发图给监控端。 (3)监控端在......
  • CTFer成长记录——Web专题·双写绕过
    一、题目链接http://a.y1ng.vip:1126/employeeswork/二、题意解析  访问该网址:  发现是一些不明觉厉的英文:  关于Y1ng公司所有员工的通知:  如果你认为你对自己的工作感到满意,你可以使用函数work_worthy()。  但是是否值得,只会由我的机器人PrecocedeMalingre来......
  • CTFer成长记录——web专题·一句话木马
    一、题目链接http://a.y1ng.vip:1126/chopper/二、题意解析打开网址,发现网页提示:明显是一个一句话木马的语句,而且可以猜测网页后台已经有php木马文件,我们只需要连接上就行。三、解题步骤使用antSword等Webshell管理工具,来对该后门程序进行链接:这里用antSword,复制该网页的域......
  • 嘉为蓝鲸受邀出席2023航空数字化转型专题会并发表演讲
    6月15-16日,以“体验、效率、效益”为主题的2023航空数字化转型专题会在上海中航泊悦酒店召开,作为数字研运解决方案的引领者,嘉为蓝鲸受邀参与本次峰会。本次大会邀请众多行业专家、航司机场及其产业链信息化负责人,就目前航空业数字化转型的重点难点,面对面深入沟通与交流,旨在为智慧民......
  • 方芳:学习在北京大学举办的“建设社会主义现代化国家学术研讨会”专题会议上的学习笔记
    大治理观与大社会治理 学习徐教授讲话笔记整理稿。【去敏文字稿】从治理话语的历史、国际、实践和学科的维度,可以把治理分为两个层面:一是以国家为主体,以国家整体为对象,涉及治理主体及其相互关系的治理。围绕这一治理定义所产生的理念和思维,可称之为大治理观。二是不涉及国家整......
  • Three.js教程:gui调试界面2
    推荐:将NSDT场景编辑器加入你的3D工具链其他系列工具:NSDT简石数字孪生gui调试界面2-颜色命名等本节课结合threejs,给大家介绍gui.js库更多的方法。.name()方法.add()创建的交互界面,会默认显示所改变属性的名字,为了通过交互界面更好理解你改变的某个对象属性,你可以通过.name()方......
  • ModifyAjaxResponse,修改ajax请求返回值,前后端调试之利器
    一、概要先看图 京豆多的离谱,你的第一想法肯定是:按F12修改了网页元素没那么简单,你看支持刷新的  肯定还是假的,通过Fiddler或Wireshark等抓包工具修改了响应包;或者干脆改了本地host文件,指向了一个自己写的页面......这些都太麻烦了,如果能在当前网页上拦截这个请求,......