前段时间在自学 windows api,学习了大概一个月,对一些常用api还算有一定了解,本人对一些木马,病毒 比较感兴趣,所以也经常搜一些木马病毒的编程技巧。下面是我自己写的一个.c文件,是用 windows 提供的 能操作注册表的 api,使自己的.exe文件 实现开机自动运行。
下面是 实现代码。。。
#include
#include
#include
#define MAX 60
int main(){
LONG IRet;
DWORD dwDispostion=REG_CREATED_NEW_KEY;
HKEY HRoot=HKEY_CURRENT_USER;
HKEY mykey;
char *SubKey="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
char fPath[MAX];//存储当前文件的路径
IRet=RegCreateKeyEx(
HRoot, // handle to an open key
SubKey, // address of subkey name
0, // reserved
NULL, // address of class string
REG_OPTION_NON_VOLATILE, // special options flag
KEY_ALL_ACCESS, // desired security access
NULL, // address of key security structure
&mykey, // address of buffer for opened handle
&dwDispostion // address of disposition value buffer
);
if(IRet!=ERROR_SUCCESS) { printf("falied 0 \n"); return -1; }//不存在就退出
GetModuleFileName(NULL, fPath, MAX );//得到当前主模块的路径。。。存放在fPath
IRet= RegSetValueEx(
mykey, // handle to key to set value for
"runself",
0, // address of subkey name
REG_SZ, // type of value
fPath, // address of value data
strlen(fPath) // size of value data
);
if (IRet==ERROR_SUCCESS)
{ printf("%d %s config success\n", strlen(fPath) ,fPath);
RegCloseKey(mykey);
}
else
printf("falied 1\n");
Sleep(3000); //为了使开机时看到效果 所以Sleep
return 0;
}
程序运行之后,输入msconfig 查看本机的启动项,,发现.exe已经在里面了。。。
当然也有更简单的方法,,使用c++提供的CRegkey类。。他是一个ATL类
实现代码如下
#include
using namespace std;
#include
#include
#define MAX 60
int main(){
CRegKey mykey;
HKEY KRoot HKEY_CURRENT_USER;
LONG IRet;
DWORD dwDispostion=REG_CREATED_NEW_KEY;
char subkey[]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
char fPath[MAX];//存储当前文件的路径
GetModuleFileName(NULL, fPath, MAX );
mykey.Create(KRoot,subkey);
IRet=mykey.SetValue("autorun",fPath);
if (IRet==ERROR_SUCCESS)
{ cout<
mykey.Close();
}
else
cout<
return 0;
}
//Microsoft的ATL库中提供了一个CRegKey类,用这个类可以很方便地对注册表进行各种操作。
关于上面函数的使用 ,我就不在这细讲了,,因为msdn里,已经讲的很详细了。。。