windows黑客编程系列(十):自删除技术

功能技术模块

病毒木马的入侵并潜伏在用户计算机上总是有着某种目的,例如获取用户隐私的办公文件或是账号密码,或是控制肉鸡,或是进行加密磁盘文件然后进行勒索。

自删除技术

所谓自删除,就是程序能够自己删除自己,自删除功能对于病毒木马来说同样是至关重要的。它通常在完成目标任务后,就会删除自身,从用户计算机上小时,不留下蛛丝马迹。或者说现在的病毒木马都有反调试,反监控,反虚拟机的功能,一旦发现自身被动态调试或者在虚拟机中运行,就会启动自毁程序。

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;
}
发布了308 篇原创文章 · 获赞 222 · 访问量 31万+

猜你喜欢

转载自blog.csdn.net/AcSuccess/article/details/105741052