• 当前位置:首页>>编程开发A>>安全防御>>API实现了regedt32修改注册表权限
  • API实现了regedt32修改注册表权限
  • 昨天想找个system权限修改注册表的例子,感谢eva写了一个 不过小榕ca.exe的源代码到底公布了没有 我还真是忘记了


    不要老是盯着SYSTEM权限。SYSTEM固然通行无阻,但访问SAM这种事有admin足够了。
    虽然admin不能直接访问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(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
    );
  • 上一篇:Superhei 的 tips2
    下一篇:在命令行下远程安装终端服务