記事ディレクトリ
自己始動テクノロジー
ウイルス型トロイの木馬にとって重要なことは、それをどのように破壊するかではなく、どのように実行するかです。ウイルスのトロイの木馬は、メモリにロードされて実行を開始したときにのみ、その破壊力を本当に発揮できます。それ以外の場合、それは単なる通常のディスクファイルであり、プライバシーがコンピュータユーザーのデータにわずかな脅威をもたらすことはありません。
自動起動テクノロジーには、主に4つのタイプがあります。
- レジストリ
- クイックスタートディレクトリ
- スケジュールされたタスク
- システムサービス
この記事では主にクイックスタートディレクトリを紹介します
クイックスタートディレクトリ
クイックスタートディレクトリは、システムデータを変更する必要がなく、実装が最も簡単な、シンプルで自己起動的な方法です。
プログラムがクイックスタートフォルダに配置されている限り、システムは起動時に対応するプログラムを自動的にロードして実行し、ブート時に自動起動する機能を実現します。
クイックスタートディレクトリは固定ディレクトリではなく、各コンピュータのクイックスタートディレクトリは異なりますが、プログラムは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バイトです。
- lpFmt:printfの最初のパラメーターと同様に、出力の形式を制御します
- 可変パラメーター
CopyFile
関数プロトタイプ
BOOL CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists );
パラメータの説明
- lpExistingFileName:ソースファイル名
- lpNewFileName:ターゲットファイル名
- bFailIfExists:TRUEの場合、ターゲットファイルが存在すると実行は失敗します。FALSEの場合、ファイルは再書き込みされます
戻り値
- 実行が成功した場合はTRUE
- それ以外の場合はFALSE
エンコーディングの実装
電卓プログラムをクイックスタートディレクトリに置きます。基本的な考え方は次のとおりです。
- システムのクイックスタートディレクトリを取得する
- クイックスタートディレクトリ+ exeのパスを作成します
- PEファイルをクイックスタートディレクトリにコピーします。
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <windows.h>
#include <stdio.h>
#include "resource.h"
#include "ConsoleApplication1.h"
#include <tchar.h>
#include <cstring>
#include <shlobj.h>
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;
}
ランニング効果チャート
Tinderが毒を直接報告し、起動オプションを変更しようとしています
[許可]をクリックすると、このディレクトリに電卓プログラムが見つかります。