windows黑客编程系列(五):添加快速启动目录之自启动

文章目录

    • 自启动技术
      • 快速启动目录
        • WINAPI介绍
          • SHGetSpecialFolderPath
          • wsprintf
          • CopyFile
        • 编码实现
        • 运行效果图

自启动技术

对于一个病毒木马来说,重要的不是如何进行破坏,还有如何执行。病毒木马只有加载到内存中开始运行,才能够真正体现破坏力。否则,它就只是一个普通的磁盘文件,对于计算机用户的数据,隐私构不成丝毫的威胁。

自启动技术主要包括四种:

  • 注册表
  • 快速启动目录
  • 计划任务
  • 系统服务

本文中主要介绍快速启动目录

快速启动目录

快速启动目录是一种不用修改任何系统数据,并且实现起来最为简单的开机自启动方法。

只要把程序放入快速启动文件夹中,系统在启动时就会自动加载并运行相应的程序,实现开机自启动功能。

快速启动目录并不是一个固定目录,每台计算机的快速启动目录都不相同,但是程序可以通过WINDOWS API来获取这个目录。

WINAPI介绍

SHGetSpecialFolderPath

函数原型

BOOL SHGetSpecialFolderPath(
HWND hwndOwner,
LPTSTR lpszPath,
int nFolder,
BOOL fCreate)

参数解释

  • hwndOwner:窗口所有者的句柄
  • lpszPath:返回路径的缓冲区,大小为MAX_PATH
  • nFolder:系统路径的CSIDL标识
  • fCreate:指示文件夹不存在时是否创建,FALSE为不创建。

返回值

  • 执行成功,返回TRUE
  • 否则返回FALSE
wsprintf

函数原型

int __cdecl wsprintf(
_Out_ LPTSTR lpOut,
_In_ LPCTSTR lpFmt,
_In_...);

参数说明

  • lpOut:接收缓冲区格式化输出. 缓冲区最大为 1,024 bytes
  • lpFmt:控制输出的格式,类似于printf的第一个参数
  • 可变参数
CopyFile

函数原型

BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists );

参数说明

  • lpExistingFileName:源文件名
  • lpNewFileName:目标文件名
  • bFailIfExists:如果为TRUE,一旦目标文件存在,则执行失败,为FALSE,则会改写文件

返回值

  • TRUE为成功执行
  • 否则为FALSE

编码实现

将计算器程序放入快速启动目录,基本思路如下:

  • 获取系统快速启动目录
  • 构造快速启动目录+exe的路径
  • 复制PE文件进入快速启动目录
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 
#include "resource.h"
#include "ConsoleApplication1.h"
#include 
#include 
#include 

BOOL Auto_Run(LPCWSTR srcFilename, LPCWSTR destFilename)
{
	wchar_t pszExePath[MAX_PATH] = { 0 };
	wchar_t dest_update[MAX_PATH] = { 0 };
	BOOL bRet = FALSE;
	bRet = SHGetSpecialFolderPath(NULL, pszExePath, CSIDL_STARTUP, FALSE);
	if (bRet == FALSE)
	{
		printf("file path error!\n");
		return FALSE;
	}
	printf("%ws\n", pszExePath);
	wsprintf(dest_update, L"%ws\\%ws", pszExePath, destFilename);
	printf("%ws\n", dest_update);
	printf("%ws\n", srcFilename);
	if (CopyFile(srcFilename, dest_update, FALSE) == FALSE)
	{
		printf("copy error!\n");
		return FALSE;
	}
	return TRUE;
}

int main()
{
	
	LPCWSTR srcFilename = L"C:\\Windows\\System32\\calc.exe";
	LPCWSTR destFilename = L"calc.exe";
	BOOL flag = Auto_Run(srcFilename, destFilename);
	if (flag == TRUE)
	{
		printf("success\n");
	}

	return 0;
}

运行效果图

windows黑客编程系列(五):添加快速启动目录之自启动_第1张图片

火绒直接报毒,试图更改启动选项

点击允许后,在该目录下就可以找到计算器程序了。

windows黑客编程系列(五):添加快速启动目录之自启动_第2张图片

你可能感兴趣的:(windows编程)