Delphi 读写注册表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi 读写注册表相关的知识,希望对你有一定的参考价值。
用Delphi 怎么创建删除 修改 注册表中的所有类型的值?假设我现在要在下 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft新建一个 new项,删除一个del项.新建一个字符串值 名称为 Str 值为abc新建一个dword值 名称为 Dwo 值为 cba新建一个二进制值 名称为 two 值为 acb请给出这个例子.当然最好用函数写,读写注册表,直接传参数.
给你几个函数,分别是读写字符串与二进制值:在单元文件中加入Registry
//读取注册表 字符串
function FindRegKeyString(Param_RootKey:HKey;Param_CurrentKey,Param_KeyItem:String):String;
var
MyRegistry:TRegistry;
begin
MyRegistry:=TRegistry.Create;
with MyRegistry do
begin
RootKey:=Param_RootKey;
if OpenKey(Param_CurrentKey,False)=True then
begin
try
Result:=ReadString(Param_KeyItem);
except
Result:=\'\';
end;
CloseKey();
end
else
Result:=\'\';
Free;
end;
end;
//读取注册表,二进制
function FindRegKeyInteger(Param_RootKey:HKey;Param_CurrentKey,Param_KeyItem:String):Integer;
var
MyRegistry:TRegistry;
begin
MyRegistry:=TRegistry.Create;
with MyRegistry do
begin
RootKey:=Param_RootKey;
if OpenKey(Param_CurrentKey,False)=True then
begin
try
Result:=ReadInteger(Param_KeyItem);
except
Result:=0;
end;
CloseKey();
end
else
Result:=0;
Free;
end;
end;
//写进注册表,字符串
procedure WriteRegKeyString(Param_RootKey:HKey;Param_CurrentKey,Param_KeyItem,Param_KeyString:String);
var
MyRegistry:TRegistry;
begin
MyRegistry:=TRegistry.Create;
with MyRegistry do
begin
RootKey:=Param_RootKey;
if OpenKey(Param_CurrentKey,True)=True then
begin
try
WriteString(Param_KeyItem,Param_KeyString);
except
Application.Messagebox(MSG_REGWRITEERROR,MSG_ERROR,MB_ICONSTOP);
end;
CloseKey();
end
else
Application.Messagebox(MSG_REGWRITEERROR,MSG_ERROR,MB_ICONSTOP);
Free;
end;
end;
//写入注册表 二进制
procedure WriteRegKeyInteger(Param_RootKey:HKey;Param_CurrentKey,Param_KeyItem:String;Param_KeyInteger:Integer);
var
MyRegistry:TRegistry;
begin
MyRegistry:=TRegistry.Create;
with MyRegistry do
begin
RootKey:=Param_RootKey;
if OpenKey(Param_CurrentKey,True)=True then
begin
try
WriteInteger(Param_KeyItem,Param_KeyInteger);
except
Application.Messagebox(MSG_REGWRITEERROR,MSG_ERROR,MB_ICONSTOP);
end;
CloseKey();
end
else
Application.Messagebox(MSG_REGWRITEERROR,MSG_ERROR,MB_ICONSTOP);
Free;
end;
end; 参考技术A 你可以使用 REGISTRY的类 声明一个 TREGISTRY的对象 就可以使用函数了 DELPHI自身有支持注册表的类的
注册表与木马——注册表读写
木马是什么?
木马(网络程序) = 客户端程序(控制端) + 服务端(被控端)
服务端程序开启远程后门
客户端使用Telnet进行远程控制
服务端程序需要在每次电脑开机时运行,这就需要在注册表中添加开机启动。
注册表:
木马的自启动,在Windows启动时,自动加载。
注册表编辑器 : RegEdit (一个有关Windows的巨大的数据库)
有关注册表关于开机启动的键值可以自行百度。(除了最基础的3种,其实expleror.exe这个进程所在的键值也是病毒木马经常用来实现自启动的位置)
接下来是Windows关于注册表读写的方法
注册表内部结构:
Key -> subkey -> value -> 名称,类型,数据
读写函数:
RegCreateKey() | RegCreateKeyEx()
RegOpenKey() | RegOpenKeyEx()
RegQueryValue() | RegQueryValueEx()
RegDeleteKey() | RegDeleteKeyEx()
RegCloseKey() |
(分为新旧两种)
读取实例 读取CPU信息 :
1 #include<stdio.h> 2 #include<windows.h> 3 #include<iostream> 4 #include <tchar.h> 5 using namespace std ; 6 7 int main(){ 8 HKEY hkey ; 9 TCHAR p[64] ; 10 long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0"),0,KEY_QUERY_VALUE,&hkey) ; 11 if(ret==ERROR_SUCCESS){ 12 // 打开成功 13 cout << "Open !" << endl ; 14 DWORD size = sizeof(p) ; 15 ret = RegQueryValueEx(hkey,_T("ProcessorNameString"),NULL,NULL,(LPBYTE)p,&size); 16 if(ret==ERROR_SUCCESS){ 17 // 读取成功 18 cout << "Read !" << endl ; 19 cout << p << endl; 20 }else { 21 cout << "Read error !" << endl ; 22 } 23 }else { 24 cout << "Open error !" << endl ; 25 } 26 return 0 ; 27 }
运行结果:
写入实例 :
接上CPU信息读取方法,在同一 subkey 下写入键值 hello : helloRegedit
代码如下:
1 #include<stdio.h> 2 #include<windows.h> 3 #include<iostream> 4 #include <tchar.h> 5 using namespace std ; 6 7 int main(){ 8 HKEY hkey ; 9 TCHAR p[64] ; 10 long ret = RegOpenKeyEx(HKEY_LOCAL_MACHINE,_T("HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0"),0,KEY_QUERY_VALUE,&hkey) ; 11 if(ret==ERROR_SUCCESS){ 12 // 打开成功 13 cout << "Open !" << endl ; 14 DWORD size = sizeof(p) ; 15 ret = RegQueryValueEx(hkey,_T("ProcessorNameString"),NULL,NULL,(LPBYTE)p,&size); 16 if(ret==ERROR_SUCCESS){ 17 // 读取成功 18 cout << "Read !" << endl ; 19 cout << p << endl; 20 ret = RegCreateKey(HKEY_LOCAL_MACHINE,_T("HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\0"),&hkey); 21 if(ret==ERROR_SUCCESS){ 22 ret = RegSetValueEx(hkey,_T("hello"),0,REG_SZ,(const BYTE*)("helloRegedit"),12); 23 if(ret==ERROR_SUCCESS){ 24 // 写入成功 25 cout << "Write Ok !" 26 }else { 27 // 写入失败 28 cout << "Write filed !" 29 } 30 } 31 }else { 32 cout << "Read error !" << endl ; 33 } 34 }else { 35 cout << "Open error !" << endl ; 36 } 37 return 0 ; 38 }
运行结果:
可以发现已经写入了注册表中,利用注册表的读写,可以使木马的自启动,隐藏用户等操作很容易实现
以上是关于Delphi 读写注册表的主要内容,如果未能解决你的问题,请参考以下文章