在Win32的核心, 结构化异常处理(Structured Exception Handling)(SEH) 是操作系统提供的一种服务. 你能找到的所有关于SEH的文档都会描述某一种编译器的运行时库(runtime library)对操作系统实现的某种包装. 我会层层剥析SEH一直到它的最基本的概念.   这篇文章假设你熟悉Win32,C++   文章示例代码: Exception.zip 在所有由Win32操作系统提供的基础设施中, 可能被最广泛应用却没有文档说明的就是结构化异常处理了. ...

阅读全文>>

原理: 段基址 + 偏移地址  =  函数地址 让idt不动的话, 就需要更改段基址 实例代码: #include "ntddk.h" #include "ntddk.h" #define WORD USHORT #define DWORD ULONG #define MAKELONG(a, b) ((LONG)(((WORD)(((DWORD_PTR)(a)) & 0xffff)) \ | ((DWORD)((WORD)(((DWORD_PT...

阅读全文>>

主要理解下面的内容: 1: KiProcessorBlock数组的每一个非0项都是指向一个_kprcb结构,而_kprcb结构正是再_kpcr结构的+0x120处,_kpcr结构的+0x38就是_IDT结构地址。 2: 通过硬编码 使用ida找到 KiProcessorBlock 3: IDt的表结构的理解, 进行函数过滤 详细使用代码 (xp3) #include <ntddk.h> #define WORD USHORT #define D...

阅读全文>>

没啥技术含量 主要就是指令 sidt  详细代码 #include <ntddk.h> #define WORD USHORT #define DWORD ULONG #define MAKELONG(a,b) ((DWORD)((USHORT)a))|(((DWORD)b)<<16) typedef struct _IDTR{ USHORT IDT_limit; USHORT IDT_LOWbase; USHORT IDT_HIGbase; }ID...

阅读全文>>

注意事项 : 我用的OD是 自己有保护的,经过内核重载 CE就能打开OD了 没重载之前呢 是看不到OD进程的 不要跟360HOOK了一个点 要不就会蓝屏 ,  加载驱动前一定要检查 有没有被HOOK NtCreateFile 函数否则就会加载失败的 重点注意QQ 它的驱动HOOK了不少函数而且是重启不会取消的HOOK  解决办法就是把它的驱动删除了 重启 就OK 比如打开了 CE 一定要先把CE关掉以后 才能卸载重载驱动 要不就会蓝屏 首先呢我们要学的是一个思想,过程代码就放在哪跟着代码一步一步看最后作者的意思是什么就会明白.也能自己调用但是...

阅读全文>>

文章非原创,转载的 今天和大家分享一个小心得,想必很多高手已经玩腻了~飘过吧! 最近接触了不少游戏保护,它们或多或少的都有一个特制就是在被调试机上运行游戏以后调试机上的WINDBG就接受不到信息了。起初我也困惑的很,而且在驱动当中设置int 3断点会蓝屏。后来在一个应用程序中添加了 __asm int 3这个应用程序就崩溃了。得到结论它们都是用了KdDisableDebugger函数来禁止操作系统调试了。想对应的有一个函数是 KdEnableDebugger 可以允许调试,但是很多游戏仍然很操蛋。及时你使用了KdEnableDebugger 也无法调试,它们都是不...

阅读全文>>

网上说的比较常见的4种方法: 1、通过DriverEntry传入的DriverObject参数的DriverSection成员指向LDR_DATA_TABLE_ENTRY结构,通过遍历这张表得到ntoskrnl的基址和大小 2、ZwQuerySystemInformation大法 3、搜索内存  4、利用KPCR结构 存在的问题: 1、第1种方法和第4种方法得到的结果比ZwQuerySystemInformation少一个 2、第1种方法如果输出BaseDllName是ntoskrnl.exe,如果输出FullDllName则是:\WINDOWS\s...

阅读全文>>

很多知识点可以学习 完整代码 #include <ntddk.h> #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; //仅适用于checked build版本 unsigned int NumberOfServices; unsigned char *ParamTableBase; } Serv...

阅读全文>>

任意位置hook nt函数 详细代码 #include <ntddk.h> #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; //仅适用于checked build版本 unsigned int NumberOfServices; unsigned char *ParamTableBase; } ServiceDescriptorTa...

阅读全文>>

详细代码,直接看吧 #include <ntddk.h> #pragma pack(1) typedef struct ServiceDescriptorEntry { unsigned int *ServiceTableBase; unsigned int *ServiceCounterTableBase; //仅适用于checked build版本 unsigned int NumberOfServices; unsigned char *ParamTableBase; } ServiceDescriptorTableEntry...

阅读全文>>