picoCTF 2026 Writeup うさみみハリケーンで解いてみた
picoCTF 2026 Writeup うさみみハリケーンで解いてみた
この Writeup について
「 picoCTF 」は、セキュリティの技術を競う競技大会「 CTF 」のひとつで、中学生・高校生・大学生向けのものです。普段 PC ゲームの解析で使っている「うさみみハリケーン」で、この「 picoCTF 2026 」を解いてみました。この解説の解き方には正攻法ではないものがありますので、「出題の意図に沿った正しい解き方が知りたい」方は、他の Writeup ( CTF の解き方の解説)も読まれることをお勧めします。CTF では問題の答えのことを「フラグ」といいます。各問題の説明の最後にある文字列がフラグです。
筆者は「同人 PC ゲームの解析をする人」で、情報セキュリティ系の人ではないので、Linux ディストリビューションや Python の使用経験はありませんし、情報セキュリティに関連する勉強会やサークルなどの参加経験もありません。統合開発環境「 Visual Studio Community 」の「 Visual C++ 」で、「うさみみハリケーン」のプラグインをコンパイルした経験はあります。
picoCTF の問題はこちらから。picoCTF の過去問を含む「 picoGym 」があります。
過去問の解説:
「picoCTF 2018 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2019 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2021 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2022 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2023 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2024 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2025 Writeup うさみみハリケーンで解いてみた」
この Writeup は、上記のフォーマットを再利用しています。
CTF や PC ゲーム解析では、必ず最新版の「うさみみハリケーン」を使用してください。古いバージョンだと上手くいかないこともあります。この Writeup 執筆時ではバージョン 0.45 が最新版です。
この Writeup で使用している「うさみみハリケーン」は 64 ビット版の「 UsaMimi64.exe 」です。「青い空を見上げればいつもそこに白い猫」の実行ファイルは「 AoZoraSiroNeko.exe 」です。「へきさにゃん」の実行ファイルは「 HekisaNyan.exe 」です。
補足:このWriteupは、匿名希望の方からDigital Travesiaへ提供されたものです。公開にあたり、Digital Travesia側で若干の修正や補記を行っています。
ツールの入手先
汎用プロセスメモリエディタ兼デバッガ「うさみみハリケーン」「うさみみハリケーン」の公式サイト
「うさみみハリケーン」のダウンロード・インストール・使用方法 (messiahcat氏提供)
ツールの使い方
●うさみみハリケーンと付属ツールの説明「うさみみハリケーン」の最新オンラインヘルプ
ヘキサエディタ「へきさにゃん」
汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(略称:青空白猫)
多倍長整数演算・進数変換ソフト 「UMECappend」
式入力演算・進数変換ソフト「UMEC」
プロセスが行う、プロセス・スレッド・DLLロード・ファイル・レジストリ・ネットワーク関連等の挙動解析用プロセスモニター「猫原喜雨」さん
PEファイルのダンプ・解析・編集・仲介DLL(Proxy DLL)ソースコード出力用 PE エディタ「UMPE」
簡易エクスプローラー「Portable Explorer」
この Writeup では使用しませんが、「うさみみハリケーン」には、他にも有用なツールが同梱されています
.NETアプリケーション逆アセンブラ兼逆コンパイラ「NekoDisIL」
リソース文字列ビューア「ResStrView」
x86/x64 対応の簡易アセンブラ・逆アセンブラ「ロケットねこみみ」
バイナリファイル比較ツール「NekoBinDiff」
プログラム解析時の使用も想定しているボタン型ランチャー「NekoLaunch」
●使う前に読んでおいた方がよい解説
基礎用語 バイナリファイルの解析
基礎用語 キャラクターコード(文字コード)
基礎用語 逆アセンブルコードリスト
ステガノグラフィーの解析について
ファームウェア解析への『うさみみハリケーン』活用について
YARAについて
picoCTF 2026 解いてみた問題と Writeup 目次
●bytemancy 0●Binary Digits
●StegoRSA
●Timeline 0
●Gatekeeper
●Hidden Cipher 1
●Hidden Cipher 2
●bytemancy 1
●Undo
●MultiCode
●Silent Stream
●Rogue Tower
●Timeline 1
●Binary Instrumentation 3
●Binary Instrumentation 4
bytemancy 0 50 points
● ASCII 文字コードの理解を求められる問題問題文の指定で Web シェルにアクセスすると、 ASCII として「 101 」を 3 連続で並べたものの入力を要求される
「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で、メニュー「ファイル」またはツールバーから新規ファイルを作成する
メニュー「オプション」→「表示用基数」で基数を 10 進数にしてから 101 を 3 回入力する

Web シェルに戻って文字列「 eee 」を入力するとフラグが表示される
picoCTF{pr1n74813_ch4r5_62360bfd}
Binary Digits 100 points
● 2 進文字列のバイナリファイル化を求められる問題問題のファイルは 2 進文字列のテキストファイル
「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で 16 進文字列に変換する

先頭直後がバイト列 FFD8 なので JPEG ファイルと判断
余計な先頭 0 を除いて「 16 進保存」ボタンでバイナリファイルとして保存
保存した JPEG ファイルを、「うさみみハリケーン」付属の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析機能で表示するとわかる

picoCTF{h1dd3n_1n_th3_b1n4ry_8d00e35f}
StegoRSA 100 points
● 16 進文字列のバイナリファイル化と RSA 秘密鍵の操作を求められる問題問題の JPEG ファイルを「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で開いてみると 16 進文字列がみえる
Windows ANSI 文字列部にキャレットがある状態でメニュー「編集」あるいは右クリックから「コピー」で、選択範囲の文字列がそのままコピーできる

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」にこの 16 進文字列を貼り付ける
「 16 進保存」ボタンでバイナリファイル(秘密鍵のテキストファイル)として保存

16 進文字列のバイナリファイルへの変換は、「へきさにゃん」で新規ファイル作成後に右クリックから「 16 進文字列をバイナリデータ化して貼り付け」でも可能

得られた秘密鍵を使って、問題の暗号化ファイルを、CyberChef などで復号するとわかる
picoCTF{rs4_k3y_1n_1mg_66388eb3}
Timeline 0 100 points
●ディスクイメージの解析を求められる問題問題のファイルを解凍して得られた IMG ファイルを、 圧縮・解凍ソフト「 ExpLzh 」で開く
問題文で異常に古いファイルにフラグが格納されていると示唆されているので、 ExpLzh 上でタイムスタンプが古いファイルを探す
bin フォルダ内のファイル「 bcab 」が 1985/01/02 2:00:00 で異常に古い
このテキストファイルからフラグ文字列「 NzFtMzExbjNfMHU3MTEzcl9oM3JfNDNhMmU3YWYK 」を得る
「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換するとわかる

picoCTF{71m311n3_0u7113r_h3r_43a2e7af}
補足
「うさみみハリケーン」付属の簡易エクスプローラー「 Portable Explorer 」は、 「 Advanced Query Syntax (AQS) 」に対応しているので、更新日時の範囲を指定したファイル検索が可能
問題の IMG ファイルの内容を「 ExpLzh 」で解凍して、全フォルダ(サブフォルダを含む)に対し、クエリ構文「更新日時:<=2000/01/01」で検索すると、上記のフラグファイルがヒットする
Gatekeeper 100 points
● ELF ファイルの解析と文字列操作を求められる問題問題文の指定で Web シェルにアクセスすると、 999 を超える数値の入力を求められる
だが 1000 といった数値を入力しても拒否される
問題の ELF ファイルを、「うさみみハリケーン」付属の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」で逆アセンブルする
999 より大きく 9999 以下という数値比較に加えて数値 3 との比較があり、これは桁数と判断した

Web シェルに戻り 16 進数で 3 桁の「 3e8 」と入力すると、フラグ文字列を逆転したものが得られる
「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」でメニュー「ファイル」あるいはツールバーから新規ファイルを作成
Windows ANSI 文字列部にキャレットがある状態でメニュー「編集」あるいは右クリックから「貼り付け」
これでコピーした文字列がそのまま貼り付けられる

文字列全体を選択状態にしてからメニュー「編集」あるいは右クリックから「数値入力で選択範囲を指定+演算+特殊コピー」
「上の指定選択範囲内で各種演算」を有効、演算方法は「バイト順逆転」を選択して「 OK 」ボタン

フラグ文字列に余計な文字列「 pi_co_ctf 」が挿入されているので、へきさにゃんの置換機能でゼロバイトに置換して 1 つずつ削除していく

Windows ANSI 文字列部にキャレットがある状態でメニュー「編集」あるいは右クリックから「コピー」で、選択範囲の文字列がそのままコピーできる

picoCTF{3_digit_hex_GT_999_a23867f1}
Hidden Cipher 1 100 points
● ELF ファイルの解析と 16 進バイト列の XOR 処理を求められる問題問題文の指定で Web シェルにアクセスすると、以下の暗号化済みフラグ文字列が得られる
235a201d702015483b1d412b265d3313501f0c072d135f0d2002302d5011305120100a452e
問題の ELF ファイルを「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で眺めると、「 UPX 」 の文字列が見つかるので「 upx.exe 」で解凍する

解凍した問題の ELF ファイルを、「うさみみハリケーン」付属の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」で逆アセンブルする
暗号化に関係するとみられるバイト列「 533343723374 」の指定箇所が見つかる

逆アセンブルコードリストを眺めていると、バイト単位の処理、 XOR 処理および、ループ処理のセットが見つかる

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で、 暗号化済みフラグ文字列とサイズを合わせた、以下の 16 進数値と XOR を演算するとわかる

picoCTF{xor_unpack_4nalys1s_cecbcb91}
Hidden Cipher 2 100 points
● ELF ファイルの解析と 10 進文字列の進数変換を求められる問題問題文の指定で Web シェルにアクセスすると、単純な計算式の答えを入力するよう求められる
だが、適切な数値を入力しても正解にならない
問題の ELF ファイルを「 Decompiler Explorer 」で逆コンパイルする
計算式表示処理の直後に数値 1 との比較処理があるので、 Web シェルで計算式を無視して 1 を入力するとフラグの 10 進文字列が得られる
112, 105, 99, 111, 67, 84, 70, 123, 109, 52, 116, 104, 95, 98, 51, 104, 49, 110, 100, 95, 99, 49, 112, 104, 51, 114, 95, 49, 98, 101, 101, 54, 99, 101, 102, 125
「うさみみハリケーン」付属の式入力演算・進数変換ソフト「 UMEC 」で、16 進文字列に変換する

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」に貼り付けて、「入力整形」ボタンで整形後に ASCII 文字列にに変換するとわかる

picoCTF{m4th_b3h1nd_c1ph3r_1bee6cef}
bytemancy 1 100 points
● ASCII 文字コードの理解を求められる問題問題文の指定で Web シェルにアクセスすると、 ASCII として「 101 」を 1751 連続で並べたものの入力を要求される
「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で適当なファイルを読み込み、先頭から 1751 バイト分を数値 101 で埋める
キャレットの位置を Windows ANSI 文字列部先頭にしておく
メニュー「オプション」で表示用基数やオフセットを 10 進表示にしておく
メニュー「編集」あるいは右クリックから「数値入力で選択範囲を指定+演算+特殊コピー」
選択サイズは 1751 ( 0x6D7 ) バイトを指定し、「上の指定選択範囲内で各種演算」を有効、演算方法は「指定値で埋め」、演算用数値は 101 を指定して「 OK 」ボタン

右クリックからコピーで、選択範囲の ASCII 文字列がそのままコピーされる

Web シェルに戻って、コピーした「 e 」が 1751 連続で並んだ文字列を入力するとフラグが表示される
picoCTF{h0w_m4ny_e's???_be9356c0}
Undo 100 points
● Linux 上での文字列の操作を求められる問題問題文の指定で Web シェルにアクセスすると、フラグ文字列の Base64 や ROT13 適用後とみられる文字列が得られる
入力を求められる Linux のコマンドを筆者は知らないので、以下の操作を行った
「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 や ROT13 変換
「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で文字列を逆転
手入力でフラグ文字列を修正



picoCTF{Revers1ng_t3xt_Tr4nsf0rm@t10ns_a12e8886}
MultiCode 200 points
● Base64 や ROT13 などの変換を求められる問題問題のファイルからフラグ文字列の Base64 適用後とみられる文字列が得られる
「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換をする

16 進文字列が得られるので ASCII 文字列に変換する

エスケープシーケンスを修正してから ROT13 変換をするとわかる

picoCTF{nested_enc0ding_ffb6caa2}
Silent Stream 200 points
● PCAP ファイルの操作を求められる問題まず PCAP ファイルの構造が分からないので ChatGPT に解説してもらう
「PCAPファイルの構造を解説して欲しい」
PCAP ファイル内のヘッダやデータの構造が理解できたので、データの抽出方法を検討する
問題の PCAP ファイルには多数のパケット情報があり、そこからパケットのヘッダやパケット情報内のヘッダをスキップして生データだけ抽出する
「うさみみハリケーン」のファイル読み込みプラグイン「 FileReader 」を使う
「うさみみハリケーン」同梱の解析練習用「 UsaTest2_x64.exe 」を起動する
「うさみみハリケーン」の 64 ビット版「 UsaMimi64.exe 」で「 UsaTest2_x64.exe 」のプロセスを開く
「うさみみハリケーン」でメニュー「プラグイン」から「 UHP64_FileReader.dll 」で FileReader を起動し問題の PCAP ファイルを読み込む
さらに、 FileReader で抽出したデータを書き込むメモリ領域を確保する

「うさみみハリケーン」でメニューの「デバッグ」→「パラサイトルーチン作成」
抽出ルーチンのアセンブリ言語ソースコードを記述してから「プレビュー」ボタンで問題がないか確認
今回は実行させるコードへのジャンプは不要なので、書き込む前に「ルーチンのみ」チェックボックスにチェックしておく
「ジャンプ+ルーチン書き込み」ボタンで、プレビューされたアセンブル後のバイナリデータをプロセスメモリに書き込む
もし RIP 相対アドレスの問題が生じたら、「上ジャンプ元アドレスで RIP 相対バッファを確保」ボタンで確保したメモリ領域を書き込み先にする
※プログラムのコード内に任意の処理を注入する「パラサイトルーチン」の作り方は picoCTF2022 の解説 basic-mod2 を参照してください
mov rsi, 2A8005E mov rdi, 2A90000 mov rdx, 8f ;パケット数 ;Loop start >mov rcx, 40 rep movsb add rsi, 46 dec rdx jnz 2AA0015 ret

メニューの「デバッグ」→「選択アドレスで CreateRemoteThread 関数実行」で、書き込んだ抽出ルーチンのコード先頭から実行させる
ダンプ表示ウィンドウで抽出されたデータを確認する

FileReader で抽出先アドレス以降のバイナリデータをファイルとして保存する
問題のスクリプトにより、 1 バイト毎に数値 42 が加算されていることがわかるので、「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で逆操作を行う
保存したファイルを「へきさにゃん」で読み込み、全バイトを選択してメニュー「編集」あるいは右クリックから「数値入力で選択範囲を指定+演算+特殊コピー」
「上の指定選択範囲内で各種演算」を有効、演算方法は「減算」、演算用数値 42 を指定して「 OK 」ボタン

ファイルヘッダから JPEG ファイルと判断できる

「うさみみハリケーン」付属の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析機能で表示するとわかる

picoCTF{tr4ck_th3_tr4ff1c_c41f36a9}
Rogue Tower 300 points
● PCAP ファイルの解析を求められる問題「うさみみハリケーン」付属の汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」で、問題の PCAP ファイルから文字列を抽出する
フラグに関係するとみられる文字列が見つかる

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換をする
Base64 変換では適切な文字列にならないので、バイナリデータと判断

暗号化は XOR 処理と推測し、フラグ形式文字列「 picoCTF 」のバイナリデータ「 7069636F435446 」と XOR を試す

数字の文字列「 5074682 」となり、「うさみみハリケーン」付属のヘキサエディタ「へきさにゃん」で問題の PCAP ファイルを参照すると、 XOR 演算用の数値が得られる

「 UMECappend 」で、フラグ文字列のバイナリデータと、サイズを合わせた XOR 演算用数値のバイナリデータ間で、 XOR を演算するとわかる

picoCTF{r0gu3_c3ll_t0w3r_3a5d55b2}
Timeline 1 300 points
●ディスクイメージの解析を求められる問題問題のファイルを解凍して得られた IMG ファイルを、圧縮・解凍ソフト「 ExpLzh 」で開く
問題文で新しいファイルにフラグが格納されていると示唆されているので、 ExpLzh 上でタイムスタンプが新しいファイルを探す
etc フォルダ内のファイル「 chat 」が 2025/12/02 6:50:07 で新しい
このテキストファイルから文字列「 NTczNDE3aDEzcl83aDRuXzdoM18xNDU3XzU4NTI3YmIyMjIK 」を得る
「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換するとわかる

picoCTF{573417h13r_7h4n_7h3_1457_58527bb222}
補足
「うさみみハリケーン」付属の簡易エクスプローラー「 Portable Explorer 」は、 「 Advanced Query Syntax (AQS) 」に対応しているので、更新日時の範囲を指定したファイル検索が可能
問題の IMG ファイルの内容を「 ExpLzh 」で解凍して、全フォルダ(サブフォルダを含む)に対し、クエリ構文「更新日時:>=2025/12/01」で検索すると、上記のフラグファイルがヒットする
Binary Instrumentation 3 300 points
●解析対策を施された EXE ファイルの解析を求められる問題この EXE ファイルは起動してもすぐに終了する
問題文により、ファイルを作成か参照するので、「うさみみハリケーン」付属のプロセスモニター「猫原喜雨」さんでファイル関連の挙動を確認してみる

「うさみみハリケーン」の 64 ビット版「 UsaMimi64.exe 」を起動
プロセスリスト画面の「実行ファイルを起動」ボタンを押して、表示される画面で問題の EXE ファイルを指定
「通常起動時にエントリーポイントで実行停止」オプションを有効化して起動
起動したプロセスを「うさみみハリケーン」で開く

ファイルを作成か参照するので、CreateFileA/W 関数の開始アドレスにブレークポイントを設定して、ブレーク時の引数を確認してみる
メニューの「デバッグ」→「モジュール別参照関数表示」で CreateFileA/W 関数の開始アドレスを確認する

メニューの「デバッグ」→「ブレークポイントの挿入/削除」でアタッチしてから、CreateFileA/W 関数の開始アドレスに実行のブレークポイントを設定
オプションで「 HBP/INT3/UD2 ブレーク時に実行を一時停止・ステップ実行」を有効にしておく

「実行ファイルを起動」画面で「再開」ボタンを押して実行させる
ブレークするので、ここでプロセスを実行一時停止にしておく(デバッギー実行停止)

ブレーク時のスタックやレジスタにある参照アドレス以降にどのようなデータがあるか確認する
メニューの「移動」→「同上クリップボードからアドレスを取得」や、メニューの「移動」→「選択アドレスをポインタとみなして表示アドレス変更」を活用

フラグと見られる文字列がみつかる

メニューの「検索」から「 YARA ルールでスキャン」でもみつかる

メニューの「編集」→「指定メモリエリアから文字列を抽出」で、 Windows ANSI 文字列を抽出すると、見つかったフラグの文字列をコピーできる

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換するとわかる

picoCTF{411_4r3_4p15_n07h1n9_3l53_8cb3bdbd}
Binary Instrumentation 4 400 points
●解析対策を施された EXE ファイルの解析を求められる問題この EXE ファイルは起動してもすぐに終了する
問題文で何らかの送信を行うことが示唆されている
「うさみみハリケーン」の 64 ビット版「 UsaMimi64.exe 」を起動
プロセスリスト画面の「実行ファイルを起動」ボタンを押して、表示される画面で問題の EXE ファイルを指定
「通常起動時にエントリーポイントで実行停止」オプションを有効化して起動
起動したプロセスを「うさみみハリケーン」で開く

すぐに終了するので、以下の API 関数にブレークポイントを設定する
SetConsoleCtrlHandler
ExitProcess
TerminateProcess
※エントリーポイントの時点では、通信に関連する DLL 「 ws2_32.dll 」がロードされていないので、通信関連の API 関数にブレークポイントを設定できない
メニューの「デバッグ」→「モジュール別参照関数表示」で上 API 関数の開始アドレスを確認する

メニューの「デバッグ」→「ブレークポイントの挿入/削除」でアタッチしてから、上 API 関数の開始アドレスに実行のブレークポイントを設定
オプションで「 HBP/INT3/UD2 ブレーク時に実行を一時停止・ステップ実行」を有効にしておく

「実行ファイルを起動」画面で「再開」ボタンを押して実行させる
ExitProcess 関数呼び出しでブレークしたので、ここでプロセスを実行一時停止にしておく(デバッギー実行停止)

メニューの「検索」から「 YARA ルールでスキャン」でフラグと見られる文字列がみつかる
メニューの「検索」から 「メモリ範囲を指定して検索」で文字列「 flag 」検索でもみつかる

ダンプ表示画面で確認する

メニューの「編集」→「指定メモリエリアから文字列を抽出」で、Windows ANSI 文字列を抽出すると、見つかったフラグの文字列をコピーできる

「うさみみハリケーン」付属の多倍長整数演算・進数変換ソフト「 UMECappend 」で Base64 変換するとわかる

picoCTF{n3tw0rk_1s_4P1s_4S_W311_39595fa9}
補足
上記では ExitProcess 関数でブレークさせたが、以下の手順で通信に関連する WSAStartup 関数でもブレーク可能
エントリーポイントで実行停止させた状態で、メニュー「デバッグ」→「 DLL のロードとアンロード」
本来は後でロードされる「 ws2_32.dll 」をこの時点でロードさせる
ロードした同 DLL がエクスポートする WSAStartup 関数にブレークポイントを設定し、ブレークさせる

問題の EXE ファイルを起動すると、オリジナルの EXE ファイルに解析対策(圧縮・難読化等)を施したものが、問題の EXE ファイルとは別のメモリ領域に展開される
この展開先はモジュールとしては認識できず、加えて、プロセスメモリ上で PE ヘッダが削除されている
しかし、実行されるコードを含むメモリ領域には実行( Execution )の属性が必要なので、メニューの「デバッグ」→「指定メモリエリアで IAT 検索」などで把握することができる

また、この IAT 検索機能から IAT 書き換えによる API フックが可能
この場合は、 IAT の格納アドレスを、対象プロセスにロードさせた API フック用 DLL 内の、フック用関数のアドレスに書き換える
「うさみみハリケーン」付属の PE エディタ「 UMPE 」は、「仲介 DLL ( Proxy DLL )ソースコード出力機能」を実装しており、 API フック用の仲介 DLL 自作に役立つ
仲介 DLL では、 API 関数呼び出し時に、引数や戻り値の変更に加えて、独自の処理を追加することもできる

なお、「うさみみハリケーン」は、メニューの「デバッグ」→「パラサイトルーチン作成」で、動的なプログラムコード書き換えによる API フックにも対応している
デバッガ対策が施されているといった、状況や必要性に応じて、デバッガと仲介 DLL およびパラサイトルーチン作成機能を使い分ける
別アプローチ例
上記 WSAStartup 関数ブレーク時のスタックトップから、同関数呼び出し直後に実行されるプログラムコードの位置を特定できる
メニュー「デバッグ」→「選択範囲を逆アセンブル」で逆アセンブルコードリストを読解していくと、送受信処理箇所と lstrcmpA 関数呼び出し個所がわかる
また、 lstrcmpA 関数呼び出し後に、本来の参照文字列とは別の、分割されたフラグ文字列を参照していることがわかる


WSAStartup 関数呼び出し直後のプログラムコードを書き換えて、この処理までジャンプさせる
この処理をステップ実行させながら参照アドレスを辿ると、成功時の表示用文字列が作成されたことを確認できる

作成された成功時の表示用文字列を出力する処理が近辺にはない
WSAStartup 関数失敗時のエラー文出力処理のプログラムコードを移植して、この成功時の表示用文字列を出力させる

Congratulations! Here's your flag:
cGljb0NURntuM3R3MHJrXzFzXzRQMXNfNFNfVzMxMV8zOTU5NWZhOX0K