c语言读取windows注册表,C\C++修改windows注册表

(三个程序system()调用可以查看帮助,有很详细的说明;C++的函数没试验;spawnl()函数有点像是Linux下的exec().)

可以用于病毒开机自启动的注册表位置:

[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]

[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServices]

[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce]

[HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServicesOnce]

[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]

[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce]

[HKCU\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServices]

以上只是默认运行的部分注册表位置,其实还可以在系统启动外客(shell explorer.exe)后添加病毒路径等方法,同样可以实现通过注册表开机自动运行。

2.关联文件类型

在注册表HKEY_CLASS_ROOT下可以更改文件类型的默认启动程序,比如更改EXE文件的启动程序为你写的病毒,那么每当运行exe程序时,病毒将替代程序运行

例:

到注册表HKEY_CLASS_ROOT\\exefile\\shell\\open\\command下,修改“默认”修改为c:\\windows

\\svchost.exe \"%1\" %*,那么以后运行.exe文件时只会运行c:\\windows\\svchost.exe

3.程序修改注册表的方法:

(1)使用REG命令添加修改注册表:

REG命令使用方法具体可以在命令提示符中输入REG /?和通过参阅Windows命令帮助查看

主要格式:

REG Operation [Parameter List]

Operation   [ QUERY   | ADD     | DELETE   | COPY     |

SAVE     | LOAD   | UNLOAD   | RESTORE |

COMPARE | EXPORT | IMPORT ]

例:向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe

reg add \"HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\" /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f

调用reg命令的方法主要有两中,一种是使用C语言中的system函数,另一种是使用C语言中的spawn类函数(如函数spawnl)。具体system和spawnl使用方法请参见其它资料,这里仅举一例:

例:用system函数通过reg命令向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe

system("reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\\

/v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f");

评论与小结:使用REG命令添加注册表可以达到直接调用系统命令(工具)来修改注册表的目的,如果被杀毒软件拦截也只会显示修改操作的发出来自

C:\\WINDOWS\\system32\\reg.exe,使病毒不容易被寻找到。但由于REG命令属于控制台命令,因此调用时有黑色的控制台出

现,是病毒的征兆被感染用户发现,不利于病毒隐藏。

(2)使用WindowsAPI添加修改注册表

WindowsAPI为我们提供了大约25个函数。他提供了对注册表的读取,写入,删除,以及打开注册表及键值时所有函数这些函数有:

RegCloseKey

RegConnectRegistry

RegCreateKey

RegCreateKeyEx

RegDeleteKey

RegDeleteVale

RegEnumKey

RegFlushKey

RegGetKeySecurity(Windows9X不适用)

RegLoadKey

RegNotifyChangeKeyValue(Windows9X不适用)

RegOpenKey

RegOpenKeyEx

RegQueryInfoKey

RegQueryValue

RegQueryValueEx

RegReplaceKey

RegRestoreKey(Windows9X不适用)

RegSaveKey

RegSetKeySecurity(Windows9X不适用)

RegSetValue

RegSetValueEx

RegUnLoadKey

等,函数的使用需要在32位C编译器下调用windows.h文件,同(1)中一样,具体函数的使用方法请参见其它资料,这里仅举一例.

例:通过WindowsAPI向HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run中添加名为SVCHOST的键值,键值内容为C:\\Windows\\system\\SVCHOST.exe

TRegistry* Registry;

Registry=new TRegistry();

Registry->RootKey=HKEY_LOCAL_MACHINE;

Registry->OpenKey(\"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run\",FALSE);

Registry->WriteString(\"SVCHOST\",\"C:\\\\Windows\\\\system\\\\SVCHOST.exe\");WriteString()

Registry->CloseKey();

评论与小结:使用WindowsAPI添加注册表可以达到直接无须调用系统命令(工具)就可以修改注册表的目的,但如果被杀毒软件拦截会显示修改操作来自

的病毒体文件所在的路径,使病毒容易被寻找到。但由于WindowsAPI可以“悄悄”的完成修改,在前台没有任何显示,因此调用时如果未被拦截,很难被

感染用户发觉,利于病毒隐藏。

(3)使用REGEDIT添加修改注册表

REGEDIT就是注册表编辑器,但它其实有一个/s的参数,只要调用regedit /s 注册表文件,就可以在后台无提示的修改注册表。同样需要用spawnl函数调用它。

例:通过spawnl函数调用regedit向HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加名为wjview32的键值,键值内容为C:\windows\wjview32.com /s

char

*regadd={"REGEDIT4\n\n[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run]\n\"wjview32\"=\"C:\\windows\\wjview32.com

/s\""};

FILE *output;

if((output=fopen("$$$$$","w"))!=NULL)

{

fprintf(output,regadd);

fclose(output);

spawnl(1,"c:\\\\windows\\\\regedit.exe"," /s $$$$$",NULL);

出处:http://hi.baidu.com/honch4/blog/item/49f686e85dbaf635b90e2dca.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值