picoCTF 2024 Writeup うさみみハリケーンで解いてみた
picoCTF 2024 Writeup うさみみハリケーンで解いてみた
この Writeup について
「 picoCTF 」は、セキュリティの技術を競う競技大会「 CTF 」のひとつで、中学生・高校生向けのものです。普段 PC ゲームの解析で使っている「うさみみハリケーン」で、この「 picoCTF 2024 」を解いてみました。この解説の解き方には正攻法ではないものがありますので、「出題の意図に沿った正しい解き方が知りたい」方は、他の Writeup ( CTF の解き方の解説)も読まれることをお勧めします。CTF では問題の答えのことを「フラグ」といいます。各問題の説明の最後にある文字列がフラグです。
筆者は「同人 PC ゲームの解析をする人」で、情報セキュリティ系の人ではないので、Linux ディストリビューションや Python の使用経験はありませんし、情報セキュリティに関連する勉強会やサークルなどの参加経験もありません。統合開発環境「 Visual Studio Community 」の「 Visual C++ 」で、「うさみみハリケーン」のプラグインをコンパイルした経験はあります。
picoCTF の問題はこちらから。過去問を含む「 picoGym 」と、2024年版の「 picoCTF 2024 」があります。
過去問の解説:
「picoCTF 2018 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2019 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2021 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2022 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2023 Writeup うさみみハリケーンで解いてみた」
この Writeup は、「 picoCTF 2023 」の解説「picoCTF 2023 Writeup うさみみハリケーンで解いてみた」のフォーマットを再利用しています。
CTF や PC ゲーム解析では、必ず最新版の「うさみみハリケーン」を使用してください。古いバージョンだと上手くいかないこともあります。この Writeup 執筆時ではバージョン 0.41 が最新版です。
この Writeup で使用している「うさみみハリケーン」は新型 32 ビット版の「 UsaMimi32.exe 」です。「青い空を見上げればいつもそこに白い猫」の実行ファイルは「 AoZoraSiroNeko.exe 」です。「へきさにゃん」の実行ファイルは「 HekisaNyan.exe 」です。
補足:このWriteupは、匿名希望の方からDigital Travesiaへ提供されたものです。公開にあたり、Digital Travesia側で若干の修正や補記を行っています。
ツールの入手先
汎用プロセスメモリエディタ兼デバッガ「うさみみハリケーン」「うさみみハリケーン」の公式サイト
「うさみみハリケーン」のダウンロード・インストール・使用方法 (messiahcat氏提供)
ツールの使い方
●うさみみハリケーンと付属ツールの説明「うさみみハリケーン」の最新オンラインヘルプ
ヘキサエディタ「へきさにゃん」
汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(略称:青空白猫)
簡易エクスプローラー「Portable Explorer」
多倍長整数演算・進数変換ソフト 「UMECappend」
式入力演算・進数変換ソフト「UMEC」
PEファイルのダンプ・解析・編集・仲介DLL(Proxy DLL)ソースコード出力用 PE エディタ「UMPE」
この Writeup では使用しませんが、「うさみみハリケーン」には、他にも有用なツールが同梱されています
プロセスが行う、プロセス・スレッド・DLLロード・ファイル・レジストリ・ネットワーク関連等の挙動解析用プロセスモニター「猫原喜雨」さん
x86/x64 対応の簡易アセンブラ・逆アセンブラ「ロケットねこみみ」
プログラム解析時の使用も想定しているボタン型ランチャー「NekoLaunch」
●使う前に読んでおいた方がよい解説
基礎用語 バイナリファイルの解析
基礎用語 キャラクターコード(文字コード)
基礎用語 逆アセンブルコードリスト
ステガノグラフィーの解析について
ファームウェア解析への『うさみみハリケーン』活用について
YARAについて
picoCTF 2024 解いてみた問題と Writeup 目次
●interencdec●Time Machine
●WebDecode
●Verify
●Blame Game
●binhexa
●CanYouSee
●packer
●Secret of the Polyglot
●endianness
●Mob psycho
●WinAntiDbg0x100
●endianness-v2
●WinAntiDbg0x200
●weirdSnake
●Blast from the past
●WinAntiDbg0x300
interencdec 50 points
● Base64 と ROT13 の復号を試される問題問題のファイルにある文字列を「うさみみハリケーン」付属の「 UMECappend 」で Base64 変換を 2 回する
得られた文字列の先頭数文字とフラグ形式「 picoCTF{ 」の各文字を ASCII の文字コードで比較すると、数値の差から ROT19 と分かる
「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」でメニュー「ファイル」あるいはツールバーから新規ファイルを作成
Windows ANSI 文字列部にキャレットがある状態でメニュー「編集」あるいは右クリックから「貼り付け」
これでコピーした文字列がそのまま貼り付けられる
「へきさにゃん」の文字色と背景色の設定は、目に優しい公式の配色変更例を参考にしている
文字列全体を選択状態にしてからメニュー「編集」あるいは右クリックから「数値入力で選択範囲を指定+演算+特殊コピー」
「上の指定選択範囲内で各種演算」を有効、演算方法は「 ROT13 」を選択、演算用数値すなわちシフト数は 19 を入力して「 OK 」ボタン
Windows ANSI 文字列部にキャレットがある状態でメニュー「編集」あるいは右クリックから「コピー」で文字列がそのままコピーできる
picoCTF{caesar_d3cr9pt3d_a47c6d69}
Time Machine 50 points
●本来は Git (バージョン管理システム)の操作を試される問題「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」の YARA ルールでスキャン機能を使用する
付属の YARA ルール集「 yara_rule_file.txt 」には、「 CTF 」タグで picoCTF 用ルールが含まれている
問題の .git フォルダ内を YARA ルールでスキャンするとフラグを含むテキストファイルとオフセットがわかる
picoCTF{t1m3m@ch1n3_186cd7d7}
WebDecode 50 points
● Web ページの調査を試される問題問題文にあるウェブサイトからリンクされている about.html のソースに Base64 文字列が見える
「うさみみハリケーン」付属の「 UMECappend 」で Base64 変換するとフラグになる
picoCTF{web_succ3ssfully_d3c0ded_283e62fe}
Verify 50 points
●ファイルの SHA-256 ハッシュの確認を試される問題問題のファイル群から特定の SHA-256 ハッシュのファイルを探す
「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」の YARA ルールでスキャン機能を使用する
付属の YARA ルール集「 yara_rule_file.txt 」にある SHA-256 比較例を書き換えて、checksum.txt に書いてある SHA-256 を指定する
rule SHA256_Hash : Hash { condition: //hash.sha256(0, filesize) == "0d5928f1613440506d1cfdd6c6847011c86c97348ee65bc89fe9da068a55818e" hash.sha256(0, filesize) == "fba9f49bf22aa7188a155768ab0dfdc1f9b86c47976cd0f7c9003af2e20598f7" }home\ctf-player\drop-in\checksum.txt を「青い空を見上げればいつもそこに白い猫」で開いてサブフォルダごと YARA ルールでスキャンする
87590c24 が目的のファイルと判明したので、Webshell を起動して問題の追加説明文に書いてあるコマンドを入力していく
最後に追加説明文に書いてある復号コマンドを入力するとフラグが表示される
ctf-player@pico-chall$ ./decrypt.sh files/87590c24
picoCTF{trust_but_verify_87590c24}
Blame Game 75 points
●本来は Git (バージョン管理システム)の操作を試される問題「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」の YARA ルールでスキャン機能を使用する
付属の YARA ルール集「 yara_rule_file.txt 」には、「 CTF 」タグで picoCTF 用ルールが含まれている
問題の .git フォルダ内を YARA ルールでスキャンするとフラグを含むテキストファイルとオフセットがわかる
picoCTF{@sk_th3_1nt3rn_d2d29f22}
binhexa 100 points
● 2 進数値の算術演算や論理演算とビットシフトおよび 16 進数値への変換を試される問題問題説明文に従い Webshell を起動してコマンドを入力する
2 進数値の演算を求められるので「うさみみハリケーン」付属の式入力演算・進数変換ソフト「 UMEC 」で演算して解答する
全部の問題に正答するとフラグが表示される
picoCTF{b1tw^3se_0p3eR@tI0n_su33essFuL_6862762d}
CanYouSee 100 points
●本来は画像ファイルの Exif 情報やメタデータの確認を試される問題問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で開いて Base64 文字列を抽出する
「うさみみハリケーン」付属の「 UMECappend 」で Base64 変換するとフラグになる
picoCTF{ME74D47A_HIDD3N_3b9209a2}
packer 100 points
●パッカー「 UPX 」でパックされた ELF ファイルの解析を試される問題問題の ELF ファイルを upx.exe でアンパック後に「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出する
フラグに関係ありそうな文字列が見えるので「青い空を見上げればいつもそこに白い猫」で逆アセンブルして該当オフセットを観察する
この文字列をスタックに格納しているのがわかる
抽出した文字列を繋げて、16 進数値として「うさみみハリケーン」付属の「 UMECappend 」で ASCII 変換するとフラグになる
picoCTF{U9X_UnP4ck1N6_B1n4Ri3S_1a5a3f39}
Secret of the Polyglot 100 points
●ファイルの種別判定や内包・結合されたデータの解析を試される問題問題の PDF ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で開くと PNG 画像ファイルと判定される
「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析機能で表示するとフラグの一部が見える
問題のファイルの構造は「青い空を見上げればいつもそこに白い猫」のファイル・データ抽出機能で確認できる
残りのフラグ文字列を得るために「うさみみハリケーン」付属の簡易エクスプローラー「 Portable Explorer 」で IFilter による文字列抽出を行う
IFilter による文字列抽出は、PNG ファイルに結合されたドキュメントファイルにも対処できる
また、PDF の黒塗り文字や透明文字といった見えない文字でも問題なく抽出できる
「 Portable Explorer 」上で問題のファイルを選択後、画面上の「拡張プロパティ」が表示されているコンボボックスで、「抽出した文字列」を選択してから「をコピー」ボタン押し下げ
上の操作で、Shift キーを押しながら「をコピー」ボタンを押し下げると、コピーした文字列の確認・編集・読み上げ用画面が表示される
これで残りのフラグ文字列が得られたので結合する
picoCTF{f1u3n7_1n_pn9_&_pdf_90974127}
endianness 200 points
●リトルエンディアンとビッグエンディアンの理解と相互変換を試される問題問題の追加説明に従い Webshell を起動して質問に答える
質問はランダム文字列の 16 進 ASCII 文字コード列をリトルエンディアンとビッグエンディアンで表示したもの
「うさみみハリケーン」付属の式入力演算・進数変換ソフト「 UMEC 」で指定文字列を入力すると 16 進 ASCII 文字コード列がわかる
もし質問の文字列がとても長ければ、問題 interencdec 同様に「へきさにゃん」を使っていた
「上の指定選択範囲内で各種演算」を有効にし、演算方法には「バイト順逆転」を選択すればよい
質問に正答するとフラグが表示される
Congratulations! You found both endian representations correctly!
Your Flag is: picoCTF{3ndi4n_sw4p_su33ess_28329f0a}
Mob psycho 200 points
● APK ファイルの ZIP 展開を試される問題問題の APK ファイルを ZIP 展開すると mobpsycho\res\color\flag.txt に 16 進数値の文字列形式でフラグが格納されていた
「うさみみハリケーン」付属の YARA ルール集「 yara_rule_file.txt 」の「 CTF_Flag_Strings 」ルールに対応する条件を追加してみる
$picoCTF_Flag_HexString = "7069636f435446" ascii wide //picoCTF2024
「うさみみハリケーン」付属の「 UMECappend 」で 16 進数値を ASCII 文字列に変換するとわかる
picoCTF{ax8mC0RU6ve_NX85l4ax8mCl_5e67ea5e}
WinAntiDbg0x100 200 points
●アンチデバッグ機能を持つ EXE ファイルの解析を試される問題「うさみみハリケーン」の新型 32 ビット版「 UsaMimi32.exe 」を起動
プロセスリスト画面の「実行ファイルを起動」ボタンを押して、表示される画面で問題の EXE ファイルを指定
「通常起動時にエントリーポイントで実行停止」オプションを有効化して起動
プロセスリスト画面で起動したプロセスを選択
メニュー「デバッグ」→「モジュールを逆アセンブル」で、EXE モジュールを逆アセンブル
逆アセンブルコードリスト上での、参照文字列の検索結果(画面右下)をもとにフラグ文字列表示処理箇所を特定
さらに、被デバッグ検出時の処理を、条件ジャンプを無条件ジャンプに書き換えてスキップさせる
メニュー「デバッグ」→「ブレークポイントの挿入/削除」でアタッチ
「オプション」ボタンを押して、オプションの「デバッグ出力文字列を表示」を有効化
「実行ファイルを起動」画面の「再開」ボタンで実行再開すると、デバッグ出力文字列としてフラグが表示される
picoCTF{d3bug_f0r_th3_Win_0x100_e70398c9}
endianness-v2 300 points
●バイナリファイル操作としてのリトルエンディアンとビッグエンディアンの相互変換を試される問題「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で問題のファイルを開く
問題のファイルのバイナリデータ先頭数バイトから加工された JPEG ファイルと推定
適当な JPEG 画像ファイルとの比較により、4 バイト単位のエンディアン変換が行われていると判断
「へきさにゃん」でファイル全体を選択
メニュー「編集」あるいは右クリックから「数値入力で選択範囲を指定+演算+特殊コピー」
「上の指定選択範囲内で各種演算」を有効、演算方法は「エンディアン変換」を選択、演算単位は「 4 バイト(DWORD) 」を選択して「 OK 」ボタン
エンディアン変換後の JPEG ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析機能で開く
picoCTF{cert!f1Ed_iNd!4n_s0rrY_3nDian_f72c4bf7}
WinAntiDbg0x200 300 points
●管理者権限への理解とアンチデバッグ機能を持つ EXE ファイルの解析を試される問題「うさみみハリケーン」の新型 32 ビット版「 UsaMimi32.exe 」を管理者権限で起動
プロセスリスト画面の「実行ファイルを起動」ボタンを押して、表示される画面で問題の EXE ファイルを指定
「通常起動時にエントリーポイントで実行停止」オプションを有効化して起動
プロセスリスト画面で起動したプロセスを選択
メニュー「デバッグ」→「モジュールを逆アセンブル」で、EXE モジュールを逆アセンブル
逆アセンブルコードリスト上での、参照文字列の検索結果(画面右下)をもとにフラグ文字列表示処理箇所を特定
さらに、被デバッグ検出時の処理を、条件ジャンプを無条件ジャンプに書き換えてスキップさせる
メニュー「デバッグ」→「ブレークポイントの挿入/削除」でアタッチ
「オプション」ボタンを押して、オプションの「デバッグ出力文字列を表示」を有効化
「実行ファイルを起動」画面の「再開」ボタンで実行再開すると、デバッグ出力文字列としてフラグが表示される
picoCTF{0x200_debug_f0r_Win_c6db2768}
weirdSnake 300 points
● Python の逆コンパイルコードの読解を試される問題筆者は Python の逆コンパイルコードをほとんど読解できない
そこで、問題の Python 逆コンパイルコードを C言語のソースコードに変換する
ChatGPT で「以下のPython逆コンパイル結果をC言語のソースコードに変換したい」
得られた C言語ソースコードを読むと、以下の配列と文字列を作成していることがわかる
int input_list[] = { 4, 54, 41, 0, 112, 32, 25, 49, 33, 3, 0, 0, 57, 32, 108, 23, 48, 4, 9, 70, 7, 110, 36, 8, 108, 7, 49, 10, 4, 86, 43, 105, 114, 91, 0, 71, 106, 124, 93, 78 }; char key_str[] = "J_o3t";さらに、この配列を文字列「 J_o3t 」の ASCII 文字コード列で XOR していることがわかる
ASCII 文字コード列は「うさみみハリケーン」付属の式入力演算・進数変換ソフト「 UMEC 」で出力できる
ChatGPT で「文字列"J_o3t"の16進ASCII文字コード列を知りたい」でも可能
XOR 処理を簡単に行えるように、上記の 10 進数の配列から 16 進バイト列を作成する
ChatGPT で「以下のC言語の配列を区切りのない16進数のバイト列で表示したい」
得られた 16 進バイト列は 04362900702019312103000039206C1730040946076E24086C07310A04562B69725B00476A7C5D4E
しかし文字列「 J_o3t 」すなわち ASCII 文字コード列「 4A5F6F3374 」の連続との XOR 結果がおかしい
そこで問題の Python 逆コンパイルコードを見ると、文字列の作成処理が以下のようになっていた
文字列="J"で "J"
"_"+文字列で "_J"
文字列+"o"で "_Jo"
文字列+"3"で "_Jo3"
"t"+文字列で "t_Jo3"
正しい文字列は「 t_Jo3 」すなわち ASCII 文字コード列で「 745F4A6F33 」だった
「うさみみハリケーン」付属の「 UMECappend 」で以下の 16 進数値の XOR を演算し文字列として出力する
04362900702019312103000039206C1730040946076E24086C07310A04562B69725B00476A7C5D4E
745F4A6F33745F4A6F33745F4A6F33745F4A6F33745F4A6F33745F4A6F33745F4A6F33745F4A6F33
picoCTF{N0t_sO_coNfus1ng_sn@ke_68433562}
Blast from the past 300 points
●バイナリファイルの編集と特定データ形式に関する情報収集を試される問題「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で問題の JPEG ファイルを開く
JPEG ファイルにある 7 つの日付時刻関連情報を指定された日時( 1970:01:01 00:00:00.001 )に書き換えればよい
Exif データ内の 3 つの日付時刻とそれぞれのミリ秒は ASCII 文字列なのでそのまま書き換える
最後の書き換え対象「 Samsung 機器特有の TimeStamp 情報」は形式が不明なのでネットで調べた
UnixTime の数値を 1000 倍してミリ秒を足した結果を 13 文字の ASCII 文字列化したものらしい
UnixTime は「へきさにゃん」の画面右側での数値表示で「 time**_t(UTC) 」として表示しているもの
「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で 13 文字以上の文字列を抽出するとオフセットがわかる
UnixTime では数値 0 が 1970:01:01 00:00:00 なので、指定された日時の 1970:01:01 00:00:00.001 だと、ASCII 文字列「 0000000000001 」となる
日付時刻関連情報を書き換えた JPEG ファイルをネットに一時的にアップロード
Webshell を起動してから、アップロードした JPEG ファイルを Webshell の説明文に従って Webshell にダウンロード
一部のアップローダーやブログは Exif データを自動的に削除するのでアップロード先には使えない
問題の追加説明文に従って Webshell で提出や検証のコマンドを入力していくとフラグが表示される
picoCTF{71m3_7r4v311ng_p1c7ur3_a4f2b526}
WinAntiDbg0x300 400 points
●パッカー「 UPX 」適用 EXE ファイルのアンパックおよびデバッガを用いないプログラムコードの動的変更を試される問題問題の EXE ファイルを upx.exe でアンパック後に実行
「 UPX 」適用の判別は、「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」に専用「 Detect It Easy DLL 版」を導入すると可能
「 UPX 」適用時には、実行ファイルのセクション名から「 UPX 」適用を推定することもできる
「うさみみハリケーン」ではメニュー「プロセス」→「プロセスの各種情報を表示」で EXE ファイルのセクション情報を表示できる
さらに別のアプローチとして、「うさみみハリケーン」付属の PE エディタ「 UMPE 」でパッカー適用の判別やセクション情報の確認ができる
「うさみみハリケーン」の新型 32 ビット版「 UsaMimi32.exe 」でプロセスを開いてメニュー「デバッグ」→「モジュールを逆アセンブル」
EXE モジュールを逆アセンブルし、MessageBoxW 関数呼び出し箇所の検索結果(画面右下)からフラグ文字列表示処理箇所を特定
フラグ文字列表示処理の前に無条件ジャンプ命令による無限ループ処理がある
逆アセンブルコードリスト上のアドレス 00B538DB ( ASLR によるアドレス変動あり) で右クリックして「全選択列を NOP で埋める」
これでジャンプ命令を無効化し無限ループ処理を抜けることができる
メッセージボックスでフラグが表示される
メッセージボックスの表示文字列は Ctrl + C キーでコピーできる
フラグはデバッガ用のデバッグ文字列としても出力される
「うさみみハリケーン」のメニュー「デバッグ」→「デバッグ文字列出力を監視」は、デバッガとしてアタッチせずにデバッグ文字列を取得できる
上で解析した EXE モジュールのアドレスは、ASLR(address space layout randomization) により起動時ごとに変動する
この ASLR は解析や改造を煩雑にするので無効化してみる
「うさみみハリケーン」付属の PE エディタ「 UMPE 」の 32 ビット版 (UMPE.exe) で EXE ファイルの設定を以下のように書き換える
「 Characteristics 」にある「 RELOCS_STRIPPED 」フラグをオン(必須ではない)
「 DllCharacteristics 」にある「 DYNAMIC_BASE 」フラグをオフ
これで ASLR が無効化され、EXE モジュールのアドレスは常に同じアドレスとなる
ASLR 無効化により、「うさみみハリケーン」のメニュー「編集」→「改造コード実行」で固定アドレスを指定した書き換えが可能になる
改造コードは、特定キーの押し下げや、ゲームパッド(ジョイパッド)のボタン押し下げを実行トリガーに設定できる(ゲーム画面が最前面の場合などに便利)
なお、条件分岐を使うような複雑なプロセスメモリ書き換えならば、改造コードではなく専用プラグインを作成して行う
;無限ループ処理を抜ける ;004038DB-E9E0FEFFFF 004038DB-9090909090
プロセスメモリ上の EXE モジュールへの動的な書き換えとは別に、EXE ファイルへの静的な書き換えも試してみる
逆アセンブルコードリスト上で右クリックから「アドレス−オフセット変換モード」を切り替える
これでプロセスメモリ上の EXE モジュールでのアドレスと、EXE ファイル上のオフセットを相互変換できる
「スペシャルねこまんま57号」(「うさみみハリケーン」の姉妹ソフト)はバイナリファイル用の改造コードが使える
メニュー「ファイル」→「簡易バイナリファイル書き換え」
「スペシャルねこまんま57号」が対応している 2 種類の改造コードの形式では以下のようになる
;起動時から無限ループ処理を抜ける 00002CDB-9090909090 *起動時から無限ループ処理を抜ける FILENAME WinAntiDbg0x300_unpack_DeASLR.exe 00002CDB: E9 90 00002CDC: E0 90 00002CDD: FE 90 00002CDE: FF 90 00002CDF: FF 90
このアンパックした EXE ファイル用改造コードを適用すると、EXE ファイルを起動しただけでメッセージボックスでフラグが表示される
アンパックなし・デバッグなし・ ASLR 無効化なしでの解析アプローチも試してみた
WinAntiDbg0x300.exe を起動して、「うさみみハリケーン」の新型 32 ビット版「 UsaMimi32.exe 」でプロセスを開く
メニュー「検索」→「メモリ範囲を指定して検索」で、検索対象に「文字:Unicode(LE) 」を選択して、表示されるはずの文字列内「 flag 」を検索
表示されるはずの文字列「 You got the flag! 」のアドレスを特定
このアドレスをもとに、プロセスメモリ上に展開あるいは復号されているプログラムコードを探索する
上文字列のアドレスを参照しているプログラムコードには、同文字列アドレスの DWORD の数値が含まれているはず
なので、「メモリ範囲を指定して検索」画面で、同文字列アドレスを DWORD の数値として検索する
あるいは本来の数値検索用である、メニュー「検索」→「簡易数値検索」で、同文字列アドレスの値を DWORD 指定のアラインメントなしで検索
見つかったプログラムコードのアドレス周辺をメニュー「デバッグ」→「選択範囲を逆アセンブル」で逆アセンブル
この範囲逆アセンブルでは、API 関数のコールを、モジュールの IAT を参照せずに解決できる
逆アセンブルコードリストから処理内容を推測し、動的なプログラムコード書き換えを試行して挙動を観察
なお、この汎用的なアプローチは、適用されたパッカーの種類や、解析対象の解析対策により、使用できないこともある
picoCTF{Wind0ws_antid3bg_0x300_09b94ee8}