找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 16926|回复: 17

有驱动锁定IE主页的源码吗?

 火... [复制链接]

1

主题

5

回帖

0

精华

初来乍到

积分
14
发表于 2011-8-19 11:50:18 | 显示全部楼层 |阅读模式
有驱动锁定IE主页的源码吗?

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-8-19 13:42:29 | 显示全部楼层
这还不简单?
一般来说直接ZwSetValueKey就行了。

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-8-19 14:19:51 | 显示全部楼层
Tesla.Angela 发表于 2011-8-19 13:42
这还不简单?
一般来说直接ZwSetValueKey就行了。

亲,这种方法无法锁定哦~

47

主题

265

回帖

8

精华

核心会员

积分
10349
发表于 2011-8-19 14:25:54 | 显示全部楼层
Tesla.Angela 发表于 2011-8-19 13:42
这还不简单?
一般来说直接ZwSetValueKey就行了。

亲,hook的话,貌似好可以锁

2

主题

32

回帖

0

精华

铜牌会员

积分
287
发表于 2011-8-19 14:58:34 | 显示全部楼层
汗。。。这玩意难点就是加载驱动啦。能加载驱动。爱怎么搞就怎么搞吧。
http://hi.baidu.com/zhouws1011/blog

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-8-19 20:13:59 | 显示全部楼层
ywledoc 发表于 2011-8-19 14:19
亲,这种方法无法锁定哦~

什么意思?

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2011-8-20 15:40:51 | 显示全部楼层
求解释!~~

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

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

QQ
发表于 2011-8-21 01:28:59 | 显示全部楼层
ZwSetValueKey是设置注册表值,改主页的必经之路.

HOOK了它,就能让其它进程对它的调用都由你控制,是否允许.
我就是嗷嗷叫的老马了......

0

主题

117

回帖

0

精华

铜牌会员

积分
258
发表于 2011-8-23 08:18:25 | 显示全部楼层
不如hook ZwOpenKey好用

1

主题

5

回帖

0

精华

初来乍到

积分
14
 楼主| 发表于 2011-8-23 11:37:47 | 显示全部楼层
我现在用的 是用time 控件循环刷新 写入注册表 能被360或者其他软件拦截 能有效的躲过拦截的 代码吗?

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-9-10 22:10:20 | 显示全部楼层
jackqiang 发表于 2011-8-23 11:37
我现在用的 是用time 控件循环刷新 写入注册表 能被360或者其他软件拦截 能有效的躲过拦截的 代码吗?

很明显是不行的。只会把你自己的程序搞死。

6

主题

84

回帖

2

精华

钻石会员

积分
2923
发表于 2011-9-10 22:43:43 | 显示全部楼层
你能想到的36蛋也能想到

你想加载驱动。。貌似不行吧,过的了他的驱动检测吗

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-9-11 00:09:18 | 显示全部楼层
sunshinebean 发表于 2011-9-10 22:43
你能想到的36蛋也能想到

你想加载驱动。。貌似不行吧,过的了他的驱动检测吗

哈哈,笑死我了,怎么创造出新名词“36蛋”了!!!

6

主题

84

回帖

2

精华

钻石会员

积分
2923
发表于 2011-9-11 12:49:05 | 显示全部楼层
Tesla.Angela 发表于 2011-9-11 00:09
哈哈,笑死我了,怎么创造出新名词“36蛋”了!!!

360最后那个0不也可以喊蛋嘛

以前喜欢叫二百五

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-9-11 14:30:37 | 显示全部楼层
sunshinebean 发表于 2011-9-11 12:49
360最后那个0不也可以喊蛋嘛

以前喜欢叫二百五

二百五、三百六、丧六灵等等名字都是群众耳熟能详的。;P

1

主题

48

回帖

0

精华

金牌会员

积分
978
发表于 2011-9-19 13:46:03 | 显示全部楼层
我也不知道

9

主题

210

回帖

0

精华

初来乍到

积分
904
发表于 2011-9-21 19:27:30 | 显示全部楼层
baidu得到:
先修改主页,加载驱动就基本OK了吧!!!!
  1. *++

  2. HookZwSetValueKey

  3. 编译以及调试环境:

  4. Win2K3-sp1 DDK 2003 sp1

  5. By : M80

  6. --*/

  7. 实现类似反黑精英的注册表启动项实时监控(我这里只实现了针对某个键值).

  8. 测试的参数硬编码的,需要的朋友可以自己修改成用户态下交互的功能.

  9. #include "ntddk.h"
  10. #include <stdio.h>

  11. extern NTSTATUS
  12. ObQueryNameString(void *,
  13. void *,
  14. int size,
  15. int *);
  16. extern NTSYSAPI NTSTATUS NTAPI
  17. ZwSetValueKey( IN HANDLE KeyHandle,
  18. IN PUNICODE_STRING ValueName,
  19. IN ULONG TitleIndex OPTIONAL,
  20. IN ULONG Type,
  21. IN PVOID Data,
  22. IN ULONG DataSize);
  23. // 声明原有函数
  24. typedef NTSTATUS (*REALZWSETVALUEKEY)(
  25. IN HANDLE KeyHandle,
  26. IN PUNICODE_STRING ValueName,
  27. IN ULONG TitleIndex OPTIONAL,
  28. IN ULONG Type,
  29. IN PVOID Data,
  30. IN ULONG DataSize
  31. );
  32. // 定义一个原函数指针
  33. REALZWSETVALUEKEY RealZwSetValueKey;
  34. // 定义HOOK注册表设置内容的函数
  35. NTSTATUS HookZwSetValueKey(
  36. IN HANDLE KeyHandle,
  37. IN PUNICODE_STRING ValueName,
  38. IN ULONG TitleIndex OPTIONAL,
  39. IN ULONG Type,
  40. IN PVOID Data,
  41. IN ULONG DataSize
  42. );
  43. // SYSTEMSERVICE 的定义
  44. typedef struct ServiceDescriptorEntry
  45. {
  46.     unsigned int * ServiceTableBase;        // 关键字段, 指向系统服务分发例程的基地址
  47.     unsigned int * ServiceCounterTableBase;
  48.     unsigned int NumberOfServices;
  49.     unsigned char * ParamTableBase;
  50. }
  51. ServiceDescriptorTableEntry_t, * PServiceDescriptorTableEntry_t;
  52. __declspec(dllimport) ServiceDescriptorTableEntry_t KeServiceDescriptorTable;
  53. #define SYSTEMSERVICE(_function) KeServiceDescriptorTable.ServiceTableBase[ *(PULONG)((PUCHAR)
  54. _function+1)]

  55. void Driver_Unload(PDRIVER_OBJECT ) ;
  56. PVOID GetPointer( HANDLE ) ;
  57. NTSTATUS HookZwSetValueKey(
  58. IN HANDLE ,
  59. IN PUNICODE_STRING ,
  60. IN ULONG TitleIndex ,
  61. IN ULONG ,
  62. IN PVOID ,
  63. IN ULONG ) ;

  64. void Driver_Unload(PDRIVER_OBJECT DriverObject)
  65. {
  66.     UNICODE_STRING usDosDeviceName;
  67.     //恢复原来的函数指针
  68.     (REALZWSETVALUEKEY)(SYSTEMSERVICE(ZwSetValueKey)) = RealZwSetValueKey;
  69.     DbgPrint("HideFile_Unload Called\r\n");
  70.     RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\MonitorReg");
  71.     IoDeleteSymbolicLink(&usDosDeviceName);
  72.     IoDeleteDevice(DriverObject->DeviceObject);
  73. }


  74. //驱动的入口函数
  75. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath)
  76. {
  77.     NTSTATUS    NtStatus = STATUS_SUCCESS;
  78.     PDEVICE_OBJECT pDeviceObject = NULL;
  79.     UNICODE_STRING usDriverName, usDosDeviceName;
  80.     DbgPrint("DriverEntry Called\r\n");
  81.     RtlInitUnicodeString(&usDriverName, L"\\Device\\MonitorReg");
  82.     RtlInitUnicodeString(&usDosDeviceName, L"\\DosDevices\\MonitorReg");
  83.     NtStatus = IoCreateDevice(pDriverObject,
  84.     0,
  85.     &usDriverName,
  86.     FILE_DEVICE_UNKNOWN,
  87.     FILE_DEVICE_SECURE_OPEN,
  88.     FALSE,
  89.     &pDeviceObject);
  90.     if (STATUS_SUCCESS == NtStatus)
  91.     {
  92.         pDriverObject->DriverUnload = Driver_Unload;
  93.     }
  94.     IoCreateSymbolicLink(&usDosDeviceName, &usDriverName);
  95.     // 保存 ZwSetValueKey 函数的入口地址
  96.     RealZwSetValueKey = (REALZWSETVALUEKEY)(SYSTEMSERVICE(ZwSetValueKey));
  97.     (REALZWSETVALUEKEY)(SYSTEMSERVICE(ZwSetValueKey)) = HookZwSetValueKey;
  98.    
  99.     return NtStatus ;
  100. }


  101. PVOID GetPointer( HANDLE handle )
  102. {
  103.     PVOID         pKey;
  104.     if(!handle)
  105.    return NULL;
  106.     // ObReferenceObjectByHandle函数来获得这个Handle对应的FileObject, 得到的指针转换成文件对象的
  107. 指针
  108.     if( ObReferenceObjectByHandle( handle, 0, NULL, KernelMode, &pKey, NULL ) != STATUS_SUCCESS )
  109.     {
  110.         pKey = NULL;
  111.     }
  112.     return pKey;
  113. }


  114. //HOOK设置注册表键值的函数
  115. NTSTATUS HookZwSetValueKey(
  116. IN HANDLE KeyHandle,
  117. IN PUNICODE_STRING ValueName,
  118. IN ULONG TitleIndex OPTIONAL,
  119. IN ULONG Type,
  120. IN PVOID Data,
  121. IN ULONG DataSize)
  122. {
  123.     NTSTATUS rc;
  124.     UNICODE_STRING *pUniName; //定义得到修改注册表的UNI路径
  125.     ULONG actualLen;
  126.     ANSI_STRING keyname,
  127.     akeyname,
  128.     m_keyname,
  129.     m_akeyname;       //定义得到修改注册表的UNI路径
  130.     PVOID pKey;
  131.     RtlUnicodeStringToAnsiString( &akeyname, ValueName, TRUE);
  132.     RtlUnicodeStringToAnsiString( &m_akeyname, ValueName, TRUE);
  133.     RtlUpperString(&akeyname,&m_akeyname);
  134.     RtlFreeAnsiString(&m_akeyname);
  135.     // 得到文件对象的指针
  136.     if( pKey = GetPointer( KeyHandle))
  137.     {
  138.         // 分配内存
  139.         pUniName = ExAllocatePool( NonPagedPool, 512*2+2*sizeof(ULONG));
  140.         pUniName->MaximumLength = 512*2;
  141.         // 保证空间内没有不干净的数据
  142.         memset(pUniName,0,pUniName->MaximumLength);
  143.       
  144.         if( NT_SUCCESS( ObQueryNameString( pKey, pUniName, 512*2, &actualLen) ) )
  145.         {
  146.             RtlUnicodeStringToAnsiString( &keyname, pUniName, TRUE);
  147.             keyname.Buffer=_strupr(keyname.Buffer);
  148.             akeyname.Buffer=_strupr(akeyname.Buffer);
  149.             RtlUnicodeStringToAnsiString( &m_keyname, pUniName, TRUE);
  150.             RtlUpperString(&keyname,&m_keyname);
  151.             RtlFreeAnsiString(&m_keyname);
  152.             if (strcmp
  153. (keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN") == 0)
  154.             {
  155.                 if(strcmp(akeyname.Buffer,"TE_REGPROTECT") ==0 )   
  156.                 {
  157.                     DbgPrint("试图修改键值:%s的数据,已被拦截",akeyname.Buffer);
  158.                     RtlFreeAnsiString(&akeyname);
  159.                     RtlFreeAnsiString(&keyname);
  160.                     // 释放内存
  161.                     if(pUniName)
  162.                     {
  163.                         ExFreePool(pUniName);
  164.                     }
  165.                     return 0;
  166.                 }
  167.             }
  168.         }
  169.     }
  170.     RtlFreeAnsiString(&akeyname);
  171.     rc=RealZwSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize);
  172.     // 释放内存
  173.     if(pUniName)
  174.     {
  175.         ExFreePool(pUniName);
  176.     }
  177.     return (rc);
  178. }

复制代码

857

主题

2632

回帖

2

精华

管理员

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

积分
36130
发表于 2011-9-21 22:22:11 | 显示全部楼层
oopww 发表于 2011-9-21 19:27
baidu得到:
先修改主页,加载驱动就基本OK了吧!!!!

用CmRegisterCallback来监控也不错!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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