picoCTF 2022 Writeup うさみみハリケーンで解いてみた
picoCTF 2022 Writeup うさみみハリケーンで解いてみた
この Writeup について
「 picoCTF 」は、セキュリティの技術を競う競技大会「 CTF 」のひとつで、中学生・高校生向けのものです。普段 PC ゲームの解析で使っている「うさみみハリケーン」で、この「 picoCTF 2022 」を解いてみました。この解説の解き方には正攻法ではないものがありますので、「出題の意図に沿った正しい解き方が知りたい」方は、他の Writeup ( CTF の解き方の解説)も読まれることをお勧めします。CTF では問題の答えのことを「フラグ」といいます。各問題の説明の最後にある文字列がフラグです。
筆者は「同人 PC ゲームの解析をする人」で、情報セキュリティ系の人ではないので、Linux や Python の使用経験はありませんし、情報セキュリティに関連する勉強会やサークルなどの参加経験もありません。統合開発環境「 Visual Studio Community 」の「 Visual C++ 」で、「うさみみハリケーン」のプラグインをコンパイルした経験はあります。
picoCTF の問題はこちらから。過去問を含む「 picoGym 」と、2022年版の「 picoCTF 2022 」があります。
過去問の解説:
「picoCTF 2018 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2019 Writeup うさみみハリケーンで解いてみた」
「picoCTF 2021 Writeup うさみみハリケーンで解いてみた」
この Writeup は、「 picoCTF 2021 」の解説「picoCTF 2021 Writeup うさみみハリケーンで解いてみた」のフォーマットを再利用しています。
CTF や PC ゲーム解析では、必ず最新版の「うさみみハリケーン」を使用してください。古いバージョンだと上手くいかないこともあります。この Writeup 執筆時ではバージョン 0.37 が最新版です。
この Writeup で使用している「うさみみハリケーン」は新型32ビット版の「 UsaMimi32.exe 」です。「青い空を見上げればいつもそこに白い猫」の実行ファイルは「 AoZoraSiroNeko.exe 」です。
補足:このWriteupは、匿名希望の方からDigital Travesiaへ提供されたものです。公開にあたり、Digital Travesia側で若干の修正や補記を行っています。
ツールの入手先
汎用プロセスメモリエディタ兼デバッガ「うさみみハリケーン」「うさみみハリケーン」の公式サイト
「うさみみハリケーン」のダウンロード・インストール・使用方法 (messiahcat氏提供)
ツールの使い方
●うさみみハリケーンと付属ツールの説明「うさみみハリケーン」の最新オンラインヘルプ
式入力演算・進数変換ソフト「UMEC」
多倍長整数演算・進数変換ソフト 「UMECappend」
汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(略称:青空白猫)
簡易エクスプローラー「Portable Explorer」
この Writeup では使用しませんが、「うさみみハリケーン」には、他にも有用なツールが同梱されています
PEファイルのダンプ・解析・編集・仲介DLL(Proxy DLL)ソースコード出力用 PE エディタ「UMPE」
プロセスが行う、プロセス・スレッド・DLLロード・ファイル・レジストリ・ネットワーク関連等の挙動解析用プロセスモニター「猫原喜雨」さん
x86/x64 対応の簡易アセンブラ・逆アセンブラ「ロケットねこみみ」
プログラム解析時の使用も想定しているボタン型ランチャー「NekoLaunch」
●使う前に読んでおいた方がよい解説
基礎用語 バイナリファイルの解析
基礎用語 キャラクターコード(文字コード)
基礎用語 逆アセンブルコードリスト
ステガノグラフィーの解析について
ファームウェア解析への『うさみみハリケーン』活用について
YARAについて
picoCTF 2022 解いてみた問題と Writeup 目次
●basic-mod1●basic-mod2
●credstuff
●Enhance!
●file-run1
●file-run2
●GDB Test Drive
●Lookey here
●morse-code
●Packets Primer
●Redaction gone wrong
●Safe Opener
●substitution0
●substitution1
●Fresh Java
●Sleuthkit Apprentice
●Bbbbloat
●St3g0
●unpackme
●Wizardlike
basic-mod1 | 100 points
We found this weird message being passed around on the servers, we think we have a working decrpytion scheme. Take each number mod 37 and map it to the following character set: 0-25 is the alphabet (uppercase), 26-35 are the decimal digits, and 36 is an underscore. Wrap your decrypted message in the picoCTF flag format (i.e. picoCTF{decrypted_message})コード埋め込みと実行の練習を兼ねて新型32ビット版「 UsaMimi32.exe 」で 復号ルーチンを自作してみる
キャラクターコード(文字コード)は「うさみみハリケーン」のオンラインヘルプを参照した
復号ルーチンの x86 アセンブリ言語ソースコードを「うさみみハリケーン」の「パラサイトルーチン作成」機能で作成して実行させればよい
「うさみみハリケーン」付属の解析練習用ソフト「 UsaTest2.EXE 」を起動して「うさみみハリケーン」でオープン
ツールバーの青色三角ボタン、メニューだと「移動」→「次のコミットエリアに移動」を3回で、アドレス 403000 に移動
アドレス 403000 から 412FFF までは、プロセスメモリ書き込み練習用領域なので自由に使える
メニューの「編集」→「選択アドレスへの直接書き込み・選択範囲の一括書き換え」で、アドレス 403000 に問題文の数列を書き込む
メニューの「デバッグ」→「パラサイトルーチン作成」
復号ルーチンのアセンブリ言語ソースコードを記述してから「プレビュー」ボタンで問題がないか確認
今回は実行させるコードへのジャンプは不要なので、書き込む前に「ルーチンのみ」チェックボックスにチェックしておく
「ジャンプ+ルーチン書き込み」ボタンで、プレビューされたアセンブル後のバイナリデータをプロセスメモリに書き込む
※プログラムのコード内に任意の処理を注入する「パラサイトルーチン」の作り方は basic-mod2 を参照してください
与えられた数列に対して、その項を 37 で割った余りを指定フォーマットで英数字に当てはめる
以下は復号ルーチンを書き込む確保済みバッファがアドレス 01340000 の例
;開始アドレス: 01340000 mov eax, 403000 mov esi, eax lea edi, [eax+100] mov ecx, 16 ;10進:22 mov ebx, 25 ;10進:37 ;Loop start >mov edx, 0 mov ax, word ptr[esi] div bx ;Alphabet (uppercase) cmp dl, 19 ;10進:25 jg 0134002C add dl, 41 ;as "A" jmp 01340038 ;Decimal digits >cmp dl, 24 ;10進:36 je 01340036 add dl, 16 ;as "0" jmp 01340038 ;Underscore >mov dl, 5F ;as "_" >mov byte ptr[edi], dl add esi, 2 inc edi loop 01340017 retダンプ画面で復号ルーチンのコード先頭(この例ではアドレス 01340000)を選択
メニューの「デバッグ」→「選択アドレスで CreateRemoteThread 関数実行」で復号ルーチンのコード先頭から実行させる
「パラサイトルーチン作成」機能で確保されるバッファは実行属性が付加されている
メニューの「デバッグ」→「メモリ領域の確保とアクセス属性変更」で任意のメモリエリアに実行属性を付加することもできる
なお、「 UsaTest2.EXE 」は DEP の適用対象外なので実行属性のないメモリエリア上のプログラムコードでも実行可能
復号ルーチン実行後にメニューの「編集」→「指定メモリエリアから文字列を抽出」で 復号後の文字列をコピーできる
picoCTF{R0UND_N_R0UND_C0A86577}
basic-mod2 | 100 points
A new modular challenge! Download the message here. Take each number mod 41 and find the modular inverse for the result. Then map to the following character set: 1-26 are the alphabet, 27-36 are the decimal digits, and 37 is an underscore. Wrap your decrypted message in the picoCTF flag format「うさみみハリケーン」付属の式入力演算・進数変換ソフト「 UMEC 」を使って、問題文の数列の項それぞれに対して、積を 41 で割った余りが 1 となる値(モジュラ逆数)を 1 から 37 の総当たりで探す
「うさみみハリケーン」付属の解析練習用ソフト「 UsaTest2.EXE 」を起動して「うさみみハリケーン」でオープン
ツールバーの青色三角ボタン、メニューだと「移動」→「次のコミットエリアに移動」を3回で、アドレス 403000 に移動
アドレス 403000 から 412FFF までは、プロセスメモリ書き込み練習用領域なので自由に使える
メニューの「編集」→「選択アドレスへの直接書き込み・選択範囲の一括書き換え」で、アドレス 403000 に得られたモジュラ逆数の配列を書き込む
プログラムのコード内に任意の処理を注入する「パラサイトルーチン」でフラグを表示させてみる
「UsaTest2.EXE」のプロセスを「うさみみハリケーン」の逆アセンブラで解析すると、「UsaTest2.EXE」画面上部「パラメータ増加」ボタンに対応する処理の開始アドレスは 0040137C であることがわかる
このアドレスからパラサイトルーチンにジャンプさせ、同ボタンを押せばフラグを表示するように改造する
メニューの「デバッグ」→「パラサイトルーチン作成」
ジャンプ元アドレスに 0040137C を指定してから、「テンプレート出力」で「基本パラサイトルーチン」あるいは「メッセージボックス表示」を選択
復号ルーチンとメッセージボックス表示処理のアセンブリ言語ソースコードを記述してから「プレビュー」ボタンで問題がないか確認
「ジャンプ+ルーチン書き込み」ボタンで、プレビューされたアセンブル後のバイナリデータをプロセスメモリに書き込む
以下は復号ルーチンを書き込む確保済みバッファがアドレス 019D0000 の例
;ジャンプ元:0040137C 先:019D0000 PUSHAD PUSHFD ;追加コード先頭 mov esi, 403000 >mov dl, byte ptr[esi] ;Alphabet (uppercase) cmp dl, 1A ;10進:26 jg 019D0013 add dl, 40 ;as "A" jmp 019D001F ;Decimal digits >cmp dl, 25 ;10進:37 je 019D001D add dl, 15 ;as "0" jmp 019D001F ;Underscore >mov dl, 5F ;as "_" >mov byte ptr[esi], dl add esi, 1 cmp byte ptr[esi], 0 jne 019D0007 PUSH 0 ;MB_OK PUSH 0;タイトル文字列アドレス PUSH 403000;メッセージ文字列アドレス PUSH 0 @User32.dll\MessageBoxA;"CALL"代替のAPI関数指定 ;追加コード終端 POPFD POPAD ;オリジナルのコードを復元 ;">"で目印設定 >PUSH 004020C7 ;ジャンプ元に戻る JMP 00401381これで「 UsaTest2.EXE 」の画面上部「パラメータ増加」ボタンを押せばフラグが表示される
メッセージの文字列は Ctrl + C キーでコピーできる
picoCTF{1NV3R53LY_H4RD_8A05D939}
credstuff | 100 points
We found a leak of a blackmarket website's login credentials. Can you find the password of the user cultiris and successfully decrypt it? The first user in usernames.txt corresponds to the first password in passwords.txt. The second user corresponds to the second password, and so on.ダウンロードした passwords.txt 中の、ユーザー「 cultiris 」に対応する文字列は「 cvpbPGS{P7e1S_54I35_71Z3} 」
これはアルファベットのローテーションに見えるので、「うさみみハリケーン」付属の「 UMECappend 」で ROT13 変換するとわかる
picoCTF{C7r1F_54V35_71M3}
Enhance! | 100 points
Download this image file and find the flag.ダウンロードした SVG ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出する
フラグの文字列が分割されているので、つなぎ合わせるとわかる
picoCTF{3nh4nc3d_6783cc46}
file-run1 | 100 points
A program has been provided to you, what happens if you try to run it on the command line?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{U51N6_Y0Ur_F1r57_F113_102c30db}
file-run2 | 100 points
Another program, but this time, it seems to want some input. What happens if you try to run it on the command line with input "Hello!"?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{F1r57_4rgum3n7_4653b5f6}
GDB Test Drive | 100 points
Can you get the flag?問題の ELF ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出すると、フラグに関係していそうな文字列が見える
さらに「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で逆アセンブルすると、スタックに文字列らしいものを格納している処理が見える
周辺の処理を観察すると、値 0x2F の加算や値 0x5E の減算で文字のキャラクターコードを操作しているように見える
「うさみみハリケーン」付属の解析練習用ソフト「 UsaTest2.EXE 」を起動して「うさみみハリケーン」でオープン
ツールバーの青色三角ボタン、メニューだと「移動」→「次のコミットエリアに移動」を3回で、アドレス 403000 に移動
アドレス 403000 から 412FFF までは、プロセスメモリ書き込み練習用領域なので自由に使える
メニューの「編集」→「選択アドレスへの直接書き込み・選択範囲の一括書き換え」で、アドレス 403000 にスタックへ格納しているバイト列を書き込む
書き込んだバイト列を選択後コピーしてアドレス 403030 にペーストし、ペーストしたバイト列を選択する
メニューの「編集」→「選択範囲への演算実行」で、アドレス 403030 以降のバイト列の各バイトに値 0x2F の加算を行う
さらに演算適用済みのバイト列を選択後コピーしてアドレス 403060 にペーストし、ペーストしたバイト列を選択後に値 0x5E の減算を行う
上記の演算結果で適切に変換できないバイトは値 0x00 で埋めて見やすくし、アドレス 4030A0 にフラグを作成する
メニューの「編集」→「指定メモリエリアから文字列を抽出」で、完成したフラグの文字列をコピーできる
picoCTF{d3bugg3r_dr1v3_7776d758}
Lookey here | 100 points
Attackers have hidden information in a very large mass of data in the past, maybe they are still doing it.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で YARAルールでスキャンする
付属の「 yara_rule_file.txt 」には、「 CTF 」タグで picoCTF 用ルールが含まれている
問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{gr3p_15_@w3s0m3_4554f5f5}
morse-code | 100 points
Morse code is well known. Can you decrypt this? Wrap your answer with picoCTF{}, put underscores in place of pauses, and use all lowercase.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でバイナリデータ視覚化表示すると、モールス符号の単点と長点が見える
ネット上のモールス符号対応表を参照してフラグを作成する
picoCTF{wh47_h47h_90d_w20u9h7}
Packets Primer | 100 points
Download the packet capture file and use packet analysis software to find the flag.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{p4ck37_5h4rk_d0565941}
Redaction gone wrong | 100 points
Now you DON’T see me. This report has some critical data in it, some of which have been redacted correctly, while some were not. Can you find an important key that was not redacted properly?「うさみみハリケーン」付属の簡易エクスプローラー「 Portable Explorer 」が実装している、 IFilter による各種ドキュメントファイルからの文字列抽出機能を使ってみる
PDF ファイル用の IFilter は Windows 10/11 に標準でインストールされているが、筆者の環境では「 PDF-XChange 」という PDF ビューアーのインストール時に、より正確に文字列抽出できる IFilter がインストールされていた
「 Portable Explorer 」上で問題のファイルを選択後、画面上の「拡張プロパティ」が表示されているコンボボックスで、「抽出した文字列」を選択してから「をコピー」ボタン押し下げ
上の操作で、Shift キーを押しながら「をコピー」ボタンを押し下げると、コピーした文字列の確認・編集・読み上げ用画面が表示される
picoCTF{C4n_Y0u_S33_m3_fully}
Safe Opener | 100 points
Can you open this safe? I forgot the key to my safe but this program is supposed to help me with retrieving the lost key. Can you help me unlock my safe? Put the password you recover into the picoCTF flag format like: picoCTF{password}問題の JAVA ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出すると、入力パスワードの照合時に Base64 を使用しているように見える
「うさみみハリケーン」付属の「 UMECappend 」で Base64 変換するとわかる
picoCTF{pl3as3_l3t_m3_1nt0_th3_saf3}
substitution0 | 100 points
A message has come in but it seems to be all scrambled. Luckily it seems to have the key at the beginning. Can you crack this substitution cipher?「うさみみハリケーン」付属の解析練習用ソフト「 UsaTest2.EXE 」を起動して「うさみみハリケーン」でオープン
ツールバーの青色三角ボタン、メニューだと「移動」→「次のコミットエリアに移動」を3回で、アドレス 403000 に移動
アドレス 403000 から 412FFF までは、プロセスメモリ書き込み練習用領域なので自由に使える
メニューの「編集」→「選択アドレスへの直接書き込み・選択範囲の一括書き換え」で、アドレス 403000 以降に、問題文で示された復号用のキーを書き込む
問題文から、キーはアルファベットを換字したものと推測されるため、換字前のアルファベットを併記する
同様にフラグ部分と推測される文字列を書き込み、換字前後の英字列を参照しながらフラグを完成させる
メニューの「編集」→「指定メモリエリアから文字列を抽出」で 復号後の文字列をコピーできる
picoCTF{5UB5717U710N_3V0LU710N_7B755B1A}
substitution1 | 100 points
A second message has come in the mail, and it seems almost identical to the first one. Maybe the same thing will work again.前問「 substitution0 」に続けて、「 UsaTest2.EXE 」のプロセスメモリを使用する
手動で、アドレス 4031C0 に換字対照用のA-Z英字列を書き込む
メニューの「編集」→「選択アドレスへの直接書き込み・選択範囲の一括書き換え」で、アドレス 403230 に問題文のフラグ部分を書き込む
問題文の先頭は単語の文字数から「 CTFs (short for Capture the flag) 」を暗号化したものと推定した
推定した文字列を Google で検索して見つかった原文を基に、換字後の英字列を作成する
換字後の英字列を参照しながらフラグを完成させるが、フラグ内の1文字だけは不明で、換字先の候補に残った JQRXZ のどれかとなる
メニューの「編集」→「指定メモリエリアから文字列を抽出」で 復号後の文字列をコピーし、不明箇所には上記 JQRXZ を当てはめながらフラグを投稿した
picoCTF{FR3QU3NCY_4774CK5_4R3_C001_E57444AC}
Fresh Java | 200 points
Can you get the flag?「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」を使って、ヘキサエディタで問題の JAVA ファイルを開くと、フラグの文字が間隔をあけて逆順に並んでいるのが見える
このような、フラグの文字が間隔をあけた逆順のケースに対応する YARA ルールの例は下記
$picoCTF_Flag_Text_Padding_Reverse = {7B [1-32] 46 [1-32] 54 [1-32] 43 [1-32] 6F [1-32] 63 [1-32] 69 [1-32] 70} //picoCTF2022
picoCTF{700l1ng_r3qu1r3d_c2475607}
Sleuthkit Apprentice | 200 points
Download this disk image and find the flag. Note: if you are using the webshell, download and extract the disk image into /tmp not your home directory.展開したディスクイメージのファイルを、「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で YARAルールでスキャンする
付属の「 yara_rule_file.txt 」には、「 CTF 」タグで picoCTF 用ルールが含まれている
「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」を使って、ヘキサエディタで問題のファイルを開くと、フラグの文字列が Unicode で格納されているのがみえる
問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出する
picoCTF{by73_5urf3r_152f373f}
Bbbbloat | 300 points
Can you get the flag? Reverse engineer this binary.問題の ELF ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で逆アセンブルすると、スタックに文字列らしいものを格納している処理が見える
周辺の処理を観察すると、値 0x2F の加算や値 0x5E の減算で文字のキャラクターコードを操作しているように見える
「うさみみハリケーン」付属の「 UMECappend 」で、スタックに格納される文字列の各文字のバイトに値 0x2F の加算を行う
16進数表示にして変換不能な文字のバイト部分を抜きだす
変換不能な文字のバイトに値 0x5E の減算を行う
変換結果をまとめてフラグを作成する
picoCTF{cu7_7h3_bl047_44f74a60}
St3g0 | 300 points
Download this image and find the flag.問題の PNG ファイルを、「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析すると、アルファチャンネルが操作されていることがわかる
問題画像の色情報のビットにデータが埋め込まれていないか確認してみる
ここで表示モードに「アルファチャンネルを無効化」を選んで表示画像を保存し、その保存画像を解析するアプローチもある
「ビット抽出前バイト列」つまり生画像データを表示してみると、データ先頭以降には LSB だけに値が格納された特徴的なバイト列が見える
画像の色情報の LSB を抽出するとわかる
picoCTF{7h3r3_15_n0_5p00n_1b8d71db}
unpackme | 300 points
Can you get the flag? Reverse engineer this binary.まず、問題の ELF ファイルをヒントに従って UPX ( Windows 用の upx.exe ) で展開する
展開した ELF ファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出すると、フラグに関係していそうな参照文字列が見える
さらに「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で逆アセンブルし、参照文字列のオフセットを検索すると、スタックに文字列らしいものを格納している処理が見える
周辺の処理を観察すると、値 0x2F の加算や値 0x5E の減算で文字のキャラクターコードを操作しているように見える
「うさみみハリケーン」付属の「 UMECappend 」で、スタックに格納される文字列の各文字のバイトに値 0x2F の加算を行う
16進数表示にして変換不能な文字のバイト部分を抜きだす
変換不能な文字のバイトに値 0x5E の減算を行う
変換結果をまとめてフラグを作成する
「うさみみハリケーン」の 64 ビット版「 UsaMimi64.exe 」と付属の 64 ビット版解析練習用ソフト「 UsaTest2_x64.exe 」で復号ルーチンを書き込んで実行するアプローチもある
「 UsaTest2_x64.exe 」を起動して「うさみみハリケーン」の 64 ビット版「 UsaMimi64.exe 」でオープン
メニューの「デバッグ」→「パラサイトルーチン作成」
復号ルーチンのアセンブリ言語ソースコードを記述してから「プレビュー」ボタンで問題がないか確認
今回は実行させるコードへのジャンプは不要なので、書き込む前に「ルーチンのみ」チェックボックスにチェックしておく
「ジャンプ+ルーチン書き込み」ボタンで、プレビューされたアセンブル後のバイナリデータをプロセスメモリに書き込む
※プログラムのコード内に任意の処理を注入する「パラサイトルーチン」の作り方は basic-mod2 を参照してください
メニューの「デバッグ」→「選択アドレスで CreateRemoteThread 関数実行」で、書き込んだ復号ルーチンのコード先頭から実行させるとフラグが出力される
picoCTF{up><_m3_f7w_5769b54e}
Wizardlike | 500 points
Do you seek your destiny in these deplorable dungeons? If so, you may want to look elsewhere. Many have gone before you and honestly, they've cleared out the place of all monsters, ne'erdowells, bandits and every other sort of evil foe. The dungeons themselves have seen better days too. There's a lot of missing floors and key passages blocked off. You'd have to be a real wizard to make any progress in this sorry excuse for a dungeon! Download the game. 'w', 'a', 's', 'd' moves your character and 'Q' quits. You'll need to improvise some wizardly abilities to find the flag in this dungeon crawl. '.' is floor, '#' are walls, '<' are stairs up to previous level, and '>' are stairs down to next level.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でバイナリデータ視覚化表示すると、マップデータらしきものが見える
目視で表示折り返し幅を調整し、マップ上の文字をつなぎ合わせるとわかる
picoCTF{ur_4_w1z4rd_4844AD6F}