找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 8752|回复: 6

[原创开源]Win64反蓝屏【效果不好】

[复制链接]

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2011-4-12 18:48:03 | 显示全部楼层 |阅读模式
本帖子部分代码由comodo的某工程师提供,特此感谢。


PatchGuard引发蓝屏的方式:
  1. KeBugCheckEx(0x109,0x0,0x0,0x0,0x7);
复制代码


我的反蓝屏方法:
让执行蓝屏的线程在KeBugCheckEx中死循环。这种方法的缺点很严重,就是极耗费CPU(几乎独占一个核心)。

  1. PVOID GetFunctionAddr(PCWSTR FunctionName)
  2. {
  3.         UNICODE_STRING UniCodeFunctionName;
  4.         RtlInitUnicodeString( &UniCodeFunctionName, FunctionName );
  5.         return MmGetSystemRoutineAddress( &UniCodeFunctionName );   
  6. }

  7. void WPOFFx64()
  8. {
  9.         UINT64 cr0=__readcr0();
  10.         cr0 &= 0xfffffffffffeffff;
  11.         __writecr0(cr0);
  12.         _disable();
  13. }

  14. void WPONx64()
  15. {
  16.         UINT64 cr0=__readcr0();
  17.         cr0 |= 0x10000;
  18.         _enable();
  19.         __writecr0(cr0);
  20. }

  21. VOID AntiBugCheck_1() //SUCCESS
  22. {
  23.         //KeBugCheckEx
  24.         //fffff800`03c81f00 48894c2408    mov qword ptr [rsp+8],rcx
  25.         UCHAR fuckcode[210]={0};
  26.         KIRQL OldIrql;
  27.         ULONG jmpcode;
  28.         //get address
  29.         PVOID bcaddr = GetFunctionAddr(L"KeBugCheckEx");
  30.         //set memory
  31.         memset(fuckcode,0x90,210);
  32.         memset((PVOID)((UINT64)fuckcode+201),0xE9,1);
  33.         //calc shellcode
  34.         jmpcode=(ULONG)((ULONG64)bcaddr-((ULONG64)bcaddr+201)-5);
  35.         memcpy(fuckcode+202,&jmpcode,4);
  36.         //patch
  37.         WPOFFx64();
  38.         OldIrql = KeRaiseIrqlToDpcLevel();
  39.         RtlMoveMemory(bcaddr,fuckcode,210);
  40.         KeLowerIrql(OldIrql);
  41.         WPONx64();
  42. }
复制代码

录像.7z

3.71 MB, 下载次数: 5333

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
 楼主| 发表于 2011-8-9 13:45:33 | 显示全部楼层
其实,可以调用KeWaitForSingleObject来解决永远死循环的问题,而不用NOP+JMP,提示完毕。

12

主题

144

回帖

0

精华

铜牌会员

积分
281
发表于 2011-11-1 08:28:08 | 显示全部楼层
好帖子要顶一下。

0

主题

94

回帖

0

精华

钻石会员

积分
3031
发表于 2013-2-18 09:52:02 | 显示全部楼层
感谢分享

7

主题

414

回帖

1

精华

铂金会员

积分
2173
发表于 2013-4-11 16:49:24 | 显示全部楼层
Tesla.Angela 发表于 2011-8-9 13:45
其实,可以调用KeWaitForSingleObject来解决永远死循环的问题,而不用NOP+JMP,提示完毕。 ...

感謝提示

0

主题

51

回帖

0

精华

铜牌会员

积分
97
发表于 2014-5-9 20:32:48 | 显示全部楼层
let me kankan

0

主题

51

回帖

0

精华

铜牌会员

积分
97
发表于 2014-5-9 20:33:06 | 显示全部楼层
let me kankan
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表