阅读:1716回复:14
谁会隐藏注册表中的一个键值
大家好啊,谁能提供一个隐藏注册表中的指定键值的DEMO啊。感激不尽。
|
|
最新喜欢:aasa2
|
沙发#
发布于:2005-01-12 01:50
可以看看ROOTKIT的代码!
那里有 |
|
|
驱动老牛
|
板凳#
发布于:2005-01-12 09:34
参考REGMON NATIVE HOOK
|
|
地板#
发布于:2005-01-12 14:00
问题是找不到这一类的ROOTKIT啊,谁能给一个下载的地址。谢谢了啊
|
|
|
地下室#
发布于:2005-01-12 14:43
www.rootkit.com
|
|
5楼#
发布于:2005-01-12 20:44
www.rootkit.com找不到啊。只有进程一类的隐藏,没发现有注册表的。只找到隐藏注册表的EXE文件,没代码
|
|
|
6楼#
发布于:2005-01-13 06:39
在本站下一个regmon的源码, HOOK所有reg相关的操作, 把你希望隐藏的过滤掉就可以了.
toad |
|
7楼#
发布于:2005-01-20 23:44
问题是我找不到regmon的源码,我太想要了。我只能找到regmon 4.0的,可这个在XP下运行不了,也不知哪儿有4.22或以上版本的
|
|
|
8楼#
发布于:2005-01-21 08:24
看看这里吧
www.xfocus.net |
|
|
9楼#
发布于:2005-01-21 08:33
我昨天花了两个小时,做成功了。哈哈。不是很难,自己搞吧
|
|
|
10楼#
发布于:2005-01-21 11:59
我昨天花了两个小时,做成功了。哈哈。不是很难,自己搞吧 看看你的程序? 这是俺的,不过仅限于在2K下 |
|
|
11楼#
发布于:2005-01-23 16:08
我只是使用regmon修改了一下。和你相比,我差的远了。呵呵
|
|
|
12楼#
发布于:2005-01-28 00:03
哎。要是有源码就好了。真不幸。。你们虽然花俩小时。而我俩月估计也不行。郁闷哦。。。。
|
|
|
13楼#
发布于:2005-01-28 09:56
问题是我找不到regmon的源码,我太想要了。我只能找到regmon 4.0的,可这个在XP下运行不了,也不知哪儿有4.22或以上版本的 XP下运行不了,是因为CR0引起的写保护问题,在REGMON的HookRegistry和UnHookRegistry函数的头和尾里加上下面两个函数,保证XP的问题药到病除: void DisableProtection() { __asm { mov eax,cr0 mov CR0VALUE,eax and eax,0fffeffffh mov cr0,eax } } void EnableProtection() { __asm { mov eax,CR0VALUE mov cr0,eax } } 其中CROVALUE是自己定义的变量。 |
|
|
14楼#
发布于:2005-01-31 16:55
ULONG WClntDrvRegAccess(char *szKeyName, char *szValueName)
{ ULONG bPass = TRUE; unsigned long i = 0; //if(szValueName) // DbgPrint("WClntDrv: 1 (%s)(%s)\n", szKeyName, szValueName); //else // DbgPrint("WClntDrv: 1 (%s)()\n", szKeyName); if(g_pCtrlReg) { DWORD dwOffset = sizeof(ULONG) * 2; char szBuf[MAX_PATH +1]; char szBuf2[MAX_PATH +1]; for(i = 0; i < g_pCtrlReg->nRegs; i++) { memset(szBuf, 0, sizeof(szBuf)); memset(szBuf2, 0, sizeof(szBuf2)); PFILE_REG_KEY_NAME_PROTECT pRegKeyProtect = (PFILE_REG_KEY_NAME_PROTECT)((char*)g_pCtrlReg + dwOffset); if(pRegKeyProtect->KeyNameLength > 0) { sprintf(szBuf, "%.*s", pRegKeyProtect->KeyNameLength, pRegKeyProtect->KeyName); if(pRegKeyProtect->KeyValueLen > 0) { sprintf(szBuf2, "%.*s", pRegKeyProtect->KeyValueLen, pRegKeyProtect->KeyName + pRegKeyProtect->KeyNameLength); } //DbgPrint("WClntDrv: 2 (%s:%s)\n", szBuf, szBuf2); if(szValueName == NULL && pRegKeyProtect->KeyValueLen == 0) { if(strstr(szKeyName, szBuf)) return FALSE; } else if(szValueName != NULL && pRegKeyProtect->KeyValueLen != 0) { if(strstr(szKeyName, szBuf)) if(!stricmp(szValueName, szBuf2)) return FALSE; } } if(pRegKeyProtect->NextEntryOffset == 0) break; dwOffset += pRegKeyProtect->NextEntryOffset; } return TRUE; } return bPass; } NewZwCreateKey( OUT PHANDLE pKeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN ULONG TitleIndex, IN PUNICODE_STRING Class OPTIONAL, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL ) { MUTEX_WAIT(g_RegMutex ); ulRet = WClntDrvRegAccess(fullname, NULL); MUTEX_RELEASE(g_RegMutex ); if(!ulRet) { return STATUS_ACCESS_DENIED; } ................. } |
|