如何编程实现 注册表的提权,期待高手解决,必结分?

sharkly 2009-05-30 10:39:26
如题:
主要是实现用户的克隆,通过注册表操作可实现。
先打开regedt32,HKEY_LOCAL_MACHINE\SAM\SAM,把当前用户提权到system,
然后打开regedit32 HKEY_LOCAL_MACHINE\SAM\SAM,就可见用户了,
但,怎么编程实现呢,google了好久没发现方法,期待高手解决。
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
mLee79 2009-05-31
  • 打赏
  • 举报
回复
我怎么Google下就有了. 偶觉得物理拷贝 $sysroot/config/sam 再离线分析最简单。


#include <Windows.h>
#include <Aclapi.h>
#pragma comment (lib,"Advapi32.lib")

void main()
{
DWORD dwRet;
LPSTR SamName = "MACHINE\\SAM\\SAM";
PSECURITY_DESCRIPTOR pSD = NULL;
PACL pOldDacl = NULL;
PACL pNewDacl = NULL;
EXPLICIT_ACCESS ea;
HKEY hKey = NULL;

// 获取SAM主键的DACL
dwRet = GetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, &pOldDacl, NULL, &pSD);
if (dwRet != ERROR_SUCCESS)
{
printf("GetNamedSecurityInfo Error: %d\n", dwRet);
goto FreeAndExit;
}

// 创建一个ACE,允许Everyone完全控制对象,并允许子对象继承此权限
ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
BuildExplicitAccessWithName(&ea, "Everyone", KEY_ALL_ACCESS, SET_ACCESS,
SUB_CONTAINERS_AND_OBJECTS_INHERIT);

// 将新的ACE加入DACL
dwRet = SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl);
if (dwRet != ERROR_SUCCESS)
{
printf("SetEntriesInAcl Error: %d\n", dwRet);
goto FreeAndExit;
}

// 更新SAM主键的DACL
dwRet = SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, pNewDacl, NULL);
if (dwRet != ERROR_SUCCESS)
{
printf("SetNamedSecurityInfo Error: %d\n", dwRet);
goto FreeAndExit;
}

// 打开SAM的子键
dwRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SAM\\SAM\\Domains\\Account\\Users\\000001F4",
0, KEY_ALL_ACCESS, &hKey);
if (dwRet != ERROR_SUCCESS)
{
printf("RegOpenKeyEx Error: %d\n", dwRet);
goto FreeAndExit;
}

printf("Open SAM Subkey Successfully.\n");

FreeAndExit:
if (hKey) RegCloseKey(hKey);
if (pNewDacl) LocalFree(pNewDacl);
// 还原SAM主键的DACL
if (pOldDacl) SetNamedSecurityInfo(SamName, SE_REGISTRY_KEY, DACL_SECURITY_INFORMATION,
NULL, NULL, pOldDacl, NULL);
if (pSD) LocalFree(pSD);
return;
}






Treazy 2009-05-31
  • 打赏
  • 举报
回复
基本上会用到的API为

RegCreateKeyEx
RegDeleteKey
RegOpenKeyEx
RegQueryValueEx
RegSetValueEx
RegCloseKey

详细使用直接MSDN吧
sharkly 2009-05-31
  • 打赏
  • 举报
回复
ok,多谢。
liliangbao 2009-05-30
  • 打赏
  • 举报
回复
你是想获取系统注册的用户这个意思吗?
光宇广贞 2009-05-30
  • 打赏
  • 举报
回复
顶一个。
……听起来……挺炫的……

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧