[原创开源]Win64反蓝屏【效果不好】
本帖子部分代码由comodo的某工程师提供,特此感谢。PatchGuard引发蓝屏的方式:KeBugCheckEx(0x109,0x0,0x0,0x0,0x7);
我的反蓝屏方法:
让执行蓝屏的线程在KeBugCheckEx中死循环。这种方法的缺点很严重,就是极耗费CPU(几乎独占一个核心)。
PVOID GetFunctionAddr(PCWSTR FunctionName)
{
UNICODE_STRING UniCodeFunctionName;
RtlInitUnicodeString( &UniCodeFunctionName, FunctionName );
return MmGetSystemRoutineAddress( &UniCodeFunctionName );
}
void WPOFFx64()
{
UINT64 cr0=__readcr0();
cr0 &= 0xfffffffffffeffff;
__writecr0(cr0);
_disable();
}
void WPONx64()
{
UINT64 cr0=__readcr0();
cr0 |= 0x10000;
_enable();
__writecr0(cr0);
}
VOID AntiBugCheck_1() //SUCCESS
{
//KeBugCheckEx
//fffff800`03c81f00 48894c2408 mov qword ptr ,rcx
UCHAR fuckcode={0};
KIRQL OldIrql;
ULONG jmpcode;
//get address
PVOID bcaddr = GetFunctionAddr(L"KeBugCheckEx");
//set memory
memset(fuckcode,0x90,210);
memset((PVOID)((UINT64)fuckcode+201),0xE9,1);
//calc shellcode
jmpcode=(ULONG)((ULONG64)bcaddr-((ULONG64)bcaddr+201)-5);
memcpy(fuckcode+202,&jmpcode,4);
//patch
WPOFFx64();
OldIrql = KeRaiseIrqlToDpcLevel();
RtlMoveMemory(bcaddr,fuckcode,210);
KeLowerIrql(OldIrql);
WPONx64();
}
其实,可以调用KeWaitForSingleObject来解决永远死循环的问题,而不用NOP+JMP,提示完毕。 好帖子要顶一下。 感谢分享 Tesla.Angela 发表于 2011-8-9 13:45 static/image/common/back.gif
其实,可以调用KeWaitForSingleObject来解决永远死循环的问题,而不用NOP+JMP,提示完毕。 ...
感謝提示 let me kankan let me kankan
页:
[1]