記事ディレクトリ
機能技術モジュール
ウイルスによるトロイの木馬の侵入とユーザーのコンピューターへの潜入には、ユーザーのプライバシーオフィスファイルやアカウントパスワードの取得、ブロイラーの制御、ディスクファイルの暗号化とその後の強要など、常に何らかの目的があります。
プロセス走査
プロセストラバーサルとは、ユーザープロセスやシステムプロセスなど、コンピューターシステムで実行されているすべてのプロセスに関する情報を取得することを指します。プロセス情報を取得することで、ソフトウェアの強制終了プロセスがあるかどうか、使用可能なプロセスがあるかどうか、仮想マシンで実行されているかどうか、さらにはユーザーの作業環境を分析することさえできます。したがって、システムプロセス情報の取得は、利用できないアイコン機能です。
この記事では、プロセストラバーサルを実現するために最も広く使用されているプロセススナップショットテクノロジーを紹介します。
WIN API
CreateToolhelp32Snapshot
プロセスがスナップショットを作成するために使用する、指定されたプロセス、ヒープ、モジュール、およびスレッドのプロセス情報を取得します
関数宣言:
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD, dwFlags,
DWORD, th32ProcessID)
パラメータの説明:
- dwFlags:スナップショットに含まれるシステムコンテンツを指定します。このパラメーターは、次の値(定数)の1つ以上を使用できます。
価値 | 意味 |
---|---|
TH32CS_INHERIT | スナップショットハンドルが継承可能であることを宣言します |
TH32CS_SNAPALL | システム内のすべてのプロセスとスレッドをスナップショットに含める |
TH32CS_SNAPHEAPLIST | スナップショットにth32ProcessIDで指定されたプロセスのすべてのヒープを含める |
TH32CS_SNAPMODULE | スナップショットにth32ProcessIDで指定されたプロセスのすべてのモジュールを含める |
TH32CS_SNAPPROCESS | システム内のすべてのプロセスをスナップショットに含める |
TH32CS_SNAPTHREAD | システム内のすべてのスレッドをスナップショットに含める |
- th32ProcessID:取得するスナップショットのプロセスIDを指定します。このパラメーターが0の場合、スナップショットの現在のプロセスを示します。このパラメーターは、TH32CS_SNAPHEAPLISTまたはTH32CS_SNAPMODULEが設定された後にのみ有効です。
戻り値:
- 正常に実行され、スナップショットのハンドルを返します。
- 実行に失敗し、INVALID_HANDLE_VALUEを返します。
Process32First
システムスナップショットで最初に見つかったプロセス情報を取得する
関数宣言:
BOOL WINAPI Process32First(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe)
パラメータの説明:
- hSnapshot:スナップショットハンドルの処理
- lppe:PROCESSENTRY32構造体へのポインター
戻り値:
- 正常に実行され、TRUEを返します。これは、プロセスリストの最初のエントリがバッファにコピーされたことを示します
- 実行が失敗した場合、FALSEが返され、GetLastErrorはERROR_NO_MORE_FILESを返します。エラー値は、プロセスが存在しないか、スナップショットにプロセス情報が含まれていないことを示します。
PROCESS32Next
システムスナップショットに記録されている次のプロセス情報を取得する
関数プロトタイプ:
BOOL WINAPI PROCESS32Next(
HANDLE hSnapshot,
LPPROCESSENTRY32 lppe)
パラメータの説明:
- hSnapshot:スナップショットハンドル
- lppe:PROCESSENTRY32構造体へのポインター
戻り値:
- プロセスリストの次のエントリがバッファにコピーされている場合はTRUEを返します
- プロセスがない、またはスナップショットにプロセス情報が含まれていない場合、GetLastErrorはERROR_NO_MORE_FILESエラー値を返します
エンコーディングの実装
いわゆるスナップショットとは、プロセス、スレッド、ヒープなど、過去の特定の時間に記録されたコンピューターの状態を指します。システムの状態は、特に特定の操作を実行した後、常に変化しています。
スナップショットは通常、特定の時点でコンピューターの状態を復元するために使用されます。システムでエラーが発生した場合、スナップショット機能を使用して現在の状態をロールバックできます。たとえば、次のとおりです。
- Windowsシステムの復元ポイント
- VMwareのスナップショット設定
// 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>
BOOL Get_all_process()
{
PROCESSENTRY32 pe32 = {};
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hprocessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hprocessSnap == INVALID_HANDLE_VALUE)
{
printf("create snap error!\n");
return FALSE;
}
BOOL bRet = Process32First(hprocessSnap, &pe32);
while (bRet)
{
printf("[%d]\t[%ws]\n", pe32.th32ProcessID, pe32.szExeFile);
bRet = Process32Next(hprocessSnap, &pe32);
}
CloseHandle(hprocessSnap);
return TRUE;
}
int main()
{
Get_all_process();
return 0;
}
ランニング効果チャート
殺害ソフトウェアがあるかどうかを確認します
プロセスリストを取得したら、プロセスにウイルス対策があるかどうかを判断するために一歩近づき、ウイルスが決定を行いやすくするための明確な情報を取得できますか?
以下では、このマシンのTinderとDefenderのプロセス名を照会します。
- SecurityHealthSystray.exe(defender)
- wsctrl.exe(Tinder)
// 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>
BOOL Get_all_process()
{
WCHAR defen[2][30] = { L"SecurityHealthSystray.exe", L"wsctrl.exe" };
PROCESSENTRY32 pe32 = {};
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hprocessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hprocessSnap == INVALID_HANDLE_VALUE)
{
printf("create snap error!\n");
return FALSE;
}
BOOL bRet = Process32First(hprocessSnap, &pe32);
while (bRet)
{
for (int i = 0; i < 2; ++i)
{
if (wcscmp(defen[i], pe32.szExeFile) == 0)
{
printf("%ws is exist\n", defen[i]);
}
}
//printf("[%d]\t[%ws]\n", pe32.th32ProcessID, pe32.szExeFile);
bRet = Process32Next(hprocessSnap, &pe32);
}
CloseHandle(hprocessSnap);
return TRUE;
}
int main()
{
Get_all_process();
return 0;
}
ランニング効果
2つのアンチソフトプロセスシステムが実行されていることがわかります。