前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >奇技淫巧技术-注册表的操作

奇技淫巧技术-注册表的操作

作者头像
IBinary
发布2020-04-13 11:29:14
3870
发布2020-04-13 11:29:14
举报
文章被收录于专栏:逆向技术逆向技术

.reg文件使用以及操作

一丶Reg文件

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

1.reg文件的导入

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

如下:

如果要导入 就用

Reg Import

代码语言:javascript
复制
reg import xxx.reg

具体可以查看cmd命令

2.reg文件的导出

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

3.regedit导入方式

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

代码语言:javascript
复制
regedit /s xxx.reg

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

这个没有尝试.

4.总结

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

然后你懂的.

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

C++ 如果使用

代码语言:javascript
复制
system("reg import xxx.reg")

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

代码语言:javascript
复制
string cwtCommands = "cmd /c  ";
cwtCommands += cwtCommand;
WinExec(cwtCommands.c_str(), SW_HIDE);

其中 cwtCommand = 你构造的命令

例如

代码语言:javascript
复制
"reg import xxx.reg"

三丶 注册表改名

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

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

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

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

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

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

使用方法

代码语言:javascript
复制
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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-04-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • .reg文件使用以及操作
  • 一丶Reg文件
    • 1.reg文件的导入
      • 2.reg文件的导出
        • 3.regedit导入方式
          • 4.总结
          • 二丶C++ 代码导入reg文件黑屏问题
          • 三丶 注册表改名
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档