功能技术模块
病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如获取用户隐私的办公文件或是账号密码,或是控制肉鸡,或是进行加密磁盘文件然后进行勒索。
自删除技术
所谓自删除,就是程序能够自己删除自己,自删除功能对于病毒木马来说同样是至关重要的。它通常在完成目标任务后,就会删除自身,从用户计算机上小时,不留下蛛丝马迹。或者说现在的病毒木马都有反调试,反监控,反虚拟机的功能,一旦发现自身被动态调试或者在虚拟机中运行,就会启动自毁程序。
WINAPI
MoveFileEx
使用各种移动选项移动现有的文件或目录
函数声明:
BOOL WINAPI MoveFileExW(
_In_ LPCWSTR lpExistingFileName,
_In_opt_ LPCWSTR lpNewFileName,
_In_ DWORD dwFlags
);
参数说明:
- lpExistingFileName:指向一个存在的文件或者文件夹的字符串指针
- lpNewFileName:指向一个还未存在的文件或者文件夹的字符串指针
- dwFlags:可以是一个或多个下述常数。
值 | 含义 |
---|---|
MOVEFILE_REPLACE_EXISTING | 覆盖已存在的目标文件,如果源文件和目标文件指定的是同一目录,则不能使用该标志 |
MOVEFILE_COPY_ALLOWED | 如果目标移动到不同的卷上,则函数通过复制后删除源文件的方法来模拟移动文件的操作 |
MOVEFILE_DELAY_UNTIL_REBOOT | 该参数可以删除系统之前启动的页面文件。需要有管理员权限才可使用。 |
MOVEFILE_WRITE_THROUGH | 这个标记允许函数在执行完文件移动操作后返回,否则不等文件移动完毕就直接返回。 |
MOVEFILE_CREATE_HARDLINK | 系统保留,留作以后使用 |
MOVEFILE_FAIL_IF_NOT_TRACKABLE | 如果源文件是一个LINK文件,但是文件在移动后不能够跟踪到,则函数执行失败 |
返回值:
- 执行成功,返回TRUE
- 失败返回FALSE
如果指定MOVEFILE_DELAY_UNTIL_REBOOT标记,且目标文件指定为空路径,则系统启动时将删除源文件
编码实现
- 删除文件的路径开头需要加上“\?\”前缀。
- 需要以管理员权限执行。
- 需要重启操作。
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
#include <tlhelp32.h>
#include <atlimage.h>
BOOL remove_self(wchar_t *pszFilename)
{
wchar_t szTemp[MAX_PATH] = L"\\\\?\\";
lstrcat(szTemp, pszFilename);
//printf("%ws", szTemp);
BOOL bRet = MoveFileEx(szTemp, NULL, MOVEFILE_DELAY_UNTIL_REBOOT);
return bRet;
//return TRUE;
}
int main()
{
wchar_t pszFilename[MAX_PATH] = L"C:\\Users\\gmz-pc\\Desktop\\ConsoleApplication1.exe";
BOOL flag = remove_self(pszFilename);
if (flag == TRUE)
{
printf("delete succeed!\n");
}
else
{
printf("delete error!\n");
}
return 0;
}