{"componentChunkName":"component---src-templates-post-template-js","path":"/ctf-tjctf-2023-en","result":{"data":{"markdownRemark":{"id":"91eef7ef-87ef-537a-adc1-e3524ff486cc","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/ctf-tjctf-2023\">original page</a>.</p>\n</blockquote>\n<p>I participated in TJCTF 2023, which started on 5/26, as part of 0nePadding.</p>\n<p>We placed 71st out of 1,047 teams.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 898px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/0197aa4c8b564cf8d317d794a72d98d2/84cc5/image-20230529154531786.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 48.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAIAAAA7N+mxAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA3klEQVQoz4VSS3bDIAz0WSAGJEB866Tuc18P0G3P0DPk9pmkXSS2086Gh0YjjQRDCEFrfVhBa+uIpWwpRIwxKSWl1CAiCI2PQA5JjX0ZR7OhDta6nPOvGJXsPYwhDvW0tNcPL2XF4krEtVZYGF56hz5t8P0p5y9ZphRiyndxJJdS5nmGiwEz4zAbxDrl4zsGN48skp1z+WdmZlpvRWsXUuxvsO7zhIWsWJRA/6vYe7+7Uk4d4tFY3J5um5n3xIqlhjbD8V/iJ52VpcCp/fPORLT7SVhaaDfbeqdzjBHiC5NFXb/cDMtIAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/0197aa4c8b564cf8d317d794a72d98d2/8ac56/image-20230529154531786.webp 240w,\n/static/0197aa4c8b564cf8d317d794a72d98d2/d3be9/image-20230529154531786.webp 480w,\n/static/0197aa4c8b564cf8d317d794a72d98d2/005c4/image-20230529154531786.webp 898w\"\n              sizes=\"(max-width: 898px) 100vw, 898px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/0197aa4c8b564cf8d317d794a72d98d2/8ff5a/image-20230529154531786.png 240w,\n/static/0197aa4c8b564cf8d317d794a72d98d2/e85cb/image-20230529154531786.png 480w,\n/static/0197aa4c8b564cf8d317d794a72d98d2/84cc5/image-20230529154531786.png 898w\"\n            sizes=\"(max-width: 898px) 100vw, 898px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/0197aa4c8b564cf8d317d794a72d98d2/84cc5/image-20230529154531786.png\"\n            alt=\"image-20230529154531786\"\n            title=\"image-20230529154531786\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>This time I got the chance to solve a Crypto challenge for the first time in a while, and it reminded me that I need to keep working on categories I’m weak at too.</p>\n<p>As usual, I’ll write up the challenges that taught me something.</p>\n<!-- omit in toc -->\n<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ul>\n<li><a href=\"#scramblerev\">scramble(Rev)</a></li>\n<li><a href=\"#wtmoorev\">wtmoo(Rev)</a></li>\n<li><a href=\"#mayberev\">maybe(Rev)</a></li>\n<li><a href=\"#div3revrev\">div3rev(Rev)</a></li>\n<li><a href=\"#dreamrev\">dream(Rev)</a></li>\n<li><a href=\"#neofeudalismforensic\">neofeudalism(Forensic)</a></li>\n<li><a href=\"#ecrypto\">e(Crypto)</a></li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<h2 id=\"scramblerev\" style=\"position:relative;\"><a href=\"#scramblerev\" aria-label=\"scramblerev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>scramble(Rev)</h2>\n<blockquote>\n<p>oops, i think my siblings messed with the line order a little. The first three lines are given</p>\n</blockquote>\n<p>The challenge provided the following Python script.</p>\n<p>Running this code should recover the flag, but unfortunately every line after the third has been randomly shuffled, so it can no longer be executed correctly.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\">#first 3 lines are given</span>\n<span class=\"token keyword\">import</span> random\nseed <span class=\"token operator\">=</span> <span class=\"token number\">1000</span>\nrandom<span class=\"token punctuation\">.</span>seed<span class=\"token punctuation\">(</span>seed<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">#unscramble the rest</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">recur</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\nl2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">*</span><span class=\"token number\">5</span><span class=\"token operator\">+</span><span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">+</span>n<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\nl2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> inp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\nflag <span class=\"token operator\">=</span> <span class=\"token string\">\"\"</span>\nflag<span class=\"token operator\">+=</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>l4<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">^</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">return</span> flag\nl<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span>randint<span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">420</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nl3<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> l2<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">%</span>mod\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">decrypt</span><span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">assert</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">)</span><span class=\"token operator\">==</span>n<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">return</span> lst<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\nl <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmain<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\nl4 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">70</span><span class=\"token punctuation\">,</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token number\">53</span><span class=\"token punctuation\">,</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> <span class=\"token number\">58</span><span class=\"token punctuation\">,</span> <span class=\"token number\">105</span><span class=\"token punctuation\">,</span> <span class=\"token number\">109</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">108</span><span class=\"token punctuation\">,</span> <span class=\"token number\">116</span><span class=\"token punctuation\">,</span> <span class=\"token number\">21</span><span class=\"token punctuation\">,</span> <span class=\"token number\">67</span><span class=\"token punctuation\">,</span> <span class=\"token number\">69</span><span class=\"token punctuation\">,</span> <span class=\"token number\">238</span><span class=\"token punctuation\">,</span> <span class=\"token number\">47</span><span class=\"token punctuation\">,</span> <span class=\"token number\">102</span><span class=\"token punctuation\">,</span> <span class=\"token number\">110</span><span class=\"token punctuation\">,</span> <span class=\"token number\">114</span><span class=\"token punctuation\">,</span> <span class=\"token number\">84</span><span class=\"token punctuation\">,</span> <span class=\"token number\">83</span><span class=\"token punctuation\">,</span> <span class=\"token number\">68</span><span class=\"token punctuation\">,</span> <span class=\"token number\">113</span><span class=\"token punctuation\">,</span> <span class=\"token number\">72</span><span class=\"token punctuation\">,</span> <span class=\"token number\">112</span><span class=\"token punctuation\">,</span> <span class=\"token number\">54</span><span class=\"token punctuation\">,</span> <span class=\"token number\">121</span><span class=\"token punctuation\">,</span> <span class=\"token number\">104</span><span class=\"token punctuation\">,</span> <span class=\"token number\">103</span><span class=\"token punctuation\">,</span> <span class=\"token number\">41</span><span class=\"token punctuation\">,</span> <span class=\"token number\">124</span><span class=\"token punctuation\">]</span>\nl3<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">^</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">&amp;</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">+</span><span class=\"token punctuation\">(</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>mod<span class=\"token punctuation\">)</span><span class=\"token operator\">//</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>mod\n<span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">)</span><span class=\"token operator\">==</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">assert</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n<span class=\"token keyword\">return</span> recur<span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">/</span>recur<span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flag is:\"</span><span class=\"token punctuation\">,</span> decrypt<span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nl2<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>recur<span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">*</span><span class=\"token number\">50</span><span class=\"token punctuation\">)</span>\nl2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>n\nflag_length <span class=\"token operator\">=</span> <span class=\"token number\">31</span>\nmod <span class=\"token operator\">=</span> <span class=\"token number\">256</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">)</span>\nn <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span>\ninp <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>flag_length\nl3 <span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>n</code></pre></div>\n<p>First, I inferred the scope of each line from its variable names and organized them into the code for each function.</p>\n<p>I then rearranged the lines within each function so that the logic behaved as intended.</p>\n<p>The final code looked like this, and running it recovered the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> random\nseed <span class=\"token operator\">=</span> <span class=\"token number\">1000</span>\nrandom<span class=\"token punctuation\">.</span>seed<span class=\"token punctuation\">(</span>seed<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">recur</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">)</span><span class=\"token operator\">==</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">assert</span><span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">></span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">return</span> lst<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">return</span> recur<span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">/</span>recur<span class=\"token punctuation\">(</span>lst<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">decrypt</span><span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    mod <span class=\"token operator\">=</span> <span class=\"token number\">256</span>\n    n <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span>\n    l <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        l<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>random<span class=\"token punctuation\">.</span>randint<span class=\"token punctuation\">(</span><span class=\"token number\">6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">420</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">assert</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">)</span><span class=\"token operator\">==</span>n<span class=\"token punctuation\">)</span>\n\n    l2 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>n\n    l3 <span class=\"token operator\">=</span><span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>n\n    l4 <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">70</span><span class=\"token punctuation\">,</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> <span class=\"token number\">100</span><span class=\"token punctuation\">,</span> <span class=\"token number\">53</span><span class=\"token punctuation\">,</span> <span class=\"token number\">123</span><span class=\"token punctuation\">,</span> <span class=\"token number\">58</span><span class=\"token punctuation\">,</span> <span class=\"token number\">105</span><span class=\"token punctuation\">,</span> <span class=\"token number\">109</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">108</span><span class=\"token punctuation\">,</span> <span class=\"token number\">116</span><span class=\"token punctuation\">,</span> <span class=\"token number\">21</span><span class=\"token punctuation\">,</span> <span class=\"token number\">67</span><span class=\"token punctuation\">,</span> <span class=\"token number\">69</span><span class=\"token punctuation\">,</span> <span class=\"token number\">238</span><span class=\"token punctuation\">,</span> <span class=\"token number\">47</span><span class=\"token punctuation\">,</span> <span class=\"token number\">102</span><span class=\"token punctuation\">,</span> <span class=\"token number\">110</span><span class=\"token punctuation\">,</span> <span class=\"token number\">114</span><span class=\"token punctuation\">,</span> <span class=\"token number\">84</span><span class=\"token punctuation\">,</span> <span class=\"token number\">83</span><span class=\"token punctuation\">,</span> <span class=\"token number\">68</span><span class=\"token punctuation\">,</span> <span class=\"token number\">113</span><span class=\"token punctuation\">,</span> <span class=\"token number\">72</span><span class=\"token punctuation\">,</span> <span class=\"token number\">112</span><span class=\"token punctuation\">,</span> <span class=\"token number\">54</span><span class=\"token punctuation\">,</span> <span class=\"token number\">121</span><span class=\"token punctuation\">,</span> <span class=\"token number\">104</span><span class=\"token punctuation\">,</span> <span class=\"token number\">103</span><span class=\"token punctuation\">,</span> <span class=\"token number\">41</span><span class=\"token punctuation\">,</span> <span class=\"token number\">124</span><span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">*</span><span class=\"token number\">5</span><span class=\"token operator\">+</span><span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">+</span>n<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n        l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> inp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">)</span>\n    \n    l2<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>recur<span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">*</span><span class=\"token number\">50</span><span class=\"token punctuation\">)</span>\n    l3<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> l2<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token operator\">%</span>mod\n\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        l3<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>l2<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">^</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">&amp;</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">+</span><span class=\"token punctuation\">(</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>l<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>mod<span class=\"token punctuation\">)</span><span class=\"token operator\">//</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token operator\">%</span>mod\n\n    flag <span class=\"token operator\">=</span> <span class=\"token string\">\"\"</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        flag<span class=\"token operator\">+=</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>l4<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">^</span>l3<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n    <span class=\"token keyword\">return</span> flag\n    \n<span class=\"token keyword\">def</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    flag_length <span class=\"token operator\">=</span> <span class=\"token number\">31</span>\n    inp <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span>flag_length\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flag is:\"</span><span class=\"token punctuation\">,</span> decrypt<span class=\"token punctuation\">(</span>inp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\nmain<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h2 id=\"wtmoorev\" style=\"position:relative;\"><a href=\"#wtmoorev\" aria-label=\"wtmoorev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>wtmoo(Rev)</h2>\n<blockquote>\n<p>My cow keeps eating all my flags…</p>\n</blockquote>\n<p>When I ran the provided ELF and entered an arbitrary string, it printed the result of some transformation as shown below.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 333px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/3aeaf9047ba5eb6b654114618057224d/24c7e/image-20230529155309047.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 42.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAIAAAC9o5sfAAAACXBIWXMAAAsTAAALEwEAmpwYAAABZUlEQVQoz3WRWU/CUBCFSVQ2o5KwKQSkLchmd5a2toi2tSBCWRTEaAj6AvKi8f8nHpY0wWBykjt3OTPfnXFN9dFI7pik/Kr1x4qtxQSdkD/t90X3Y/Yw+R7Nv4YzBG+1wbw9sRmT8RD8YYbzpyFXX7C6nFkO5EdS+2e8aGRrrUL9sXTf562nSksnpFpcrCfKkHYmyCFmbduYr6KcEmbKgYIcouHH62bu+i6jWheaespJQZrxkrSHWMqdQrxlxp71URA2YC4enFeDl7epKkrhsLifBOdKW7aNeb3gG7SbqCdKqG+QylR/flF7HVq/SVb0lGQQMq7wjPVSO8xOCoBYGRVlO4yBAMXF4ywOlQjT462+0JDDjAPv+kOC3MBWo1wtJnRZU4mw+LlByksEQlKiXOkkz/mo3eaVn0RvWH96KLXRTuQyKMVmTXSksJf8F9uB5/1p8Sg7EJtrlpwrjhFg/uiLM2ToF+LLXIK9R2OfAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/3aeaf9047ba5eb6b654114618057224d/8ac56/image-20230529155309047.webp 240w,\n/static/3aeaf9047ba5eb6b654114618057224d/f885a/image-20230529155309047.webp 333w\"\n              sizes=\"(max-width: 333px) 100vw, 333px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/3aeaf9047ba5eb6b654114618057224d/8ff5a/image-20230529155309047.png 240w,\n/static/3aeaf9047ba5eb6b654114618057224d/24c7e/image-20230529155309047.png 333w\"\n            sizes=\"(max-width: 333px) 100vw, 333px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/3aeaf9047ba5eb6b654114618057224d/24c7e/image-20230529155309047.png\"\n            alt=\"image-20230529155309047\"\n            title=\"image-20230529155309047\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>I located the relevant transformation in Ghidra’s decompilation and cleaned it up, which showed that it was implemented as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'a'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token char\">'z'</span> <span class=\"token operator\">&lt;</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'A'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token char\">'Z'</span> <span class=\"token operator\">&lt;</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'0'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token char\">'4'</span> <span class=\"token operator\">&lt;</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'5'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span><span class=\"token char\">'9'</span> <span class=\"token operator\">&lt;</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token char\">'{'</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;&amp;</span> <span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">!=</span> <span class=\"token char\">'}'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"wtmoo is this guess???\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%c\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            uVar3 <span class=\"token operator\">=</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">goto</span> LAB_00401427<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">0x15</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token char\">'+'</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token char\">' '</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> input<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">0x3c</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\ni <span class=\"token operator\">=</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span> <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span> true <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>I also found that if the transformed input ultimately matches <code class=\"language-text\">\"8.\\'8*{;8m33[o[3[3[%\\\")#*\\\\}\"</code>, the program prints the correct flag.</p>\n<p>This transformation is applied to the input one character at a time, and there is no swapping between characters, so I could brute-force from the beginning with the following solver script to recover every character of the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">ans <span class=\"token operator\">=</span> <span class=\"token string\">\"8.\\'8*{;8m33[o[3[3[%\\\")#*\\\\}\"</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">256</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>c <span class=\"token operator\">&lt;</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"a\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">or</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"z\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>c <span class=\"token operator\">&lt;</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"A\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">or</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Z\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>c <span class=\"token operator\">&lt;</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"0\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">or</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"4\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>c <span class=\"token operator\">&lt;</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"5\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">or</span> <span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"9\"</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;</span> c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n                        <span class=\"token keyword\">if</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"{\"</span> <span class=\"token keyword\">or</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token string\">\"}\"</span><span class=\"token punctuation\">:</span>\n                            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n                            <span class=\"token keyword\">break</span>\n                    <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                        <span class=\"token keyword\">if</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token operator\">-</span><span class=\"token number\">0x15</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n                            <span class=\"token keyword\">break</span>\n                <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">if</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token operator\">+</span><span class=\"token number\">0x2b</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n                        <span class=\"token keyword\">break</span>            \n            <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">if</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token operator\">+</span><span class=\"token number\">0x20</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n                    <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token operator\">-</span><span class=\"token number\">0x3c</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n                <span class=\"token keyword\">break</span></code></pre></div>\n<p>After entering the recovered flag characters, the program printed the correct flag as shown below.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 393px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/2d7e8bd4917c85e8e261324ad714a242/d72ec/image-20230526210819844.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 37.5%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAICAYAAAD5nd/tAAAACXBIWXMAAAsTAAALEwEAmpwYAAABi0lEQVQoz21RaU/CUBBsjMghMRoTLxTk0hQKbYFyVk6Rw3IFQUQiaDQxfvL/fxnfrjRq4oftvu7bmZ2dJ90ZXYwzHVROM5y7chUp7wV6iQZGeotjYtxiUR5jmrPwZq2wbNxjWZvgiaJ6h7f2gnPFl4HUF8Dn6xlmhT7n1/YjA9+tJT6n71gJ8MfgGS/NB6599FeYl4aw4jW0oiZKhyqLKR6oMHZjkLJ7MdxESqieGWiGi+hclnEdKghAHZZS51o9kEMtkOWeRrCA8kka+nYUqisMxXHOkXAGkXSFINFHcQQQ3wxA90RxdayLs58VjFIt5PYVqO4wE5AV1CtvnCGxFeS65olAc/+ExIXtCF+ozhDygsAQqsnbuTnCrSA2j3SUfWmYYlgjmEfNnxWrakiKfiZyrYMJ3WsymibO1ERqiICA5BMpS+9cCo9ktqMrV3gIrcy4/wgp2ytQJis0QTxINtl080jDUG2iLTymobSyjbHF/Kxsk3r+kpJSehzdG2XvqNZTvv/t/t/+UXwB9Pz29aUX0AAAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/2d7e8bd4917c85e8e261324ad714a242/8ac56/image-20230526210819844.webp 240w,\n/static/2d7e8bd4917c85e8e261324ad714a242/8efa6/image-20230526210819844.webp 393w\"\n              sizes=\"(max-width: 393px) 100vw, 393px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/2d7e8bd4917c85e8e261324ad714a242/8ff5a/image-20230526210819844.png 240w,\n/static/2d7e8bd4917c85e8e261324ad714a242/d72ec/image-20230526210819844.png 393w\"\n            sizes=\"(max-width: 393px) 100vw, 393px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/2d7e8bd4917c85e8e261324ad714a242/d72ec/image-20230526210819844.png\"\n            alt=\"image-20230526210819844\"\n            title=\"image-20230526210819844\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h2 id=\"mayberev\" style=\"position:relative;\"><a href=\"#mayberev\" aria-label=\"mayberev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>maybe(Rev)</h2>\n<blockquote>\n<p>is this an easy rev challenge?? maybe … just maybe …</p>\n</blockquote>\n<p>Analyzing the provided ELF in Ghidra showed that it compares the input string with a byte sequence embedded in the binary using the expression <code class=\"language-text\">(array[i] ^ array[i + -4]) != flag[i + -4]</code>.</p>\n<p>Since the first six characters of the flag are known to be <code class=\"language-text\">tjctf{</code>, I wrote the following solver and reversed the process to recover the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">flag_arr <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span> <span class=\"token number\">0x12</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x11</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x00</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x15</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x0b</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x48</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x3c</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x12</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x0c</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x44</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x00</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x10</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x51</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x19</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x2e</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x16</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x03</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x1c</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x42</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x11</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x0a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x4a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x72</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x56</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x0d</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x7a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x74</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x4f</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x00</span> <span class=\"token punctuation\">]</span>\ntmp <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x21</span>\n<span class=\"token keyword\">for</span> i<span class=\"token punctuation\">,</span>c <span class=\"token keyword\">in</span> <span class=\"token builtin\">enumerate</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"tjctf{\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    tmp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">ord</span><span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># (array[i] ^ array[i + -4]) != flag[i + -4]</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x21</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">256</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> tmp<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> x <span class=\"token operator\">==</span> flag_arr<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">4</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            tmp<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> x\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span>\n\n<span class=\"token comment\"># tjctf{cam3_saw_c0nqu3r3d98A24B5}</span></code></pre></div>\n<h2 id=\"div3revrev\" style=\"position:relative;\"><a href=\"#div3revrev\" aria-label=\"div3revrev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>div3rev(Rev)</h2>\n<blockquote>\n<p>divide and conquer?</p>\n</blockquote>\n<p>The challenge provided the following Python script.</p>\n<p>For this CTF, a surprisingly large number of the Rev challenges involved recursive functions in Python.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">op1</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">8</span><span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">%</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">+</span><span class=\"token number\">75</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n        cur <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">420</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            cur <span class=\"token operator\">*=</span> <span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">+</span>j<span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">420</span>\n    <span class=\"token keyword\">return</span> b\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">op2</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> <span class=\"token number\">69</span>\n        b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+=</span> <span class=\"token number\">12</span>\n    <span class=\"token keyword\">return</span> b\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">op3</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">%</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">7</span><span class=\"token punctuation\">)</span><span class=\"token operator\">+</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token operator\">//</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> b\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">recur</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">return</span> b\n    <span class=\"token keyword\">assert</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">3</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span>\n    a <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">return</span> op1<span class=\"token punctuation\">(</span>recur<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">:</span>a<span class=\"token operator\">//</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token operator\">+</span>op2<span class=\"token punctuation\">(</span>recur<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span>a<span class=\"token operator\">//</span><span class=\"token number\">3</span><span class=\"token punctuation\">:</span><span class=\"token number\">2</span><span class=\"token operator\">*</span>a<span class=\"token operator\">//</span><span class=\"token number\">3</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token operator\">+</span>op3<span class=\"token punctuation\">(</span>recur<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token operator\">*</span>a<span class=\"token operator\">//</span><span class=\"token number\">3</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n\nflag <span class=\"token operator\">=</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flag.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nflag <span class=\"token operator\">=</span> flag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\nb <span class=\"token operator\">=</span> <span class=\"token builtin\">bytearray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nb<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">,</span> flag<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\nres <span class=\"token operator\">=</span> recur<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">if</span> res <span class=\"token operator\">==</span> <span class=\"token string\">b'\\x8c\\x86\\xb1\\x90\\x86\\xc9=\\xbe\\x9b\\x80\\x87\\xca\\x86\\x8dKJ\\xc4e?\\xbc\\xdbC\\xbe!Y \\xaf'</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"correct\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"oopsies\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Reading the code shows that applying the recursive <code class=\"language-text\">recur()</code> function to the correct flag string yields the byte string <code class=\"language-text\">res</code>.</p>\n<p>The implementation of <code class=\"language-text\">recur()</code> splits the given byte string into three parts and passes them to <code class=\"language-text\">op1</code>, <code class=\"language-text\">op2</code>, and <code class=\"language-text\">op3</code> respectively.</p>\n<p>If the byte string has only one element, it simply returns that value.</p>\n<p>I initially got stuck trying to invert each <code class=\"language-text\">op</code> function, but a closer look showed that each specific flag element is always processed in the same way, and no swapping occurs between byte positions.</p>\n<p>Therefore, by using only the correct flag length and brute-forcing characters from the beginning so that the final output matched, I was able to recover the flag.</p>\n<p>In the end, I recovered the flag with the following solver.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">ans <span class=\"token operator\">=</span> <span class=\"token string\">b'\\x8c\\x86\\xb1\\x90\\x86\\xc9=\\xbe\\x9b\\x80\\x87\\xca\\x86\\x8dKJ\\xc4e?\\xbc\\xdbC\\xbe!Y \\xaf'</span>\nflag <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"0\"</span><span class=\"token punctuation\">]</span><span class=\"token operator\">*</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">256</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        flag<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span>\n        b <span class=\"token operator\">=</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">.</span>join<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">)</span>\n        b <span class=\"token operator\">=</span> <span class=\"token builtin\">bytearray</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        b<span class=\"token punctuation\">.</span>extend<span class=\"token punctuation\">(</span><span class=\"token builtin\">map</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">ord</span><span class=\"token punctuation\">,</span> flag<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        res <span class=\"token operator\">=</span> recur<span class=\"token punctuation\">(</span>b<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\"># print(chr(x), res[i], ans[i])</span>\n        <span class=\"token keyword\">if</span> res<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>end<span class=\"token operator\">=</span><span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span>\n            <span class=\"token keyword\">break</span></code></pre></div>\n<h2 id=\"dreamrev\" style=\"position:relative;\"><a href=\"#dreamrev\" aria-label=\"dreamrev permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>dream(Rev)</h2>\n<blockquote>\n<p>A fever dream, truly.\nnc tjc.tf 31500</p>\n</blockquote>\n<p>Decompiling the provided ELF in Ghidra yields the following code.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\">undefined8 <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">void</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">int</span> iVar1<span class=\"token punctuation\">;</span>\n  ulong uVar2<span class=\"token punctuation\">;</span>\n  ulong uVar3<span class=\"token punctuation\">;</span>\n  FILE <span class=\"token operator\">*</span>__stream<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">long</span> in_FS_OFFSET<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> x<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> i<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">char</span> input <span class=\"token punctuation\">[</span><span class=\"token number\">256</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">char</span> local_118 <span class=\"token punctuation\">[</span><span class=\"token number\">264</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">long</span> local_10<span class=\"token punctuation\">;</span>\n  \n  local_10 <span class=\"token operator\">=</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>in_FS_OFFSET <span class=\"token operator\">+</span> <span class=\"token number\">0x28</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">setbuf</span><span class=\"token punctuation\">(</span><span class=\"token constant\">stdout</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"last night, I had a dream...\\ntaylor sw1ft, the dollar store version, appeared!\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"what should I do? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"sing\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"no, no, that\\'s a bad idea.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that\\'s a great idea!\\nI started to sing the following lyrics: \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"maybe I asked for too [many challenges to be written]\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"no, that\\'s a dumb lyric.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok... that\\'s a weird lyric but whatever\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that leads me to ask... how many challenges did you ask for??? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  uVar2 <span class=\"token operator\">=</span> <span class=\"token function\">atol</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> <span class=\"token number\">3</span> <span class=\"token operator\">^</span> <span class=\"token number\">0xb6d8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x521</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x5eb</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x55a</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that\\'s a stupid number.\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok yeah you\\'re asking too much of everyone; try to lower the number??? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  uVar3 <span class=\"token operator\">=</span> <span class=\"token function\">atol</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar3 <span class=\"token operator\">*</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x1e61</span> <span class=\"token operator\">|</span> <span class=\"token number\">0x457</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span> <span class=\"token operator\">-</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">1000</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x50</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yeah.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">%</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x1344224</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x33d5d816326aad</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok but they might think that\\'s too much comparatively, duh.\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that\\'s a lot more reasonable - good on you!\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">usleep</span><span class=\"token punctuation\">(</span><span class=\"token number\">75000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok, now that we\\'ve got that out of the way, back to the story...\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"taylor was like, \\\"wow, you\\'re so cool!\\\", and I said, \\\"no, you\\'re so cool!\\\"\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span>\n           <span class=\"token string\">\"after that, we kinda just sat in silence for a little bit. I could kinda tell I was losi ng her attention, so \"</span>\n           <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  x <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">0xc</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">=</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"what should I do next? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about some flags\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      x <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n      iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about her new album\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        x <span class=\"token operator\">=</span> x <span class=\"token operator\">*</span> x<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about her tour\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n          <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"no, that\\'s weird\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n          <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        x <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> <span class=\"token number\">0x16</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">!=</span> <span class=\"token number\">0x92f</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"taylor died of boredom\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span>\n           <span class=\"token string\">\"taylor got sick and tired of me asking her about various topics, so she finally responde d: \"</span>\n           <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  __stream <span class=\"token operator\">=</span> <span class=\"token function\">fopen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flag.txt\"</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>__stream <span class=\"token operator\">==</span> <span class=\"token punctuation\">(</span>FILE <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"no flag &lt;/3\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">fgets</span><span class=\"token punctuation\">(</span>local_118<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">,</span>__stream<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span>local_118<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>local_10 <span class=\"token operator\">!=</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>in_FS_OFFSET <span class=\"token operator\">+</span> <span class=\"token number\">0x28</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n    <span class=\"token function\">__stack_chk_fail</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>From this code, we can see that the binary accepts multiple inputs in sequence and only returns the flag if every check succeeds.</p>\n<p>The first two checks are simple string comparisons, so you can pass them by sending the following embedded strings in order.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sing\nmaybe I asked <span class=\"token keyword\">for</span> too <span class=\"token punctuation\">[</span>many challenges to be written<span class=\"token punctuation\">]</span></code></pre></div>\n<p>The next checks were implemented as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that leads me to ask... how many challenges did you ask for??? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nuVar2 <span class=\"token operator\">=</span> <span class=\"token function\">atol</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> <span class=\"token number\">3</span> <span class=\"token operator\">^</span> <span class=\"token number\">0xb6d8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x521</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x5eb</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x55a</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"that\\'s a stupid number.\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok yeah you\\'re asking too much of everyone; try to lower the number??? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\nuVar3 <span class=\"token operator\">=</span> <span class=\"token function\">atol</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar3 <span class=\"token operator\">*</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x1e61</span> <span class=\"token operator\">|</span> <span class=\"token number\">0x457</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span> <span class=\"token operator\">-</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">1000</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x50</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"yeah.\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">%</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x1344224</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x33d5d816326aad</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ok but they might think that\\'s too much comparatively, duh.\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>More specifically, we need to find <code class=\"language-text\">uVar2</code> and <code class=\"language-text\">uVar3</code> that satisfy all three of the following conditions.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token number\">1.</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> <span class=\"token number\">3</span> <span class=\"token operator\">^</span> <span class=\"token number\">0xb6d8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x521</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x5eb</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x55a</span>\n<span class=\"token number\">2.</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar3 <span class=\"token operator\">*</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x1e61</span> <span class=\"token operator\">|</span> <span class=\"token number\">0x457</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span> <span class=\"token operator\">-</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">1000</span> <span class=\"token operator\">!=</span> <span class=\"token number\">0x50</span><span class=\"token punctuation\">)</span>\n<span class=\"token number\">3.</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">%</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x1344224</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>uVar2 <span class=\"token operator\">*</span> uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x33d5d816326aad</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Values satisfying the first two conditions can be found easily by brute force, but brute-forcing values that satisfy the third condition is computationally impractical.</p>\n<p>So, based on the prime factorization of <code class=\"language-text\">0x33d5d816326aad</code> (<code class=\"language-text\">3*3*29*37*409*11071*333667</code>), I first generated pairs of values satisfying <code class=\"language-text\">uVar2 * uVar3 == 0x33d5d816326aad</code> and then checked whether they also satisfied conditions 1 and 2.</p>\n<p>In the end, the following solver identified <code class=\"language-text\">uVar2</code> and <code class=\"language-text\">uVar3</code> satisfying all three conditions.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 0x33D5D816326AAD = 3*3*29*37*409*11071*333667</span>\n<span class=\"token keyword\">import</span> itertools\nprimes <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span><span class=\"token number\">29</span><span class=\"token punctuation\">,</span><span class=\"token number\">37</span><span class=\"token punctuation\">,</span><span class=\"token number\">409</span><span class=\"token punctuation\">,</span><span class=\"token number\">11071</span><span class=\"token punctuation\">,</span><span class=\"token number\">333667</span><span class=\"token punctuation\">]</span>\np <span class=\"token operator\">=</span> <span class=\"token builtin\">set</span><span class=\"token punctuation\">(</span>primes<span class=\"token punctuation\">)</span>\ncheck <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>primes<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    comb <span class=\"token operator\">=</span> itertools<span class=\"token punctuation\">.</span>combinations<span class=\"token punctuation\">(</span>primes<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> c <span class=\"token keyword\">in</span> comb<span class=\"token punctuation\">:</span>\n        a <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n        b <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n        <span class=\"token keyword\">for</span> x <span class=\"token keyword\">in</span> p<span class=\"token punctuation\">.</span>difference<span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            a <span class=\"token operator\">*=</span> x\n        <span class=\"token keyword\">for</span> y <span class=\"token keyword\">in</span> c<span class=\"token punctuation\">:</span>\n            b <span class=\"token operator\">*=</span> y\n        <span class=\"token keyword\">if</span> a<span class=\"token operator\">*</span>b <span class=\"token operator\">==</span> <span class=\"token number\">0x33D5D816326AAD</span><span class=\"token punctuation\">:</span>\n            <span class=\"token comment\"># print(a,b)</span>\n            check<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span>b<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> t <span class=\"token keyword\">in</span> check<span class=\"token punctuation\">:</span>\n    a <span class=\"token operator\">=</span> t<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    b <span class=\"token operator\">=</span> t<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">*</span> <span class=\"token number\">3</span> <span class=\"token operator\">^</span> <span class=\"token number\">0xb6d8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x521</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x5eb</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x55a</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token number\">35</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span> <span class=\"token operator\">*</span> b <span class=\"token operator\">%</span> <span class=\"token number\">0x1E61</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">|</span> <span class=\"token number\">0x457</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x3E8</span> <span class=\"token operator\">==</span> <span class=\"token number\">80</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span>b<span class=\"token punctuation\">)</span>\n\n    a <span class=\"token operator\">=</span> t<span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    b <span class=\"token operator\">=</span> t<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a <span class=\"token operator\">*</span> <span class=\"token number\">3</span> <span class=\"token operator\">^</span> <span class=\"token number\">0xb6d8</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x521</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x5eb</span> <span class=\"token operator\">==</span> <span class=\"token number\">0x55a</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token number\">35</span> <span class=\"token operator\">*</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span> <span class=\"token operator\">*</span> b <span class=\"token operator\">%</span> <span class=\"token number\">0x1E61</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">|</span> <span class=\"token number\">0x457</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">%</span> <span class=\"token number\">0x3E8</span> <span class=\"token operator\">==</span> <span class=\"token number\">80</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>a<span class=\"token punctuation\">,</span>b<span class=\"token punctuation\">)</span></code></pre></div>\n<p>In the final check, the program updates <code class=\"language-text\">x</code> depending on whether the input string is <code class=\"language-text\">ask her about some flags</code>, <code class=\"language-text\">ask her about her new album</code>, or <code class=\"language-text\">ask her about her tour</code>, and verifies that the final result becomes <code class=\"language-text\">0x92f</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\">x <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;</span> <span class=\"token number\">0xc</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">=</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">prompt</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"what should I do next? \"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">,</span><span class=\"token number\">0x100</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\niVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about some flags\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  x <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n  iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about her new album\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    x <span class=\"token operator\">=</span> x <span class=\"token operator\">*</span> x<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n    iVar1 <span class=\"token operator\">=</span> <span class=\"token function\">strcmp</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ask her about her tour\"</span><span class=\"token punctuation\">,</span>input<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>iVar1 <span class=\"token operator\">!=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"no, that\\'s weird\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n      <span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    x <span class=\"token operator\">=</span> x <span class=\"token operator\">+</span> <span class=\"token number\">0x16</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">!=</span> <span class=\"token number\">0x92f</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n<span class=\"token function\">type_text</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"taylor died of boredom\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n                <span class=\"token comment\">/* WARNING: Subroutine does not return */</span>\n<span class=\"token function\">exit</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>However, the number of times you can enter a string is limited to <code class=\"language-text\">0xc</code>, so I needed to find the shortest valid sequence of inputs.</p>\n<p>Finding the shortest input sequence itself was not particularly difficult; I worked it out using a greedy approach and a calculator.</p>\n<p>The final input sequence was as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">sing\nmaybe I asked <span class=\"token keyword\">for</span> too <span class=\"token punctuation\">[</span>many challenges to be written<span class=\"token punctuation\">]</span>\n<span class=\"token number\">131313131</span>\n<span class=\"token number\">111111111</span>\nask her about her tour\nask her about her tour\nask her about some flags\nask her about some flags\nask her about some flags\nask her about some flags\nask her about her new album\nask her about her tour\nask her about her tour\nask her about some flags\nask her about some flags\nask her about some flags</code></pre></div>\n<p>Sending this to the remote server returned the flag.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/e1696bd6b40ecd8739e950f6921e588c/b30aa/image-20230527163707951.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 35.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAAsTAAALEwEAmpwYAAABFUlEQVQY032Q2U7CQBSG58bEpW5Q5UIMVWwLdJvuC1gspZRSaNlifP8n8W+rxgtj8uXkn8nMnG8O2WmLLV2Uyvzt0fZZddyhzu2Inr/oF7zO8AYjmJciln9CssG0UONcipbCJB9FM84Nu9a0a816LqrXlj1WwTntrN9AvysgOz3dG8uDmR3N1d7MSi1J+Ukmhkk/CB9M+3oIBfNKRH/jC6HOAiAHK4P2RonxCgIewh2fVYI7FW2dloSM5m5bqqvsthBkrw6kUOdokvKvCBs5LmmCn8snnHr6/D+QJx9+cbTzLU3e3XWFsw7uNYPhG7dGuKq/qXYGmCXBYGLOw6ijnoNpxU/euKM1VpCEfKPt/4Qa7Ns3w0/Q+0gRw2+nWgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/e1696bd6b40ecd8739e950f6921e588c/8ac56/image-20230527163707951.webp 240w,\n/static/e1696bd6b40ecd8739e950f6921e588c/d3be9/image-20230527163707951.webp 480w,\n/static/e1696bd6b40ecd8739e950f6921e588c/e46b2/image-20230527163707951.webp 960w,\n/static/e1696bd6b40ecd8739e950f6921e588c/bf5ae/image-20230527163707951.webp 1405w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/e1696bd6b40ecd8739e950f6921e588c/8ff5a/image-20230527163707951.png 240w,\n/static/e1696bd6b40ecd8739e950f6921e588c/e85cb/image-20230527163707951.png 480w,\n/static/e1696bd6b40ecd8739e950f6921e588c/d9199/image-20230527163707951.png 960w,\n/static/e1696bd6b40ecd8739e950f6921e588c/b30aa/image-20230527163707951.png 1405w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/e1696bd6b40ecd8739e950f6921e588c/d9199/image-20230527163707951.png\"\n            alt=\"image-20230527163707951\"\n            title=\"image-20230527163707951\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h2 id=\"neofeudalismforensic\" style=\"position:relative;\"><a href=\"#neofeudalismforensic\" aria-label=\"neofeudalismforensic permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>neofeudalism(Forensic)</h2>\n<blockquote>\n<p>One of my friends has gotten into neo-feudalism recently. He says that society should be more like a feudalist one, with unequal rights, legal protections, and wealth distribution.</p>\n<p>I found this weird photo on his computer; can you find a flag?</p>\n</blockquote>\n<p>The challenge provided the following PNG file.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 924px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/3fc0895a0ba5d9b51f27eb3641751ce6/9a1cf/image.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 148.74999999999997%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAIAAACjcKk8AAAACXBIWXMAAAsTAAALEwEAmpwYAAAG30lEQVQ4yx2VaVOaWRbHn68xNW+m5013J04mZjrRRINgEEhUVBQVRA2ILALPAwjIoiKisiqoICqyCC64tUY7IopssohRk9hJNDoRwUxXPsY8SdWpU6fq1u+ef53lXiA2w055wSOf9HhJ8m5Ncbap/rDZ9/G1+sI/8Pm16r97mkxIfxMzZ+OWXNL6NfXDkpZcfPw6bAIO3OChFzpeAN+uSs/WFR82FJ/9gxc72s9+9eW28iqgy0ZGbg7GszFz7mAsl7DeJmy3CQt813XUAqTmBScL0Psl6OPvnZ+25Oeb8rBDeLosy4W0V3uGq4AxExrOHliysdFsbPzmux/NwUJipkxsHDheFLxfFX/Y6Lr4Q3oT1R2u9Nl76GZB/ZFPchM1fQkaM0HjTWQkG4XNlA0bsxEjLAGOM1EzcLoi+nND+um14jLQn0uY4z7ltJJhAJs2x8BvKRPMf01O3QQ1uZAmGzZko3BOcxaGD8YyETNwtib6+Epy7ldeBAa+HU/EFxWtWCT5WclwJxmGv75x/++NKxfW3+4P/ICHs2E9LCQTMV2HYXgZ/Lgp+5G5783agKajsf35s+6WGkY52q5kfjt1/5Wy/HWgzUU0uejwd9vXZPc1N8Gh69AI8G5NfPaq+8Kv3JnkeQdYcxqhTc7yqjrcvayu+ipnH8M/If7DwruN6rMRQy5iyIZ1N2F9Bob3DTAsfb/R/edWT8QlWR8B3WrO0fpw0NXvVnFkZAK7AmsEaQoq8dw/lAkMZoLa692BzG5/Zl8P1xIumPhsQ5GalywMseSUymk5/WRdF3IpjGDzEIMkIVfJKDUCYkXA3nkbMX7e0Vzt6uDJ+RLUXQWHgXcrkg8bUr+1Y83ANUMUTiXGp+EErCKwCttcgiCjihtKipF5ecMC0slK32VAd76tuQzAI2C82jXCsrveL/HhCVnVtreXo1rQxRRUUSexsgFRhMy7K6MQ2jDPuDXlg4wGSyd12yr+sqeHR/ByR3O5owVOl8RHHu75utg/yiY9LexuretqLFc14xF37rAr0VB1xVQvdBF2xuYHlw0iaRPBJqN+2hq42FKdv9YCCRe0bWam3PzloTYF6fm+Q3m40L+mYdHQCDKiSNVOvtifugjZvoRGN8cl7S8wQmJl2qe8CQ1/2tYDKTe0O84MWjg6JmGEU/92TX261j/Xx6BjSsvu3bPJ27IRq98qNUHNZgGNhS/vaW0YE9M2RkXpJTWQdEHxGTDhhDTMKj2DGLCJo06ZgdlQV1hYkX9fz6p39bBo2NKSX/NeotFkFFLZ2tj4FDnAbHz3+xCQngUPZsDIFMchbZLU4hYG2QGrWNlUAxdMSq7qbalD/Hy3LP++tattiNHEJ+ClJALx6dMFDe90dQhIuXhbhraVAZpb1sLGofgEXHdLNetFGbuyzG/rMYtYzbjSV5bu5Nygq5ctJRNVdDKhqMg7yD17pQdiM1DYxl4fovpUNCtEJhQ8JBY96WrASxvxHmWHUyU4XDG/WdZEHIoZGVNOIuo5rSQUcmNM/HZFDWeG0l5hwgHG7OC6liUgYIp/+ZVQWPC9yaQqJaWOX1thl7bv2aQmXouYWMOpegHWVqwZ+QmPEki7uKlZYXiKG5nkLvZRhTWYit/u8yrKCAWPWkufcivQd/7295cY5NaIUMcml91/QEIiRPXVrl5Waq4XCFloS2qqT02z8evtQlLDk9+aSouUlOrSu3lQFVZYgy1/8KDk7p0WLAL/+GHRz78Ia1/QcWXO7vakpxtYVZMn+MQxLtFAr3aJKVTME/zjBwpKZRPiseolgYfHQZW4uoKC/H/8k/4cpWHUg3g0BVW8rOWmF5VAbLJ9Xds2LaZMisje7pdyMu4/P/2kpOJVrdUQHksofCSowmHv/av8Yf44r3lKRGVgUXAXRyBKwtsDpBwsv6l9Q89c1TKidtDQUU0pedRDrpDUPZcQcQpyZTsa1VrypIeEp2NQtQUFlJJiTP6/aRjkso4DpJzshIMTmuRF7VBwgqPvqN4aZs31UulohJCI9fUzPQq6hlbDxCHVbdW6jroxAcmjbFvRdkQcXUDCwUq6wdQsP+3tDExwt0zMw9lOn5o+DjXAS5pwS058ipizMzQJnSxITxblx4ty2B/Nyw7nFcDBND09yz2EefjrmOXHZviRaSjuFBzYeQcz0P60MOoUH3/HutKzwrRXkp4Tw6fJWWHK2wXEphl7VnrIxjx0c1NuXtzBjUzxdi0d4UludJoXsfNjTmHKI0m6O+MOQdAKBm3cuIMPL1JyVgxEp9n+UXrQ0pZ2d8CvQtrDT7oFhy5O2g3HgqM54cm84MgrPPQIjzyCpAOMO8GkE4w7eAm36P/ONsmN8/TrwgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/3fc0895a0ba5d9b51f27eb3641751ce6/8ac56/image.webp 240w,\n/static/3fc0895a0ba5d9b51f27eb3641751ce6/d3be9/image.webp 480w,\n/static/3fc0895a0ba5d9b51f27eb3641751ce6/c3b05/image.webp 924w\"\n              sizes=\"(max-width: 924px) 100vw, 924px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/3fc0895a0ba5d9b51f27eb3641751ce6/8ff5a/image.png 240w,\n/static/3fc0895a0ba5d9b51f27eb3641751ce6/e85cb/image.png 480w,\n/static/3fc0895a0ba5d9b51f27eb3641751ce6/9a1cf/image.png 924w\"\n            sizes=\"(max-width: 924px) 100vw, 924px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/3fc0895a0ba5d9b51f27eb3641751ce6/9a1cf/image.png\"\n            alt=\"image\"\n            title=\"image\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>Since it was a PNG file, I analyzed it with <code class=\"language-text\">zsteg</code> and recovered the flag embedded in the file.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">zsteg -a image.png</code></pre></div>\n<p>Reference: <a href=\"https://book.hacktricks.xyz/crypto-and-stego/stego-tricks\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Stego Tricks - HackTricks</a></p>\n<h2 id=\"ecrypto\" style=\"position:relative;\"><a href=\"#ecrypto\" aria-label=\"ecrypto permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>e(Crypto)</h2>\n<blockquote>\n<p>smol e</p>\n</blockquote>\n<p>The provided challenge files were the following Sage file and text file.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> Crypto<span class=\"token punctuation\">.</span>Util<span class=\"token punctuation\">.</span>number <span class=\"token keyword\">import</span> bytes_to_long\n\np <span class=\"token operator\">=</span> random_prime<span class=\"token punctuation\">(</span><span class=\"token number\">2</span> <span class=\"token operator\">^</span> <span class=\"token number\">650</span><span class=\"token punctuation\">)</span>\nq <span class=\"token operator\">=</span> random_prime<span class=\"token punctuation\">(</span><span class=\"token number\">2</span> <span class=\"token operator\">^</span> <span class=\"token number\">650</span><span class=\"token punctuation\">)</span>\nN <span class=\"token operator\">=</span> p<span class=\"token operator\">*</span>q\ne <span class=\"token operator\">=</span> <span class=\"token number\">5</span>\nflag <span class=\"token operator\">=</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"flag.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rb\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>strip<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nm <span class=\"token operator\">=</span> bytes_to_long<span class=\"token punctuation\">(</span><span class=\"token string\">b'the challenges flag is '</span> <span class=\"token operator\">+</span> flag<span class=\"token punctuation\">)</span>\nc <span class=\"token operator\">=</span> m <span class=\"token operator\">^</span> e <span class=\"token operator\">%</span> N\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"N: \"</span><span class=\"token punctuation\">,</span> N<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"C: \"</span><span class=\"token punctuation\">,</span> c<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"e: \"</span><span class=\"token punctuation\">,</span> e<span class=\"token punctuation\">)</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">N:  <span class=\"token number\">853008036761402960429244085500226305898326229049062709229066738337581395441559298620215547481097485360068401045559533084692445386310317304293873811639421668853703030998563380404046228010704173349786419154143323587451196441095743638783569173579503503557413613700490069592150975220823978641111437607374483116682547794651693986279540940965888470663234601045413512056249535670198419685119952947</span>\nC:  <span class=\"token number\">298700332507654723773580072855784292117810966958600234446114828082727445272393622869719877676272804981941548843479760604983256960593285221389548684954375981617049731866256547635842115184695147132731165168615990125469633018271766466825307769730709868985624843944432541800012321786587028293887532995722347604510229248766961319729482167555605707032678858635163105035385522888663577785577519392</span>\ne:  <span class=\"token number\">5</span></code></pre></div>\n<p>It appears to encrypt the flag using RSA.</p>\n<p>Since <code class=\"language-text\">e</code> is very small, I first thought a Low Public Exponent Attack might work, but unfortunately the condition <code class=\"language-text\">M**e &lt; N</code> is not satisfied, so it cannot be decrypted that way.</p>\n<p>However, reading the Sage file used for encryption shows that the first 23 characters of the plaintext are hardcoded.</p>\n<p>One attack against RSA is Coppersmith’s short-pad attack, which works when the difference between two plaintexts is sufficiently small. In this case, there also seems to be a technique called the stereotyped message attack, which applies Coppersmith’s method when the high-order bits of the plaintext are known and <code class=\"language-text\">e</code> is very small.</p>\n<p>Reference: <a href=\"https://qiita.com/ushigai_sub/items/7f6a84b23758e506b3c7#stereotyped-message-attack\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Security Camp 2021 Participation Report - Qiita</a></p>\n<p>Reference: <a href=\"https://gsdt.github.io/blog/2018/07/20/stereotyped-message-attack/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">RSA Attack: Stereotyped message attack | gsdt</a></p>\n<p>This challenge also satisfied those conditions, so I reused part of the code from the reference article, ran the following solver script in SageMath, and recovered the flag from the decrypted result.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># partial_m.sage</span>\nn<span class=\"token operator\">=</span><span class=\"token number\">853008036761402960429244085500226305898326229049062709229066738337581395441559298620215547481097485360068401045559533084692445386310317304293873811639421668853703030998563380404046228010704173349786419154143323587451196441095743638783569173579503503557413613700490069592150975220823978641111437607374483116682547794651693986279540940965888470663234601045413512056249535670198419685119952947</span>\nc<span class=\"token operator\">=</span><span class=\"token number\">298700332507654723773580072855784292117810966958600234446114828082727445272393622869719877676272804981941548843479760604983256960593285221389548684954375981617049731866256547635842115184695147132731165168615990125469633018271766466825307769730709868985624843944432541800012321786587028293887532995722347604510229248766961319729482167555605707032678858635163105035385522888663577785577519392</span>\ne<span class=\"token operator\">=</span><span class=\"token number\">5</span>\n\nprefix<span class=\"token operator\">=</span><span class=\"token number\">11149651487439933873850349163109051510832664011661210400</span>\nPR<span class=\"token punctuation\">.</span><span class=\"token operator\">&lt;</span>x<span class=\"token operator\">></span> <span class=\"token operator\">=</span> PolynomialRing<span class=\"token punctuation\">(</span>Zmod<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span><span class=\"token number\">2000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    p <span class=\"token operator\">=</span> prefix <span class=\"token operator\">&lt;&lt;</span> i\n    f <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>p <span class=\"token operator\">+</span> x<span class=\"token punctuation\">)</span><span class=\"token operator\">^</span>e <span class=\"token operator\">-</span> c\n    diff <span class=\"token operator\">=</span> f<span class=\"token punctuation\">.</span>small_roots<span class=\"token punctuation\">(</span>epsilon<span class=\"token operator\">=</span><span class=\"token number\">1</span><span class=\"token operator\">/</span><span class=\"token number\">30</span><span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">if</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>diff<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>diff<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">break</span></code></pre></div>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>This time I solved one Crypto challenge for the first time in quite a while—really quite a while.</p>\n<p>I’m still not very comfortable with Crypto, but algorithms like AES show up often in Rev as well, so I feel I really need to study it properly.</p>","fields":{"slug":"/ctf-tjctf-2023-en","tagSlugs":["/tag/ctf-en/","/tag/rev-en/","/tag/forensic-en/","/tag/crypto-en/","/tag/english/"]},"frontmatter":{"date":"2023-05-29","description":"This is a writeup for TJCTF 2023.","tags":["CTF (en)","Rev (en)","Forensic (en)","Crypto (en)","English"],"title":"TJCTF 2023 Writeup","socialImage":{"publicURL":"/static/c350279709f4d58ed3831b80a2ae4411/ctf-tjctf-2023.png"}}}},"pageContext":{"slug":"/ctf-tjctf-2023-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}