ctf-malware について
ctf-malwareは、スクリプト、バイナリ、メモリ、ネットワークキャプチャを調べる参加者向けのマルウェア分析CTFリファレンススキルです。要点に加え、詳しいノートと任意のMCPサーバー活用情報を備えています。
主な機能
- 01スクリプトの難読化解除
- 02PE・.NETマルウェア分析
- 03C2プロトコルとPCAP分析
- 04YARAルールとシェルコード分析
- 05メモリフォレンジックの案内
活用シーン
- 01難読化されたJavaScriptやPowerShellのデコード
- 02バイナリからのマルウェア設定抽出
- 03パケットキャプチャ内のC2通信調査
MCP 対応
READMEでは、IDA Pro MCP、Ghidra MCP、WinDbg MCP、JADX MCPを任意のツールとして挙げ、アンパック、設定抽出、動的デバッグ、Androidマルウェア分析に利用できるとしています。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ljagiello/ ctf-skills --skill ctf-malwareインストール後、Claude Code で/ctf-malwareを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
c2-and-protocols.mdpe-and-dotnet.mdscripts-and-obfuscation.mdtools-mcp.md詳細
CTF マルウェアとネットワークの解析
マルウェア解析系CTFチャレンジのクイックリファレンスです。各手法の概要をここに一行で記載しています。コードを含む詳細については、関連ファイルを参照してください。
前提条件
Python パッケージ(全プラットフォーム):
pip install yara-python pefile capstone oletools unicorn pycryptodome \
volatility3 dissect.cobaltstrike
Linux(apt):
apt install strace ltrace tshark binwalk binutils
macOS(Homebrew):
brew install wireshark binwalk binutils ghidra
手動インストール:
- dnSpy — GitHub、.NET デコンパイラー(Windows)
MCP サーバー(任意): IDA Pro MCP / Ghidra MCP(アンパッキング、設定の抽出)、動的解析用の WinDbg MCP(svnscha/mcp-windbg)、Android 用の JADX MCP — tools-mcp.md を参照してください。マルウェアは、隔離された使い捨ての VM 内でのみ実行してください。
追加リソース
- scripts-and-obfuscation.md - JavaScript の難読化解除、PowerShell の解析、eval/base64 のデコード、ジャンクコードの検出、16 進数ペイロード、Debian パッケージの解析、動的解析の手法(strace/ltrace、ネットワーク監視、メモリからの文字列抽出、自動サンドボックス実行)、マルウェア検出用 YARA ルール、シェルコード解析(Unicorn Engine、Capstone)、マルウェアのメモリフォレンジック(Volatility 3 malfind、プロセスインジェクション検出)、解析対策技術(VM 検出、タイミング回避、API ハッシュ化、プロセスインジェクション)、独自アルファベットによる C2 デコードを用いたトロイの木馬化プラグインの解析
- c2-and-protocols.md - C2 通信パターン、独自暗号プロトコル、RC4 WebSocket、DNS ベースの C2、ネットワーク指標、PCAP 解析、AES-CBC、暗号化 ID、Telegram ボットの復旧、Poison Ivy RAT の Camellia 復号
- pe-and-dotnet.md - PE 解析(peframe、pe-sieve、pestudio)、.NET 解析(dnSpy、AsmResolver)、LimeRAT の抽出、サンドボックス回避、マルウェア設定の抽出、PyInstaller+PyArmor
- tools-mcp.md - マルウェア解析向けの MCP サーバー連携:アンパッキングと設定/復号器の抽出用 IDA/Ghidra MCP、動的デバッグ用 WinDbg MCP(RWX 領域の探索、メモリ内 C2 文字列、実行中の
VirtualAlloc/CreateRemoteThreadブレークポイント、パッカーを回避するための.writememによるペイロードのダンプ)、Android マルウェア用 JADX MCP — 疑似コードを優先し、隔離 VM の安全性に関する注意事項も記載
ピボットするタイミング
- サンプルが実際には通常の crackme、パックされたチャレンジバイナリ、またはマルウェアの挙動を伴わない独自 VM にすぎない場合は、
/ctf-reverseに切り替えてください。 - 主な作業がネットワークの再構築、ディスクカービング、またはホストの痕跡の復元である場合は、
/ctf-forensicsに切り替えてください。 - チャレンジが公開情報に基づくアトリビューションやインフラの追跡に発展した場合は、
/ctf-osintに切り替えてください。
クイックスタートコマンド
# Static analysis
file suspicious_file
strings -n 8 suspicious_file | head -50
xxd suspicious_file | head -20
# PE analysis
python3 -c "import pefile; pe=pefile.PE('mal.exe'); print(pe.dump_info())" | head
peframe mal.exe
# Dynamic analysis (sandboxed!)
strace -f -s 200 ./suspicious 2>&1 | head -100
ltrace ./suspicious 2>&1 | head -50
# Network indicators
strings suspicious_file | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
strings suspicious_file | grep -iE 'http|ftp|ws://'
# YARA scan
yara -r rules.yar suspicious_file
難読化されたスクリプト
eval/bashをechoに置き換えて、元のコードを出力します。base64/16 進数のデータを抽出し、fileで解析してください。scripts-and-obfuscation.md を参照してください。
JavaScript と PowerShell の難読化解除
- JS:
evalをconsole.logに置き換え、unescape()、atob()、String.fromCharCode()をデコードします。 - PowerShell:
-encの base64 をデコードし、IEXを出力に置き換えます。scripts-and-obfuscation.md を参照してください。
ジャンクコードの検出
- NOP スレッド、push/pop の組み合わせ、デッドライト、次の命令への無条件ジャンプを探します。実際の
callターゲットを抽出するためにフィルタリングしてください。scripts-and-obfuscation.md を参照してください。
PCAP とネットワークの解析
tshark -r file.pcap -Y "tcp.stream eq X" -T fields -e tcp.payload
通常とは異なるポート上の C2 を探します。strings | grep で IP/ドメインを抽出してください。c2-and-protocols.md を参照してください。
独自暗号プロトコル
- ストリーム暗号では双方向でキーストリームの状態を共有するため、すべてのペイロードを時系列順に連結してください。
- ChaCha20 のキーストリーム抽出:ヌルバイトを送信します(0 XOR 任意の値 = その値)。c2-and-protocols.md を参照してください。
C2 通信パターン
- ビーコニング、DGA、DNS トンネリング、独自ヘッダーを使う HTTP(S)、エンコードされたペイロード。c2-and-protocols.md を参照してください。
RC4 暗号化 WebSocket C2
tcprewriteでポートを再割り当てし、TLS 復号用の RSA キーを追加して、バイナリ内の RC4 キーを探します。c2-and-protocols.md を参照してください。
暗号化アルゴリズムの特定
- AES:
0x637c777bSボックス。ChaCha20:expand 32-byte k。TEA/XTEA:0x9E3779B9。RC4:Sボックスを逐次初期化します。c2-and-protocols.mdを参照してください。
マルウェアにおけるAES-CBC
- 鍵にはハードコードされた文字列のMD5/SHA256を使用し、IVには暗号文の先頭16バイトを使用します。c2-and-protocols.mdを参照してください。
PE解析
peframe malware.exe # Quick triage
pe-sieve # Runtime analysis
pestudio # Static analysis (Windows)
pe-and-dotnet.mdを参照してください。
.NETマルウェア解析
- dnSpy/ILSpyで逆コンパイルし、プログラムによる解析にはAsmResolverを使用します。LimeRAT C2:MD5から導出した鍵を使うAES-256-ECB。pe-and-dotnet.mdを参照してください。
マルウェアの設定抽出
- .dataセクション、PE/.NETリソース、レジストリキー、暗号化された設定ファイルを確認します。pe-and-dotnet.mdを参照してください。
サンドボックス回避の確認
- VM検出、デバッガー検出、タイミングチェック、環境チェック、解析ツール検出。pe-and-dotnet.mdを参照してください。
解析妨害技術
VM検出(CPUID、MACプレフィックス、レジストリ、ディスクサイズ)、タイミング回避(sleep/RDTSCによるサンドボックス検出)、APIハッシュ化(ROR13/DJB2/CRC32とhashdb検索)、プロセスインジェクション(ホロウイング、APC、CreateRemoteThread)、環境チェック。scripts-and-obfuscation.mdを参照してください。
トロイの木馬化されたプラグインの解析
悪意のあるプラグインと公式リリースを差分比較し、try/exceptブロックに挿入されたコードを見つけます。カスタムアルファベットのローテーション(C[(C.index(ch) - offset) % len(C)])でC2ドメインをデコードし、XORでエンドポイントのパスをデコードします。scripts-and-obfuscation.mdを参照してください。
PyInstaller + PyArmorのアンパック
- 抽出には
pyinstxtractor.pyを、保護されたコードにはPyArmor-Unpackerを使用します。pe-and-dotnet.mdを参照してください。
Telegramボットの証拠復旧
- マルウェアのソースからボットトークンを取得し、
getUpdatesおよびgetFileAPIを呼び出します。c2-and-protocols.mdを参照してください。
Debianパッケージの解析
ar -x package.deb && tar -xf control.tar.xz # Check postinst scripts
scripts-and-obfuscation.mdを参照してください。
マルウェア検出用YARAルール
ファイルやメモリダンプに対して、バイトパターン、文字列、正規表現を照合するYARAルールを記述します。XORループ({31 ?? 80 ?? ?? 4? 75})、base64ブロブ、エンコードされたPowerShellを検出します。スキャンを高速化するにはyaracでコンパイルします。scripts-and-obfuscation.mdを参照してください。
シェルコード解析
objdump -b binary -m i386:x86-64で逆アセンブルし、Unicorn Engineでエミュレート(システムコールを安全にフック)するか、プログラムによる逆アセンブルにはCapstoneを使用します。XORデコーダースタブを探します。scripts-and-obfuscation.mdを参照してください。
マルウェアのメモリフォレンジック
vol windows.malfindは、マップされたファイルのない注入コード(PAGE_EXECUTE_READWRITE)を検出します。windows.pstreeは、不審な親子関係を明らかにします。windows.vadyarascan.VadYaraScanでメモリをYARAスキャンします。scripts-and-obfuscation.mdを参照してください。
ネットワーク指標クイックリファレンス
strings malware | grep -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'
tshark -r capture.pcap -Y "dns.qry.name" -T fields -e dns.qry.name | sort -u