pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3062回复:12

========注册表重定向!!有代码======

楼主#
更多 发布于:2004-12-22 19:09
想做一个注册表重定向,如当有应用程序读\\Registry\\Machine\\SOFTWARE\\A时,将其定向到\\Registry\\Machine\\SOFTWARE\\B,
如何做?各位大侠给点思路。多谢!

另外有个问题:
参考REGMON,我在HookRegOpenKey中判断,如果是我HOOK的键值\\Registry\\Machine\\SOFTWARE\\A,我就这么处理:
OBJECT_ATTRIBUTES obj;
UNICODE_STRING          uRegistryPath;
WCHAR    uPath[]=L"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\B";
RtlInitUnicodeString(&uRegistryPath,uPath);
InitializeObjectAttributes(&obj,&uRegistryPath,OBJ_CASE_INSENSITIVE, NULL, NULL );
pOpenInfo=&obj;
ntstatus = RealRegOpenKey( pHandle, ReqAccess, pOpenInfo );
但总是不成功,不知道为什么?

最新喜欢:

hongsinghongsi...
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-12-22 21:00
想做一个注册表重定向,如当有应用程序读\Registry\Machine\SOFTWARE\A时,将其定向到\Registry\Machine\SOFTWARE\B,
如何做?各位大侠给点思路。多谢!

另外有个问题:
参考REGMON,我在HookRegOpenKey中判断,如果是我HOOK的键值\Registry\Machine\SOFTWARE\A,我就这么处理:
OBJECT_ATTRIBUTES obj;
UNICODE_STRING          uRegistryPath;
WCHAR    uPath[]=L"\\REGISTRY\\MACHINE\\SOFTWARE\\B";
RtlInitUnicodeString(&uRegistryPath,uPath);
InitializeObjectAttributes(&obj,&uRegistryPath,OBJ_CASE_INSENSITIVE, NULL, NULL );
pOpenInfo=&obj;
ntstatus = RealRegOpenKey( pHandle, ReqAccess, pOpenInfo );
但总是不成功,不知道为什么?

 

这个思路基本可行,你调试一下代码看是什么原因?
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-12-23 08:35
跟踪一下,返回什么错误?
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-12-23 10:03
NTSTATUS HookRegOpenKey( IN OUT PHANDLE pHandle, IN ACCESS_MASK ReqAccess,
                         IN POBJECT_ATTRIBUTES pOpenInfo )
{
    NTSTATUS                ntstatus;
    POBJECT                 regobj;
    CHAR                    fullname[MAXPATHLEN];
    PREDIR_ENTRY pEntry=NULL;
    OBJECT_ATTRIBUTES obj;
    char szTmp[256];
    UNICODE_STRING          uRegistryPath;
    WCHAR    uPath[]=L"\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\B";
   CHAR aPath[]="\\\\REGISTRY\\\\MACHINE\\\\SOFTWARE\\\\A";
   BOOLEAN bIsMy=FALSE;

   GetFullName( pOpenInfo->RootDirectory, pOpenInfo->ObjectName, fullname );

  if(_stricmp(fullname+1,aPath)==0)
  {
     sprintf(szTmp,"OpenMyKey,path:%s",fullname+1);
     WriteLog(szTmp);
     bIsMy=TRUE;
     RtlInitUnicodeString(&uRegistryPath,uPath);
    InitializeObjectAttributes(&obj,&uRegistryPath,OBJ_CASE_INSENSITIVE, NULL, NULL );
    ntstatus = RealRegOpenKey( pHandle, ReqAccess, &obj );
    //执行完后ntstatus=STATUS_ACCESS_VIOLATION,访问非法,为什么?
  }
  else
  {
     ntstatus = RealRegOpenKey( pHandle, ReqAccess, pOpenInfo );
  }

  if(bIsMy && NT_SUCCESS( ntstatus ))
  {
     sprintf(szTmp,"RegOpenKey success:%s => %x, %s",  fullname, *pHandle,ErrorString(ntstatus ));
     WriteLog(szTmp);
  }
  else if(bIsMy)
  {
     sprintf(szTmp,"RegOpenKey fail:%s => %x, %s", fullname, *pHandle,ErrorString(ntstatus ));
     WriteLog(szTmp);
  }
  if( NT_SUCCESS( ntstatus ))
  {  
        regobj = GetPointer( *pHandle );
        RegmonFreeHashEntry( regobj );
        RegmonLogHash( regobj, fullname );
        ReleasePointer( regobj );
   }
   return ntstatus;
}
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-12-23 11:00
有没有人在呀?快帮看看呀!
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-12-23 15:30
出错部分改为如下:
if(_stricmp(fullname,"HKLM\\\\software\\\\A")
{
UNICODE_STRING uRegistryPath;
WCHAR uPath[]=L"SOFTWARE\\\\B";

OBJECT_ATTRIBUTES obj;

RtlInitUnicodeString(&uRegistryPath,uPath);

pOpenInfo->ObjectName->Length=uRegistryPath.Length;
RtlMoveMemory( pOpenInfo->ObjectName->Buffer,
uRegistryPath.Buffer,
           uRegistryPath.Length);
          

InitializeObjectAttributes( &obj,
pOpenInfo->ObjectName,
pOpenInfo->Attributes,
pOpenInfo->RootDirectory,
NULL );
ntstatus = RealRegOpenKey( pHandle, ReqAccess, &obj );
}
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-12-23 15:39
或直接使用原先的pOpenInfo
if(_stricmp(fullname,"HKLM\\software\\A")
{
UNICODE_STRING uRegistryPath;
WCHAR uPath[]=L"SOFTWARE\\B";

RtlInitUnicodeString(&uRegistryPath,uPath);

pOpenInfo->ObjectName->Length=uRegistryPath.Length;
RtlMoveMemory( pOpenInfo->ObjectName->Buffer,
uRegistryPath.Buffer,
uRegistryPath.Length);
}


ntstatus = RealRegOpenKey( pHandle, ReqAccess,pOpenInfo);
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-12-23 18:01
我试了一下,open没有问题了,谢谢!
高手出招就是不一样!呵呵

但enum时还有问题,也就是当用regedit打开时,看到的键值不对
请继续关注.....
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-12-24 12:45
我试了一下,open没有问题了,谢谢!
高手出招就是不一样!呵呵

但enum时还有问题,也就是当用regedit打开时,看到的键值不对
请继续关注.....



说得很模糊,问题出在哪里?

你是EnumerateKey还是EnumerateValueKey
你跟踪一下,
有些使用的是"相对路径+handle"标识键的
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-12-28 17:38
用上述的方法,open是没问题了,但仅限于用自己的程序来open,如果用regedit来打开,每次都蓝屏!
问题一定在HookRegOpenKey函数里,但调试了两天了,还没搞定!
高手再看看吧!谢谢了!
snowStart
驱动老牛
驱动老牛
  • 注册日期2004-04-06
  • 最后登录2011-06-02
  • 粉丝0
  • 关注0
  • 积分95分
  • 威望19点
  • 贡献值177点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-12-29 08:36
篮屏信息是什么
学习,关注,交流中... [email=fengyu@163.com]Email:snowstarth@163.com[/email] [url]http://bbs.zndev.com/?a=snowStart[/url]
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-12-29 17:43
我是这么重定向的:
当有应用程序读\\Registry\\Machine\\SOFTWARE\\A时,(其中A这个键值在注册表中并不存在)将其定向到\\Registry\\Machine\\SOFTWARE\\B

我只在HookRegOpenKey和HookRegCreateKey中做了处理,处理方法同上面的方法

当应用程序以Create方式打开注册表时就会蓝屏,信息如下:
UNEXPECTED_KERNEL_MODE_TRAP
有时还居然是这个信息:
IRQL_NOT_LESS_OR_EQUAL


[编辑 -  12/29/04 by  pursuer_zhao]
pursuer_zhao
驱动牛犊
驱动牛犊
  • 注册日期2003-10-23
  • 最后登录2005-10-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-12-30 12:55
在HookRegCreateKey函数中,用与HookRegOpenKey同样的方法来处理,为什么会蓝屏呢?

KERNEL_EXPECTION_NOT_HANDLED

为什么?

游客

返回顶部