首页
社区
课程
招聘
注册表键值的保护
发表于: 2012-6-13 18:59 3641

注册表键值的保护

2012-6-13 18:59
3641
大家好,我现在要做一个保护注册表的功能, 是这样的:

假设需要保护下面这个RUN注册表项,
\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN
而这个RUN项里面有一个或者几个键值。

现在的要求是: 保护RUN注册表项和它下面的所有键值,使得它们不能被删除、不能被重命名、不能被修改。

如果我就只Hook ZwSetValueKey这个函数,可以吗?能够达到我想要的效果吗?

大家请先看Hook的ZwSetValueKey函数-----HookZwSetValueKey的代码。

NTSTATUS HookZwSetValueKey( IN HANDLE  KeyHandle,
IN PUNICODE_STRING  ValueName,
IN ULONG  TitleIndex  OPTIONAL,
IN ULONG  Type,
IN PVOID  Data,
IN ULONG  DataSize)

{

NTSTATUS rc;
UNICODE_STRING *pUniName;  //定义得到修改注册表的UNI路径
ULONG actualLen;
ANSI_STRING keyname,
             akeyname,
                m_keyname,
             m_akeyname;       //定义得到修改注册表的UNI路径

PVOID pKey;
RtlUnicodeStringToAnsiString( &akeyname, ValueName, TRUE);
RtlUnicodeStringToAnsiString( &m_akeyname, ValueName, TRUE);
RtlUpperString(&akeyname,&m_akeyname);
RtlFreeAnsiString(&m_akeyname);

DbgPrint("*******Enter HookZwSetValueKey()*******\n");

if( pKey = GetPointer( KeyHandle))
{
  pUniName = ExAllocatePool( NonPagedPool, 512*2+2*sizeof(ULONG));
  pUniName->MaximumLength = 512*2;
  if( NT_SUCCESS( ObQueryNameString( pKey, pUniName, MAXPATHLEN, &actualLen)))
  {
   RtlUnicodeStringToAnsiString( &keyname, pUniName, TRUE);
   keyname.Buffer=_strupr(keyname.Buffer);
   akeyname.Buffer=_strupr(akeyname.Buffer);
   RtlUnicodeStringToAnsiString( &m_keyname, pUniName, TRUE);
   RtlUpperString(&keyname,&m_keyname);
   RtlFreeAnsiString(&m_keyname);

   if (strcmp(keyname.Buffer,"\\REGISTRY\\MACHINE\\SOFTWARE\\MICROSOFT\\WINDOWS\\CURRENTVERSION\\RUN") == 0)
   {
  
        return STATUS_ACCESS_DENIED;       
     
   }
   RtlFreeAnsiString(&keyname);
  }

   ObDereferenceObject(pKey);

}
RtlFreeAnsiString(&akeyname);

DbgPrint("调用 rc=RealZwSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize);\n");

rc=RealZwSetValueKey(KeyHandle,ValueName,TitleIndex,Type,Data,DataSize);

DbgPrint("*******Leave HookZwSetValueKey()*******\n");
return rc;

}

如果不可以只Hook掉ZwSetValueKey这个函数,那么请问您,我应该Hook哪几个注册表函数。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 84
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我只会这样做
打开注册表,找到所在位置,右键权限

上传的附件:
2012-6-13 20:43
0
游客
登录 | 注册 方可回帖
返回
//