找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 18100|回复: 31

[半原创]发个注册表保护的源码 - TaRegProtectDemo

 火... [复制链接]

38

主题

199

回帖

2

精华

钻石会员

积分
3408
发表于 2010-4-23 20:14:37 | 显示全部楼层 |阅读模式
本帖最后由 HoviDelphic 于 2010-4-25 11:03 编辑

无聊的注册表键值保护,能轻易在Ring 3下绕过。
不过网上键值保护的代码貌似比较少,所以还是公布出来吧!
仅仅Hook了三个函数:NtSetValueKey、NtDeleteValueKey、NtRestoreKey。
要完全保护键值,请参考卡巴斯基2010的SSDT HOOK列表。
KERNEL HOOK这东西,估计很快就没有市场了,因为x64不准HOOK。
破PatchGuard确实可以,不过估计没有人会用于商业软件,因为不稳定。

  1. PVOID GetPointer( HANDLE handle )
  2. {
  3.     PVOID pKey;
  4.     if(!handle)
  5.   return NULL;
  6.     if(ObReferenceObjectByHandle( handle, 0, NULL, KernelMode, &pKey, NULL ) != STATUS_SUCCESS )
  7.         pKey = NULL;
  8.     return pKey;
  9. }
  10. NTSTATUS fake_NtSetValueKey
  11. (
  12.     IN HANDLE KeyHandle,
  13.     IN PUNICODE_STRING ValueName,
  14.     IN ULONG TitleIndex OPTIONAL,
  15.     IN ULONG Type,
  16.     IN PVOID Data,
  17.     IN ULONG DataSize
  18. )
  19. {
  20. PVOID pKey;
  21. UNICODE_STRING *pUniName;
  22. ULONG actualLen;
  23. ANSI_STRING keyname;
  24. NTSTATUS status;
  25. UNICODE_STRING uStrValueName,OurKey;
  26. if(pKey = GetPointer( KeyHandle))
  27. {
  28.   //分配内存
  29.   pUniName = ExAllocatePool(NonPagedPool, 1024*2);
  30.   pUniName->MaximumLength = 512*2;
  31.   //将pUniName里的内容清空
  32.   memset(pUniName,0,pUniName->MaximumLength);
  33.   //得到注册表项的路径
  34.   if(NT_SUCCESS(ObQueryNameString(pKey, pUniName, 512*2, &actualLen)))
  35.   {
  36.    RtlUnicodeStringToAnsiString(&keyname, pUniName, TRUE);
  37.    keyname.Buffer=_strupr(keyname.Buffer);//大写所有字母
  38.    //判断是不是Run项
  39.    if (strcmp(keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN") == 0)
  40.    {
  41.     RtlInitUnicodeString( &OurKey, L"test" );
  42.     if( RtlCompareUnicodeString(ValueName,&OurKey,TRUE)==0 )
  43.     {
  44.      //释放内存
  45.      RtlFreeAnsiString(&keyname);
  46.      if(pUniName) ExFreePool(pUniName);
  47.      return STATUS_ACCESS_DENIED;
  48.     }
  49.    }
  50.   }
  51. }
  52. RtlFreeAnsiString(&keyname);
  53. if(pUniName) ExFreePool(pUniName);
  54. return Old_NtSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize);
  55. }
  56. NTSTATUS fake_NtDeleteValueKey(IN HANDLE  KeyHandle,IN PUNICODE_STRING  ValueName)
  57. {
  58. PVOID pKey;
  59. UNICODE_STRING *pUniName;
  60. ULONG actualLen;
  61. ANSI_STRING keyname;
  62. NTSTATUS status;
  63. UNICODE_STRING uStrValueName,OurKey;
  64. if(pKey = GetPointer( KeyHandle))
  65. {
  66.   //分配内存
  67.   pUniName = ExAllocatePool(NonPagedPool, 1024*2);
  68.   pUniName->MaximumLength = 512*2;
  69.   //将pUniName里的内容清空
  70.   memset(pUniName,0,pUniName->MaximumLength);
  71.   //得到注册表项的路径
  72.   if(NT_SUCCESS(ObQueryNameString(pKey, pUniName, 512*2, &actualLen)))
  73.   {
  74.    RtlUnicodeStringToAnsiString(&keyname, pUniName, TRUE);
  75.    keyname.Buffer=_strupr(keyname.Buffer); //大写所有字母
  76.    //判断是不是Run项
  77.    if (strcmp(keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN") == 0)
  78.    {
  79.     RtlInitUnicodeString( &OurKey, L"test" );
  80.     if( RtlCompareUnicodeString(ValueName,&OurKey,TRUE)==0 )
  81.     {
  82.      //释放内存
  83.      RtlFreeAnsiString(&keyname);
  84.      if(pUniName) ExFreePool(pUniName);
  85.      return STATUS_ACCESS_DENIED;
  86.     }
  87.    }
  88.   }
  89. }
  90. RtlFreeAnsiString(&keyname);
  91. if(pUniName) ExFreePool(pUniName);
  92. return Old_NtDeleteValueKey(KeyHandle,ValueName);
  93. }
  94. NTSTATUS fake_NtRestoreKey(IN HANDLE KeyHandle, IN HANDLE FileHandle, IN ULONG RestoreOption)
  95. {
  96. PVOID pKey;
  97. UNICODE_STRING *pUniName;
  98. ULONG actualLen;
  99. ANSI_STRING keyname;
  100. NTSTATUS status;
  101. UNICODE_STRING uStrValueName,OurKey;
  102. if(pKey = GetPointer( KeyHandle))
  103. {
  104.   //分配内存
  105.   pUniName = ExAllocatePool(NonPagedPool, 1024*2);
  106.   pUniName->MaximumLength = 512*2;
  107.   //将pUniName里的内容清空
  108.   memset(pUniName,0,pUniName->MaximumLength);
  109.   //得到注册表项的路径
  110.   if(NT_SUCCESS(ObQueryNameString(pKey, pUniName, 512*2, &actualLen)))
  111.   {
  112.    RtlUnicodeStringToAnsiString(&keyname, pUniName, TRUE);
  113.    keyname.Buffer=_strupr(keyname.Buffer); //大写所有字母
  114.    //判断是不是Run项
  115.    if (strcmp(keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN") == 0)
  116.    {
  117.     //释放内存
  118.     RtlFreeAnsiString(&keyname);
  119.     if(pUniName) ExFreePool(pUniName);
  120.     return STATUS_ACCESS_DENIED;
  121.    }
  122.   }
  123. }
  124. RtlFreeAnsiString(&keyname);
  125. if(pUniName) ExFreePool(pUniName);
  126. return Old_NtRestoreKey(KeyHandle,FileHandle,RestoreOption);
  127. }
复制代码

经测试,仅对regedit.exe和某菜鸟ARK的注册表键值修改、删除有效。

HookNtSetValueKey NtDeleteValueKey NtRestoreKey保护自启动项.rar

89.6 KB, 阅读权限: 11, 下载次数: 15

售价: 10 水晶币  [记录]

如果附件无法下载,请点击这里

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-4-23 20:16:26 | 显示全部楼层
沙发不留。
破解方案:
游客,如果您要查看本帖隐藏内容请回复
如果附件无法下载,请点击这里

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-4-23 20:20:59 | 显示全部楼层
板凳 我来看看破解方案~

6

主题

196

回帖

0

精华

铜牌会员

菜鸟

积分
52
发表于 2010-4-23 20:21:26 | 显示全部楼层
额 这也叫......

38

主题

199

回帖

2

精华

钻石会员

积分
3408
 楼主| 发表于 2010-4-23 22:50:28 | 显示全部楼层
我发现到了周末底层区的人气就特别旺。
如果附件无法下载,请点击这里

76

主题

375

回帖

0

精华

铜牌会员

积分
231
发表于 2010-4-24 18:34:43 | 显示全部楼层
看看绕过方案
本网站最菜的人 该用户已被删除
发表于 2010-4-24 20:06:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-4-24 22:05:51 | 显示全部楼层
X菜鸟是谁啊!?呵呵1···回复 2# HoviDelphic

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-4-24 22:07:32 | 显示全部楼层
为什么阅读权限是11!???

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-4-25 10:47:02 | 显示全部楼层
回复 8# oopww


只可意会,不可言传。
我发现他还很喜欢玩进程,他的工具的特色就是进程保护和强杀,玩了几年都不厌。
如果我再写ARK,进程部分绝对不是重点。

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-4-25 10:48:09 | 显示全部楼层
为什么阅读权限是11!???
oopww 发表于 2010-4-24 22:07


额,你不能下吗?多发点帖子嘛!要不,请老马帮你加点分?

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-4-25 10:51:04 | 显示全部楼层
某菜鸟ARK。。。。。。
其实是某神牛懒得写HIVE,然后从网上完全COPY了一个
本网站最菜的人 发表于 2010-4-24 20:06



    在这个世界上,没有“懒得”这一说。

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2010-4-25 10:52:12 | 显示全部楼层
对了,xiaoly99好像放过一个Inline Hook模板,OOPWW你去找找,自己增补一下代码就可以了。

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-4-25 12:44:46 | 显示全部楼层
好的回复 13# Tesla.Angela

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-4-25 12:45:31 | 显示全部楼层
怎么我权限突然到了20!!
     :victory:

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-4-25 19:26:31 | 显示全部楼层
那还不好呀?嘿嘿.
我就是嗷嗷叫的老马了......

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2010-4-26 13:20:55 | 显示全部楼层
非常感谢老马 嘿嘿。。。

280

主题

203

回帖

0

精华

版主

积分
1808
发表于 2010-4-27 19:29:14 | 显示全部楼层
我也想下载
本网站最菜的人 该用户已被删除
发表于 2010-5-29 22:24:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

23

主题

117

回帖

1

精华

银牌会员

积分
400
发表于 2010-6-27 11:51:33 | 显示全部楼层
这个在驱动里有专门的设置回调的函数吧。。。。我的建议是,有正统的九阴真经时,尽量不要用hook这种邪门功夫,容易走火入魔

23

主题

117

回帖

1

精华

银牌会员

积分
400
发表于 2010-6-27 11:52:48 | 显示全部楼层
结果是把好好的九阴真经练成了九阴白骨爪

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2010-6-27 12:07:37 | 显示全部楼层
记得有人说过,正规方式编程难度要大些,HOOK之类的由于只需要改个指针,相对容易,所以比较多的人当然是使用简单的方案,这毕竟是在写驱动.

不过好象这些简单的方案由于没有按系统的结构去工作,所以貌似有兼容性问题......比如硬编码啥的.....
我就是嗷嗷叫的老马了......

4

主题

16

回帖

0

精华

初来乍到

积分
0
发表于 2010-7-10 21:23:27 | 显示全部楼层
学习
www.daruisoft.com

1

主题

25

回帖

0

精华

铜牌会员

积分
97
发表于 2010-7-12 00:19:04 | 显示全部楼层
看破解

0

主题

20

回帖

0

精华

初来乍到

积分
0
发表于 2010-7-23 21:31:27 | 显示全部楼层
不是解析hive?

0

主题

4

回帖

0

精华

初来乍到

积分
43
发表于 2010-9-29 09:10:00 | 显示全部楼层
学习

0

主题

5

回帖

0

精华

初来乍到

积分
19
发表于 2011-10-11 13:16:31 | 显示全部楼层
好东西啊呵呵

0

主题

5

回帖

0

精华

初来乍到

积分
19
发表于 2011-10-11 13:16:48 | 显示全部楼层
我想看看

0

主题

5

回帖

0

精华

初来乍到

积分
19
发表于 2011-10-11 13:17:11 | 显示全部楼层
我要学习学习

0

主题

17

回帖

0

精华

铜牌会员

积分
104
发表于 2011-11-16 16:00:23 | 显示全部楼层
参观学习 拿分

3

主题

29

回帖

0

精华

贵宾会员

积分
1977
发表于 2015-5-22 00:51:52 | 显示全部楼层
Thanks!

30

主题

693

回帖

0

精华

钻石会员

积分
2815
发表于 2015-5-22 11:56:23 | 显示全部楼层
感谢楼主的分享精神
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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