zoukankan      html  css  js  c++  java
  • 奇技淫巧技术-注册表的操作

    .reg文件使用以及操作

    一丶Reg文件

    首先这里不讲Winapi等一系列操作注册表的方式,只说一下 reg文件操作的方式

    1.reg文件的导入

    reg文件是可以双击进行导入的. 也可以使用CMD 命令进行导入

    如下:

    如果要导入 就用

    Reg Import

    reg import xxx.reg
    

    具体可以查看cmd命令

    2.reg文件的导出

    这里跟上面差不多,注意语法即可. 主要是 注意 /y 是可以不用提示的.

    3.regedit导入方式

    另外一种方式是使用 regedit导入

    regedit /s xxx.reg
    

    使用/s 选项 注意.reg文件. reg有人说后面有多出的4个空格.会导致导入失败或者成功

    这个没有尝试.

    4.总结

    以上所有方法.均可以使用 C++ 实现, 假设你构造好一个.reg,直接使用 普通权限就可以导入

    然后你懂的.

    二丶C++ 代码导入reg文件黑屏问题

    C++ 如果使用

    system("reg import xxx.reg")
    

    使用如上代码,会出现一个一闪而过的黑框,原因是使用了system这个函数,我们只需要改为如下即可.

    string cwtCommands = "cmd /c  ";
    cwtCommands += cwtCommand;
    WinExec(cwtCommands.c_str(), SW_HIDE);
    

    其中 cwtCommand = 你构造的命令

    例如

    "reg import xxx.reg"
    

    三丶 注册表改名

    我们知道,想要对一个key进行改名是没有提供接口的,唯一方法就是删除这个key然后重新设置.

    但是你想一下,如果需要你改名怎么办,而删除重新设置会让你写很多代码.

    虽然没有公开接口,但是我们可以使用未公开即可.

    windbg随便附加一个exe.查看 ntdll的符号

    可以看到有一个 NtRenameKey 这个函数则可以进行key改名. 如果还想要其它功能强大的函数

    那么windbg的x命令可以帮助你

    使用方法

    
    typedef struct _UNICODE_STRING
    {
        WORD Length;
        WORD MaximumLength;
        WORD* Buffer;
    } UNICODE_STRING, * PUNICODE_STRING;
    
    typedef  VOID (NTAPI* PfnRtlInitUnicodeString)
    (_Out_ PUNICODE_STRING DestinationString,
    _In_opt_ PCWSTR SourceString);
    
    PfnRtlInitUnicodeString RtlInitUnicodeString;
    
    typedef  NTSTATUS (_stdcall *PfnNtRenameKey)(
      HANDLE          KeyHandle,
      PUNICODE_STRING NewName
    );
    
    PfnNtRenameKey RenameKey;
    
    
    
    
    HMODULE hMod = NULL;
    hMod = LoadLibrary(TEXT("ntdll.dll"));
    if (hMod == NULL)
    {
    	return ;
    }
     RtlInitUnicodeString = (PfnRtlInitUnicodeString)GetProcAddress(hMod,"RtlInitUnicodeString");
     
    RenameKey = (PfnNtRenameKey)GetProcAddress(hMod,"NtRenameKey");
    
    
    
    BOOL RegChangeKey(HKEY hKey,TCHAR *szSubKey,TCHAR *NewKeyFileName)
    {
        AdjustPrivileges(TEXT("SE_BACKUP_NAME"));  //启动注册表权限
    
        DWORD dwErrorCode = ERROR_SUCCESS;
        DWORD dwFlag = REG_OPENED_EXISTING_KEY;
    
        RegCreateKeyEx(hKey,szSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL,&hKey,&dwFlag);
    
        if (hKey == 0)
        {
            return FALSE;
        }
        if (RenameKey == NULL) 
        {
            RegCloseKey(hKey);
            return FALSE;
        }
    
        //初始化UNICODE_STRING结构体,进行调用
        UNICODE_STRING uNewNameString;
        if (RtlInitUnicodeString == NULL)
        {
            RegCloseKey(hKey);
            return FALSE;
        }
        RtlInitUnicodeString(&uNewNameString,NewKeyFileName);
    
        //修改名字
        RenameKey((HANDLE)hKey,&uNewNameString);
      
    
        RegCloseKey(hKey);
    
        return TRUE;
    }
    
    
    

    详情使用可以参考博客. https://www.qingsword.com/qing/163.html

  • 相关阅读:
    大二暑期周总结(四)
    大二暑期周总结(三)
    寒假十七
    寒假十六
    寒假十五
    寒假十四
    寒假十三
    寒假十二
    寒假十一
    寒假十
  • 原文地址:https://www.cnblogs.com/iBinary/p/12675128.html
Copyright © 2011-2022 走看看