<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Beginner PicoMini 2022 on picoCTF Writeup</title><link>https://picoctf-writeup.pinjim.dev/tags/beginner-picomini-2022/</link><description>Recent content in Beginner PicoMini 2022 on picoCTF Writeup</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 13 Jul 2026 04:15:00 +0800</lastBuildDate><atom:link href="https://picoctf-writeup.pinjim.dev/tags/beginner-picomini-2022/index.xml" rel="self" type="application/rss+xml"/><item><title>Codebook</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/codebook/</link><pubDate>Mon, 13 Jul 2026 04:15:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/codebook/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/238"&gt;https://learn.cylabacademy.org/library/238&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;將 &lt;code&gt;codebook.txt&lt;/code&gt; 與 &lt;code&gt;code.py&lt;/code&gt; 下載到同個目錄中。
執行 &lt;code&gt;code.py&lt;/code&gt; 即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python code.py
picoCTF{c0d------------------82c}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;codebook.txt&lt;/code&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;azbycxdwevfugthsirjqkplomn
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;code&gt;code.py&lt;/code&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;35
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;36
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;37
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;38
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;39
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;40
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;41
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;42
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;43
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; random
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; sys
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x13&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x01&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x17&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x2c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x2f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x53&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x47&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5e&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x02&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3e&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x56&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x45&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x31&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x59&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x02&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x51&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x4c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x13&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;print_flag&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; codebook &lt;span style="color:#f92672"&gt;=&lt;/span&gt; open(&lt;span style="color:#e6db74"&gt;&amp;#39;codebook.txt&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;r&amp;#39;&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; password &lt;span style="color:#f92672"&gt;=&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;14&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;13&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;14&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; codebook[&lt;span style="color:#ae81ff"&gt;23&lt;/span&gt;]&lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;16&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt; codebook[&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;] &lt;span style="color:#f92672"&gt;+&lt;/span&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; codebook[&lt;span style="color:#ae81ff"&gt;25&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc, password)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(flag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FileNotFoundError&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;Couldn&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;t find codebook.txt. Did you download that file into the same directory as this script?&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;main&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print_flag()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; __name__ &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; main()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>convertme.py</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/convertme-py/</link><pubDate>Mon, 13 Jul 2026 04:00:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/convertme-py/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/239"&gt;https://learn.cylabacademy.org/library/239&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;使用 &lt;code&gt;wget&lt;/code&gt; 指令下載檔案。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://artifacts.picoctf.net/c/24/convertme.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用 &lt;code&gt;python&lt;/code&gt; 執行腳本，腳本惠要求將一個十進位數字轉為二進位，輸入後即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python convertme.py
If 16 is in decimal base, what is it in binary base?
Answer: 10000
That is correct! Here&amp;#39;s your flag: picoCTF{4ll-----------------b39}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;28
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;29
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;30
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;31
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;32
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;33
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;34
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;35
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; random
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x08&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x27&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x21&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x23&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x05&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x08&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x2a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5e&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1e&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x17&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x51&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x42&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x57&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x46&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x13&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;num &lt;span style="color:#f92672"&gt;=&lt;/span&gt; random&lt;span style="color:#f92672"&gt;.&lt;/span&gt;choice(range(&lt;span style="color:#ae81ff"&gt;10&lt;/span&gt;,&lt;span style="color:#ae81ff"&gt;101&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(&lt;span style="color:#e6db74"&gt;&amp;#39;If &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; str(num) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39; is in decimal base, what is it in binary base?&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ans &lt;span style="color:#f92672"&gt;=&lt;/span&gt; input(&lt;span style="color:#e6db74"&gt;&amp;#39;Answer: &amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ans_num &lt;span style="color:#f92672"&gt;=&lt;/span&gt; int(ans, base&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ans_num &lt;span style="color:#f92672"&gt;==&lt;/span&gt; num:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc, &lt;span style="color:#e6db74"&gt;&amp;#39;enkidu&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;That is correct! Here&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s your flag: &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; flag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(str(ans_num) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39; and &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; str(num) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39; are not equal.&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;except&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ValueError&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;That isn&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;t a binary number. Binary numbers contain only 1&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s and 0&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>fixme1.py</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme1-py/</link><pubDate>Mon, 13 Jul 2026 03:50:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme1-py/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/240"&gt;https://learn.cylabacademy.org/library/240&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;下載腳本並執行後可以發現在第 20 行的地方報錯。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ python fixme1.py
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; File &lt;span style="color:#e6db74"&gt;&amp;#34;/home/kali/workspace/fixme1.py&amp;#34;&lt;/span&gt;, line &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;That is correct! Here\&amp;#39;&lt;/span&gt;s your flag: &lt;span style="color:#960050;background-color:#1e0010"&gt;&amp;#39;&lt;/span&gt; + flag&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;IndentationError: unexpected indent
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;使用 &lt;code&gt;nano&lt;/code&gt; 或其他習慣的文字編輯器編輯檔案，將第 20 行最開頭的兩個空格刪除。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;nano fixme2.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要退出 &lt;code&gt;nano&lt;/code&gt; 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。
退出後再次執行 python 腳本即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python fixme1.py
That is correct! Here&amp;#39;s your flag: picoCTF{1nd-------------------c8f}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; random
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x08&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x27&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x21&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x23&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x00&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x46&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x2a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5c&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x55&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x53&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x43&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x56&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x14&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc, &lt;span style="color:#e6db74"&gt;&amp;#39;enkidu&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;That is correct! Here&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s your flag: &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; flag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>fixme2.py</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme2-py/</link><pubDate>Mon, 13 Jul 2026 03:40:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme2-py/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/241"&gt;https://learn.cylabacademy.org/library/241&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;下載腳本並執行後可以發現在第 22 行的地方報錯。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ python fixme2.py
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; File &lt;span style="color:#e6db74"&gt;&amp;#34;/home/kali/workspace/fixme2.py&amp;#34;&lt;/span&gt;, line &lt;span style="color:#ae81ff"&gt;22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ^^^^^^^^^
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;SyntaxError: invalid syntax. Maybe you meant &lt;span style="color:#e6db74"&gt;&amp;#39;==&amp;#39;&lt;/span&gt; or &lt;span style="color:#e6db74"&gt;&amp;#39;:=&amp;#39;&lt;/span&gt; instead of &lt;span style="color:#e6db74"&gt;&amp;#39;=&amp;#39;&lt;/span&gt;?
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;使用 &lt;code&gt;nano&lt;/code&gt; 或其他習慣的文字編輯器編輯檔案，將第 22 行的 &lt;code&gt;=&lt;/code&gt; 改成 &lt;code&gt;==&lt;/code&gt;。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;nano fixme2.py
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要退出 &lt;code&gt;nano&lt;/code&gt; 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。
退出後再次執行 python 腳本即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python fixme2.py
That is correct! Here&amp;#39;s your flag: picoCTF{3qu--------------------------efc}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;27
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; random
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x07&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x08&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x06&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x27&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x21&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x23&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x15&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x58&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x18&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x11&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x41&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x09&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x10&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x3b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x55&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x34&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x51&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x54&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x09&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x05&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x04&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x57&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x1b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x11&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x31&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x5f&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x05&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x40&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x04&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0b&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0d&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x0a&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x19&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc, &lt;span style="color:#e6db74"&gt;&amp;#39;enkidu&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Check that flag is not empty&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;String XOR encountered a problem, quitting.&amp;#39;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#39;That is correct! Here&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\&amp;#39;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;s your flag: &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;+&lt;/span&gt; flag)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Glitch Cat</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/glitch-cat/</link><pubDate>Mon, 13 Jul 2026 03:10:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/glitch-cat/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/242"&gt;https://learn.cylabacademy.org/library/242&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;啟動題目並使用 &lt;code&gt;nc&lt;/code&gt; 連線後，會得到一個包含 &lt;code&gt;chr(0x61)&lt;/code&gt; 的字串。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ nc saturn.picoctf.net 65005
&amp;#39;picoCTF{gl17ch_m3_n07_&amp;#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + &amp;#39;}&amp;#39;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;要解讀該字串有幾種方法，可以手動對照 ASCII 16 進為，或是直接使用 python 印出字串，就會自動轉成原始字元。使用 &lt;code&gt;python&lt;/code&gt; 指令啟動 python 環境，用 &lt;code&gt;print&lt;/code&gt; 將字串印出。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; print(&amp;#39;picoCTF{gl17ch_m3_n07_&amp;#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + &amp;#39;}&amp;#39;)
picoCTF{gl1----------------d2e}
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>HashingJobApp</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/hashingjobapp/</link><pubDate>Mon, 13 Jul 2026 03:00:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/hashingjobapp/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/243"&gt;https://learn.cylabacademy.org/library/243&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;啟動題目後，使用 &lt;code&gt;nc&lt;/code&gt; 指令連線後，題目會提供一個字串，要求使用 md5 雜湊後的值，輸入正確三次即可得到 flag。可以搜尋 md5 雜湊工具、&lt;a href="https://gchq.github.io/CyberChef/#recipe=MD5()"&gt;cyberchek&lt;/a&gt;、或是使用 &lt;code&gt;md5sum&lt;/code&gt; 指令。
&lt;code&gt;md5sum&lt;/code&gt; 使用方式：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ echo -n &amp;#34;caffeine&amp;#34; | md5sum
e724f8b8a8349afb5beaeaa300323933 -
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;實際連線：&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ nc saturn.picoctf.net 56275
Please md5 hash the text between quotes, excluding the quotes: &amp;#39;caffeine&amp;#39;
Answer:
e724f8b8a8349afb5beaeaa300323933
e724f8b8a8349afb5beaeaa300323933
Correct.
Please md5 hash the text between quotes, excluding the quotes: &amp;#39;Japan&amp;#39;
Answer:
53a577bb3bc587b0c28ab808390f1c9b
53a577bb3bc587b0c28ab808390f1c9b
Correct.
Please md5 hash the text between quotes, excluding the quotes: &amp;#39;hangnails&amp;#39;
Answer:
7e3193d5ef5d764bfd8874dda4b5253a
7e3193d5ef5d764bfd8874dda4b5253a
Correct.
picoCTF{4pp-----------------------de2}
&lt;/code&gt;&lt;/pre&gt;</description></item><item><title>PW Crack 1</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-1/</link><pubDate>Mon, 13 Jul 2026 02:45:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-1/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/245"&gt;https://learn.cylabacademy.org/library/245&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;將 &lt;code&gt;level1.py&lt;/code&gt; 以及 &lt;code&gt;level1.flag.txt.enc&lt;/code&gt; 兩個檔案放在同個目錄下。
可以看到 &lt;code&gt;level1.py&lt;/code&gt; 第 19 行有寫出密碼&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;user_pw == &amp;#34;1e1a&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;執行腳本後輸入密碼 &lt;code&gt;1e1a&lt;/code&gt; 即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python level1.py
Please enter correct password for flag: 1e1a
Welcome back... your flag, user:
picoCTF{545---------------060}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;level1.py&lt;/code&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;27
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;###############################################################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; open(&lt;span style="color:#e6db74"&gt;&amp;#39;level1.flag.txt.enc&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;level_1_pw_check&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user_pw &lt;span style="color:#f92672"&gt;=&lt;/span&gt; input(&lt;span style="color:#e6db74"&gt;&amp;#34;Please enter correct password for flag: &amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;( user_pw &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;1e1a&amp;#34;&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;Welcome back... your flag, user:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; decryption &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;decode(), user_pw)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(decryption)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;That password is incorrect&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;level_1_pw_check()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>PW Crack 2</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-2/</link><pubDate>Mon, 13 Jul 2026 02:30:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-2/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/246"&gt;https://learn.cylabacademy.org/library/246&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;將 &lt;code&gt;level2.py&lt;/code&gt; 以及 &lt;code&gt;level2.flag.txt.enc&lt;/code&gt; 兩個檔案放在同個目錄下。
查看題目原始碼，可以看到第 18 行，有寫出 &lt;code&gt;user_pw&lt;/code&gt; 的值在等於多少的情況下，會通過。
將 &lt;code&gt;user_pw&lt;/code&gt; 的 16 進位 ASCII 轉成字元是 &lt;code&gt;39ce&lt;/code&gt;。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;user_pw == chr(0x33) + chr(0x39) + chr(0x63) + chr(0x65)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;執行腳本後輸入 &lt;code&gt;39ce&lt;/code&gt; 密碼即可得到 flag。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python3 level2.py
Please enter correct password for flag: 39ce
Welcome back... your flag, user:
picoCTF{tr4----------------42e}
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="題目原始碼"&gt;題目原始碼&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;level2.py&lt;/code&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 2
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 3
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 4
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 5
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 6
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 7
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 8
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt; 9
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;10
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;11
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;12
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;13
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;14
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;15
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;16
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;17
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;18
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;19
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;20
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;21
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;22
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;23
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;24
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;25
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;26
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;27
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;str_xor&lt;/span&gt;(secret, key):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;#extend key to secret length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; key
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; len(new_key) &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; len(secret):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; new_key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; new_key &lt;span style="color:#f92672"&gt;+&lt;/span&gt; key[i]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; (i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;) &lt;span style="color:#f92672"&gt;%&lt;/span&gt; len(key)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join([chr(ord(secret_c) &lt;span style="color:#f92672"&gt;^&lt;/span&gt; ord(new_key_c)) &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; (secret_c,new_key_c) &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(secret,new_key)])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;###############################################################################&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag_enc &lt;span style="color:#f92672"&gt;=&lt;/span&gt; open(&lt;span style="color:#e6db74"&gt;&amp;#39;level2.flag.txt.enc&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;rb&amp;#39;&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;read()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;level_2_pw_check&lt;/span&gt;():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user_pw &lt;span style="color:#f92672"&gt;=&lt;/span&gt; input(&lt;span style="color:#e6db74"&gt;&amp;#34;Please enter correct password for flag: &amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt;( user_pw &lt;span style="color:#f92672"&gt;==&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x33&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x39&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x63&lt;/span&gt;) &lt;span style="color:#f92672"&gt;+&lt;/span&gt; chr(&lt;span style="color:#ae81ff"&gt;0x65&lt;/span&gt;) ):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;Welcome back... your flag, user:&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; decryption &lt;span style="color:#f92672"&gt;=&lt;/span&gt; str_xor(flag_enc&lt;span style="color:#f92672"&gt;.&lt;/span&gt;decode(), user_pw)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(decryption)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;That password is incorrect&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;level_2_pw_check()&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;</description></item><item><title>runme.py</title><link>https://picoctf-writeup.pinjim.dev/posts/general-skills/runme-py/</link><pubDate>Mon, 13 Jul 2026 02:15:00 +0800</pubDate><guid>https://picoctf-writeup.pinjim.dev/posts/general-skills/runme-py/</guid><description>&lt;h2 id="題目連結"&gt;題目連結&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://learn.cylabacademy.org/library/250"&gt;https://learn.cylabacademy.org/library/250&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="題目解法"&gt;題目解法&lt;/h2&gt;
&lt;p&gt;這題題目官方希望可以學習使用 &lt;code&gt;wget&lt;/code&gt; 和 &lt;code&gt;python&lt;/code&gt; 執行指令。假設只是要拿到 flag，可以直接下載後打開查看。
以下是官方希望的做法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;從網站複製檔案連結，到 webshell 或是自己的 linux 主機使用 &lt;code&gt;wget&lt;/code&gt; 指令下載檔案。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;wget https://artifacts.picoctf.net/c/34/runme.py
&lt;/code&gt;&lt;/pre&gt;&lt;ol start="2"&gt;
&lt;li&gt;下載後得到一個 &lt;code&gt;runme.py&lt;/code&gt; 檔案，使用 &lt;code&gt;python3&lt;/code&gt; 指令執行，即可得到 flag。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ python3 runme.py
picoCTF{run--------run}
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>