微软在64位系统中强制加入了一项PatchGuard技术,它的作用是防止操作系统自身代码及一些关键数据被Hook或修改,当操作系统检测到这些修改时会引发一个蓝屏错误。
...
微软在64位系统中强制加入了一项PatchGuard技术,它的作用是防止操作系统自身代码及一些关键数据被Hook或修改,当操作系统检测到这些修改时会引发一个蓝屏错误。
...
老规矩,高手莫进,方便自己日后查阅。
在开启PAE的情况下,转虚拟地址80871f24到物理地址。
kd> .formats 80871f24
Evaluate expression:
Hex: 80871f24
Decimal: -2138628316
Octal: 20041617444
Binary: 10000000 10000111 00011111 00100100
老规矩,高手莫进。方便自己日后查询
来看到执行到KiTrap01时的栈数据,首先下一个硬件断点ba e1 NtCreateThread,使KiTrap01函数能执行到,然后在KiTrap01下一个bp断点,千万不要下硬件断点,不然重入。
当执行到KiTrap01时,看栈内存,如下:
kd> dds esp
b9a4cd34 8094ad3a nt!NtCreateThread
b9a4cd38 00000008 cs段寄存器
b9a4cd3c 00000283 EFLags
给自己做个记号,方便日后查找。
在ring0中 fs:[0]指向KPCR,等于地址ffdff000,KPCR 叫CPU控制区(Processor Control Region),在线程调试时需要用到
在ring3中 fs:[0]指向TEB:
kd> dt _teb
nt!_TEB
+0x000 NtTib : _NT_TIB
+0x01c EnvironmentPointer : Ptr32 Void
+0x020 ClientId : _CLIENT_ID
+0x028 ActiveRpcHandle : Ptr32 Void
+0x02c ThreadLocalStoragePointer : Ptr32 Void
+0x030 ProcessEnvironmentBlock : Ptr32 _PEB
...
都知道一般情况下从Ring3进入Ring0是通过sysenter或int 2e。下面以win2k3为例分析下Ring3进入Ring0栈变化,本文不讲具体代码。
分别在ntdll!KiFastSystemCall和nt!KiFastCallEntry以及nt!KiFastCallEntry中call SSDT的地方下线程条件断点,观察栈变化。
...我们的xx软件中,有一个功能是代码校验,它会定时对内存计算Hash,并与原始的hash比较,检查是否被修改。
前两天有个用户来反馈这个功能一直误报,根据我们的经验一般是木马或外挂引起的,但是我们仔仔细细检查了他的系统,一切正常。后来不得不建议他重装系统,没想到的是重装系统后不装任何软件问题依旧。
于是我们专门为他做了一个特制的版本,这个版本会把异常时的内存数据完整dump到文件里,后来我们比较了异常前后的dump文件,发现就一个字节的差异,准确的说是一个数据位的差异,而且每次出异常时被修改的位置是不同的,这个诡异的问题纠结了我们团队整整几天。
...工作中Windbg用的比较多,在这方面慢慢摸索了几年,也略有心得,但正因为是一个人摸索的,很多方法可以能不是最好的方法。所以希望能和大家一起交流分享。
为吸引人气,在群创建初期,提供无偿分析dump服务(非工作时间)。
引用群内介绍“分享Windbg调试技术,dump分析技术,Windbg插件开发,以及各种软件排错技术。”
群QQ:169225649
...
今天拿到一个蓝屏文件,反映运行xx的时候打开中国银行登录页面就会蓝屏。
分析了一下,中国银行的控件写的实在太不专业的。
我们的XX Hook了SSDT中的NtOpenProcess,跳到88e06b40,
HProtect+0x1ab40:
88e06b40 e91ba6572f jmp Protector+0x1160 (b8381160)
88e06b45 e96ccf0200 jmp HProtect+0x47ab6 (88e33ab6) //这行是永远不应该执行到的。