自启动技术-快速启动目录

本文最后更新于:2021-08-09 晚上

快速启动目录

Windows带有快速启动目录,将需要自启的程序放入其中,就可以实现开机自启。

函数说明

SHGetSpecialFolderPath

获取指定的系统路径

1
2
3
4
5
6
BOOL SHGetSpecialFolderPath(
HWND hwndOwner,
LPSTR lpszPath,
int nFolder,
BOOL fCreate
);

hwndOwner:窗口所有者句柄

lpszPath:返回路径的缓冲区,该缓冲区带下至少为MAX_PATH

nFolder:系统路径的CSIDL标识。

含义
CSIDL_BITBUCKET 桌面\回收站
CSIDL_CONTROLS 我的电脑\控制面板
CSIDL_DESKTOP 桌面
CSIDL_DRIVES 我的电脑
CSIDL_STARTUP 开始菜单\程序\启动
CSIDL_SYSTEM SYSTEM文件夹
CSIDL_WINDOWS WINDOWS目录

fCreate:指示文件夹不存在时是否要创建。为FALSE时则不创建,否则创建。

返回值:成功TRUE;失败FALSE。

具体实现

获取系统的快速启动目录,然后将需要自启的程序放入快速启动目录中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <Windows.h>
#include <shlobj.h>
BOOL AutoRun(char* lpszSrcFilePath, char* lpszDestFileName) {
char szStartUpPath[MAX_PATH] = { 0 };
char szDestFilePath[MAX_PATH] = { 0 };
//获取快速启动目录
if (SHGetSpecialFolderPathA(NULL, szStartUpPath, CSIDL_STARTUP, TRUE) == FALSE) {
printf("获取系统路径失败\n");
return FALSE;
}
//将数据写入指定的缓冲区
wsprintfA(szDestFilePath, "%s\\%s", szStartUpPath, lpszDestFileName);
//将文件内容拷贝到缓冲区
if (CopyFileA(lpszSrcFilePath, szDestFilePath, FALSE) == FALSE) {
printf("向快速启动目录写入失败\n");
return FALSE;
}
return TRUE;
}
int main() {
if (AutoRun("C:\\Users\\b1ackie\\Desktop\\TestApc.exe", "TestApc.exe") == FALSE) {
printf("失败\n");
system("pause");
exit(-1);
}
printf("成功\n");
system("pause");
return 0;
}

在物理机中运行一下此程序,火绒马上提醒

在虚拟机中运行此程序,提示成功,然后到快速启动目录中查看,即可看到自启程序

使用火绒剑进行查看,可以看到在windows的快速启动目录下,有TestApc.exe程序。

参考

参考《Windows黑客编程技术详解》一书