纯理论的看完了三篇PG的文章,还没看代码,还没入手调试.第三代是vista的版本
win7 sp1的PG肯定跟uniformed的文章不一样了。回头再研究了。反正到win7的时候貌似已经没有人写一大堆文档在内核里对抗pg了,直接给nt打patch了= =
对于x64也是刚接触没几天,资料也不是很系统,还需要进一步学习。
原文见http://uninformed.org/?v=8&a=5&t=sumry
这个也可以参考 http://www.codeproject.com/Articles/28318/Bypassing-PatchGuard-3
PG3
机制改进
1.有多条线路在系统启动是开启,有时有一条,有时两条或多条
2.PG的dpc异常不再直接由_C_specific_handler处理,而是一段汇编代码随机化了异常地址,异常状态码等内容,然后调用_C_specific_handler,不再让你轻松过滤。
;
; EXCEPTION_DISPOSITION
; KiCustomAccessHandler8 (
; /* rcx */ IN PEXCEPTION_RECORD ExceptionRecord,
; /* rdx */ IN ULONG64 EstablisherFrame,
; /* r8 */ IN OUT PCONTEXT ContextRecord,
; /* r9 */ IN OUT struct _DISPATCHER_CONTEXT* DispatcherContext
; );
KiCustomAccessHandler8 proc near
test [rcx+_EXCEPTION_RECORD.ExceptionFlags], 66h
loc_14009B4C7:
jnz short retpoint
rdtsc
; Randomize ExceptionInformation[ 1 ]
; ( This is the "referenced address" for
; an access violation exception.)
;
; ( Note that rax is not set to any<