{"componentChunkName":"component---src-templates-post-template-js","path":"/ctf-seccon-ctf-2023-en","result":{"data":{"markdownRemark":{"id":"db44bf86-b26f-5439-9e9f-90bf6a42666a","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/ctf-seccon-ctf-2023\">original page</a>.</p>\n</blockquote>\n<p>I participated in the SECCON CTF 2023 qualifying round (held from 9/16 to 9/17) as part of the team 0nePadding.</p>\n<p>Individually, I solved 2 Rev challenges, finishing 35th domestically and 87th overall.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 956px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/51c092ab690900c94d15f611ecea31f0/7b1dc/image-20230917221935162.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: 29.583333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAxElEQVQY05WR6wrCMAyF9/6vNkUEUeZl07mJc/6dbXo7pnEbIkP0wEdo054maZIXJ6w3GbJsh9l8idV6hzRdYLvPYZ1DVAjhZ5LrtcG5qrE/HHEscuTZDFXJsShhjMG/Srqug9aEhyJYqxF0yyWRJL33cI7h6H0Y1xIniPsJUTTqW+vhu5L0IYxGWmuu2EpbfnzgEzas6gtu7R3RWGkFpZS0SobkwKCmaVHwvL9JZkhkxECwVqqw9oXjTxkgzsfRvO9N8QQ8oNRLVTywgAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/51c092ab690900c94d15f611ecea31f0/8ac56/image-20230917221935162.webp 240w,\n/static/51c092ab690900c94d15f611ecea31f0/d3be9/image-20230917221935162.webp 480w,\n/static/51c092ab690900c94d15f611ecea31f0/409e5/image-20230917221935162.webp 956w\"\n              sizes=\"(max-width: 956px) 100vw, 956px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/51c092ab690900c94d15f611ecea31f0/8ff5a/image-20230917221935162.png 240w,\n/static/51c092ab690900c94d15f611ecea31f0/e85cb/image-20230917221935162.png 480w,\n/static/51c092ab690900c94d15f611ecea31f0/7b1dc/image-20230917221935162.png 956w\"\n            sizes=\"(max-width: 956px) 100vw, 956px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/51c092ab690900c94d15f611ecea31f0/7b1dc/image-20230917221935162.png\"\n            alt=\"image-20230917221935162\"\n            title=\"image-20230917221935162\"\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>The top 10 domestic teams that qualify for the SECCON national finals are still a high wall to clear, but I intend to keep grinding.</p>\n<p>Since reviewing the unsolved problems will take time, I’ll write up the ones I actually solved for now.</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=\"#jumpoutrev\">jumpout(Rev)</a></li>\n<li><a href=\"#sicklerev\">Sickle(Rev)</a></li>\n<li><a href=\"#summary\">Summary</a></li>\n</ul>\n<h2 id=\"jumpoutrev\" style=\"position:relative;\"><a href=\"#jumpoutrev\" aria-label=\"jumpoutrev 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>jumpout(Rev)</h2>\n<blockquote>\n<p>Sequential execution</p>\n</blockquote>\n<p>This was the Warmup Rev challenge of the contest.</p>\n<p>In terms of difficulty of obtaining the flag it was relatively easy, but it was an extremely interesting problem that gave me the strong impression that the author is deeply familiar with binaries and debuggers. (I’d love to see the source code for this — how was it even made…?)</p>\n<p>The binary itself appeared to be a simple program that just validates a flag received as input, so I analyzed it with Ghidra.</p>\n<p>Following the usual approach of analyzing the binary from <code class=\"language-text\">entry</code> and identifying the <code class=\"language-text\">main</code> function, I could see that it was calling something using the text <code class=\"language-text\">FLAG:</code>, but the Listing window output was corrupted and the decompilation was not working correctly.</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/b6732f4040c49a6403ed3af9a7e83a0a/20c85/image-20230917223341237.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: 86.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAARCAYAAADdRIy+AAAACXBIWXMAAAsTAAALEwEAmpwYAAACFElEQVQ4y61T666jIBjs+z/g/jh7TnqvVqu1AgJymR2otrrZTc4mS/IFgzDMzDdsRjvC2oBxBISwUIofCAjRswLScM7hcDhBDWlvzAVERE4xxlzz2FyvFYpCouvA0lDSQkqJXhr48AY8Hk+4dwqD7gng8voMNgOmeVNXNcpS4fF4AlrrcW9rNM0DxmoyN7Ckv98fcblqNG2FYah52ZvVDJYZVmRYXRWBAK1HAnjI4U4QA+dd3ugcAbdbCDLXOlW6WHGds7MvazJDrU1mlUYCTN8u+NXtSfJut0ff1/S5pB0drBFUIKA5jwl0smcjJX2h2YmxMS4zNNyA+JZhjcb28ycZCkglMdKK6fxC88TwWla43dTEJOSbOspa+uK9J8Md2tbS6wEP8UVbSjj+9pQbmYiI2cMqNeAJmNh5H9AblX1ZAe4P6O6KjTujrn+guR0glGD1ZN3Du5BVsikJcFgBPgiYIjMDpqbsPj94cKQ99JpF++CUx5hKs3FcC36KTdvMkn2WPDPEJMPT093XBxviuCfl7v1vZWKSfDhVODOH7Af6gZExAaVg9/hghjGyAMWf50uB+Or++pUsi02p6clTco4MJbeDyAdCeFpt+TyL0/kVjd9fx3JMHk6Sk4dZspzj/8phURQrwL+NFeCyy0sW/wVwedDxLRfn0/cAl8F+xUb/AfDyTcDm1jKwevVSpB3WgP8g+Rew0TIRHDF1yAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b6732f4040c49a6403ed3af9a7e83a0a/8ac56/image-20230917223341237.webp 240w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/d3be9/image-20230917223341237.webp 480w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/e46b2/image-20230917223341237.webp 960w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/5375e/image-20230917223341237.webp 999w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b6732f4040c49a6403ed3af9a7e83a0a/8ff5a/image-20230917223341237.png 240w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/e85cb/image-20230917223341237.png 480w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/d9199/image-20230917223341237.png 960w,\n/static/b6732f4040c49a6403ed3af9a7e83a0a/20c85/image-20230917223341237.png 999w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b6732f4040c49a6403ed3af9a7e83a0a/d9199/image-20230917223341237.png\"\n            alt=\"image-20230917223341237\"\n            title=\"image-20230917223341237\"\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>However, looking at the function referenced in <code class=\"language-text\">main</code> at address 0x1011d0, while the decompilation was still broken, I could tell that the (probably) input characters on the stack were being passed to a <code class=\"language-text\">check</code> function. (The <code class=\"language-text\">check</code> function name was one I renamed myself.)</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/ee646fff513f0fc4d8302bece38d923d/d7e70/image-20230917224759189.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: 18.75%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAAAsTAAALEwEAmpwYAAABAklEQVQY00XJXU+CYACGYf7/H+io1sxa67Cj5himAga+YH6gxssroeHc1PIj0dJ1R3XQwbV7ex5tHK+YJOvciuUsY7/Zs1tnrBcb3uYLXNendFdFL1mUDZt7w6LhCHyvSdN/pNVs0W516La7BN0ArbPsMchSgo0ieJeooyI6DolJSA8TlBrSDwOeVB/5HCGTiGgkf8kkzLc/4Y84RDsZn3I2v6WwuuFqe03h9ZzLbZHi4QIjKyPjHk5i4IxN7IFDPRTUZSPn8aA8nJHAfRF5PdxUoOmTCs62g7vzaezzc2chPgXelyD8CGnHAXpqYc5qmNNqrkZtWqE6NbHmNtbin537BqsZGDYjRT9AAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/ee646fff513f0fc4d8302bece38d923d/8ac56/image-20230917224759189.webp 240w,\n/static/ee646fff513f0fc4d8302bece38d923d/d3be9/image-20230917224759189.webp 480w,\n/static/ee646fff513f0fc4d8302bece38d923d/e46b2/image-20230917224759189.webp 960w,\n/static/ee646fff513f0fc4d8302bece38d923d/3cc91/image-20230917224759189.webp 1286w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/ee646fff513f0fc4d8302bece38d923d/8ff5a/image-20230917224759189.png 240w,\n/static/ee646fff513f0fc4d8302bece38d923d/e85cb/image-20230917224759189.png 480w,\n/static/ee646fff513f0fc4d8302bece38d923d/d9199/image-20230917224759189.png 960w,\n/static/ee646fff513f0fc4d8302bece38d923d/d7e70/image-20230917224759189.png 1286w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/ee646fff513f0fc4d8302bece38d923d/d9199/image-20230917224759189.png\"\n            alt=\"image-20230917224759189\"\n            title=\"image-20230917224759189\"\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>The <code class=\"language-text\">check</code> function looked like this:</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\">undefined8 <span class=\"token function\">check</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>param_1<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">long</span> lVar1<span class=\"token punctuation\">;</span>\n  <span class=\"token class-name\">size_t</span> sVar2<span class=\"token punctuation\">;</span>\n  ulong uVar3<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">long</span> in_FS_OFFSET<span class=\"token punctuation\">;</span>\n  \n  lVar1 <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  sVar2 <span class=\"token operator\">=</span> <span class=\"token function\">strlen</span><span class=\"token punctuation\">(</span>param_1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sVar2 <span class=\"token operator\">==</span> <span class=\"token number\">0x1d</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">do</span> <span class=\"token punctuation\">{</span>\n      uVar3 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">do</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">FUN_00101360</span><span class=\"token punctuation\">(</span>param_1<span class=\"token punctuation\">[</span>uVar3<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>uVar3 <span class=\"token operator\">&amp;</span> <span class=\"token number\">0xffffffff</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        uVar3 <span class=\"token operator\">=</span> uVar3 <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>uVar3 <span class=\"token operator\">!=</span> <span class=\"token number\">0x1d</span><span class=\"token punctuation\">)</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>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>lVar1 <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\">1</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 correct flag length is 0x1d.</p>\n<p>We can also see that it calls a function called <code class=\"language-text\">FUN_00101360</code> with a single input character and its index as arguments.</p>\n<p><code class=\"language-text\">FUN_00101360</code> is a function like the following — it returns the XOR of four values: one input character, its index, 0x55, and <code class=\"language-text\">(&amp;DAT_00104010)[index]</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\">uint <span class=\"token function\">FUN_00101360</span><span class=\"token punctuation\">(</span>uint param_1<span class=\"token punctuation\">,</span>uint param_2<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">long</span> in_FS_OFFSET<span class=\"token punctuation\">;</span>\n  \n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</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 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 keyword\">long</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>param_2<span class=\"token punctuation\">,</span>param_2<span class=\"token punctuation\">,</span><span class=\"token number\">7</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token keyword\">return</span> param_1 <span class=\"token operator\">^</span> param_2 <span class=\"token operator\">^</span> <span class=\"token number\">0x55</span> <span class=\"token operator\">^</span> <span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>byte<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span><span class=\"token operator\">&amp;</span>DAT_00104010<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>param_2<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>However, as you can see from the decompilation of <code class=\"language-text\">check</code> we looked at earlier, there is no code in the decompiled output that handles the return value of <code class=\"language-text\">FUN_00101360</code>.</p>\n<p>My hypothesis was that it probably compares the returned value against some hardcoded value to perform verification, but that function’s decompilation also appeared broken and was not in a state where the correct behavior could be read.</p>\n<p>Since that wasn’t working, I read the assembly of the <code class=\"language-text\">check</code> function and found that it was loading data from <code class=\"language-text\">DAT_00104030</code>, which seemed likely to be used later.</p>\n<p>There was some guesswork involved, but I created the following solver using that data as the comparison target and was able to obtain the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">d <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span> <span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x31</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xc8</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x81</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x15</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x14</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x68</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x35</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xe5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x3e</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x82</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x09</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xca</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x8a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xa9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xdf</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xdf</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x33</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x2a</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x6d</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x81</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xa6</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x85</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xdf</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x17</span> <span class=\"token punctuation\">]</span>\n\ne <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span> <span class=\"token number\">0xf0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xe4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x25</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xdd</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x9f</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x0b</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x3c</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x50</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xde</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x04</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xca</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x3f</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xaf</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x30</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xc7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xaa</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xb2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xfd</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xef</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x17</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x18</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x57</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xb4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xd0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x8f</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xb8</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xf4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x23</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x00</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\">0x1d</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 builtin\">chr</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x55</span><span class=\"token operator\">^</span> i <span class=\"token operator\">^</span> d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> e<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><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></code></pre></div>\n<p>During the contest I reached the above solver smoothly, but looking back at it afterward, the binary was quite difficult to read and seemed to assume dynamic analysis.</p>\n<p>That said, the broad strokes don’t change — once you’ve identified the <code class=\"language-text\">check</code> function, following the detailed behavior with a debugger will lead you to the same conclusion.</p>\n<h2 id=\"sicklerev\" style=\"position:relative;\"><a href=\"#sicklerev\" aria-label=\"sicklerev 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>Sickle(Rev)</h2>\n<blockquote>\n<p>Pickle infected with COVID-19</p>\n</blockquote>\n<p>Due to my limited skill, Rev challenges requiring careful manual reading like this one take me a long time, and I only barely managed to submit the flag right at the very end of the contest.</p>\n<p>The following script was given as the challenge binary:</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> pickle<span class=\"token punctuation\">,</span> io\n\npayload <span class=\"token operator\">=</span> <span class=\"token string\">b'\\x8c\\x08builtins\\x8c\\x07getattr\\x93\\x942\\x8c\\x08builtins\\x8c\\x05input\\x93\\x8c\\x06FLAG> \\x85R\\x8c\\x06encode\\x86R)R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x04dict\\x93\\x8c\\x03get\\x86R\\x8c\\x08builtins\\x8c\\x07globals\\x93)R\\x8c\\x01f\\x86R\\x8c\\x04seek\\x86R\\x94g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__add__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__mul__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x06__eq__\\x86R\\x940g3\\ng5\\n\\x8c\\x08builtins\\x8c\\x03len\\x93g1\\n\\x85RM@\\x00\\x86RM\\x05\\x01\\x86R\\x85R.0g0\\ng1\\n\\x8c\\x0b__getitem__\\x86R\\x940M\\x00\\x00\\x940g2\\ng3\\ng0\\ng6\\ng7\\n\\x85R\\x8c\\x06__le__\\x86RM\\x7f\\x00\\x85RMJ\\x01\\x86R\\x85R.0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM@\\x00\\x86RMU\\x00\\x86RM\"\\x01\\x86R\\x85R0g0\\ng0\\n]\\x94\\x8c\\x06append\\x86R\\x940g8\\n\\x8c\\x0b__getitem__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\nfrom_bytes\\x86R\\x940M\\x00\\x00p7\\n0g9\\ng11\\ng6\\n\\x8c\\x08builtins\\x8c\\x05slice\\x93g4\\ng7\\nM\\x08\\x00\\x86Rg4\\ng3\\ng7\\nM\\x01\\x00\\x86RM\\x08\\x00\\x86R\\x86R\\x85R\\x8c\\x06little\\x86R\\x85R0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM\\x08\\x00\\x86RMw\\x00\\x86RM\\xc9\\x01\\x86R\\x85R0g0\\n]\\x94\\x8c\\x06append\\x86R\\x940g0\\ng12\\n\\x8c\\x0b__getitem__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__xor__\\x86R\\x940I1244422970072434993\\n\\x940M\\x00\\x00p7\\n0g13\\n\\x8c\\x08builtins\\x8c\\x03pow\\x93g15\\ng10\\ng7\\n\\x85Rg16\\n\\x86RI65537\\nI18446744073709551557\\n\\x87R\\x85R0g14\\ng7\\n\\x85Rp16\\n0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM\\x08\\x00\\x86RM\\x83\\x00\\x86RM\\xa7\\x02\\x86R\\x85R0g0\\ng12\\n\\x8c\\x06__eq__\\x86R(I8215359690687096682\\nI1862662588367509514\\nI8350772864914849965\\nI11616510986494699232\\nI3711648467207374797\\nI9722127090168848805\\nI16780197523811627561\\nI18138828537077112905\\nl\\x85R.'</span>\nf <span class=\"token operator\">=</span> io<span class=\"token punctuation\">.</span>BytesIO<span class=\"token punctuation\">(</span>payload<span class=\"token punctuation\">)</span>\nres <span class=\"token operator\">=</span> pickle<span class=\"token punctuation\">.</span>load<span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token builtin\">isinstance</span><span class=\"token punctuation\">(</span>res<span class=\"token punctuation\">,</span> <span class=\"token builtin\">bool</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">and</span> res<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Congratulations!!\"</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\">\"Nope\"</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Running this, I found that the hardcoded binary is executed during <code class=\"language-text\">pickle.load(f)</code> deserialization, and it performs flag string prompting and validation.</p>\n<p>I had not used the <code class=\"language-text\">pickle</code> library before, but it is a module that allows serialization and deserialization of Python objects.</p>\n<p>Furthermore, when deserializing with the <code class=\"language-text\">pickle.load</code> method, it actually runs internally as a VM, giving it the ability to execute arbitrary code.</p>\n<p>In this challenge, loading the series of binary data defined as <code class=\"language-text\">payload</code> triggers the logic that accepts a flag input and validates it.</p>\n<p>References:</p>\n<ul>\n<li><a href=\"https://docs.juliahub.com/Pickle/LAUNc/0.1.0/opcode/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">OpCodes · Pickle.jl</a></li>\n<li><a href=\"https://docs.python.org/ja/3/library/pickle.html\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pickle --- Python object serialization — Python 3.11.5 documentation</a></li>\n</ul>\n<p>To analyze it, the payload must first be disassembled.</p>\n<p>Disassembly can be performed using <code class=\"language-text\">pickletools.dis()</code>.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> pickletools\n\npayload <span class=\"token operator\">=</span> <span class=\"token string\">b'\\x8c\\x08builtins\\x8c\\x07getattr\\x93\\x942\\x8c\\x08builtins\\x8c\\x05input\\x93\\x8c\\x06FLAG> \\x85R\\x8c\\x06encode\\x86R)R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x04dict\\x93\\x8c\\x03get\\x86R\\x8c\\x08builtins\\x8c\\x07globals\\x93)R\\x8c\\x01f\\x86R\\x8c\\x04seek\\x86R\\x94g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__add__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__mul__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x06__eq__\\x86R\\x940g3\\ng5\\n\\x8c\\x08builtins\\x8c\\x03len\\x93g1\\n\\x85RM@\\x00\\x86RM\\x05\\x01\\x86R\\x85R.0g0\\ng1\\n\\x8c\\x0b__getitem__\\x86R\\x940M\\x00\\x00\\x940g2\\ng3\\ng0\\ng6\\ng7\\n\\x85R\\x8c\\x06__le__\\x86RM\\x7f\\x00\\x85RMJ\\x01\\x86R\\x85R.0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM@\\x00\\x86RMU\\x00\\x86RM\"\\x01\\x86R\\x85R0g0\\ng0\\n]\\x94\\x8c\\x06append\\x86R\\x940g8\\n\\x8c\\x0b__getitem__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\nfrom_bytes\\x86R\\x940M\\x00\\x00p7\\n0g9\\ng11\\ng6\\n\\x8c\\x08builtins\\x8c\\x05slice\\x93g4\\ng7\\nM\\x08\\x00\\x86Rg4\\ng3\\ng7\\nM\\x01\\x00\\x86RM\\x08\\x00\\x86R\\x86R\\x85R\\x8c\\x06little\\x86R\\x85R0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM\\x08\\x00\\x86RMw\\x00\\x86RM\\xc9\\x01\\x86R\\x85R0g0\\n]\\x94\\x8c\\x06append\\x86R\\x940g0\\ng12\\n\\x8c\\x0b__getitem__\\x86R\\x940g0\\n\\x8c\\x08builtins\\x8c\\x03int\\x93\\x8c\\x07__xor__\\x86R\\x940I1244422970072434993\\n\\x940M\\x00\\x00p7\\n0g13\\n\\x8c\\x08builtins\\x8c\\x03pow\\x93g15\\ng10\\ng7\\n\\x85Rg16\\n\\x86RI65537\\nI18446744073709551557\\n\\x87R\\x85R0g14\\ng7\\n\\x85Rp16\\n0g2\\ng3\\ng4\\ng5\\ng3\\ng7\\nM\\x01\\x00\\x86Rp7\\nM\\x08\\x00\\x86RM\\x83\\x00\\x86RM\\xa7\\x02\\x86R\\x85R0g0\\ng12\\n\\x8c\\x06__eq__\\x86R(I8215359690687096682\\nI1862662588367509514\\nI8350772864914849965\\nI11616510986494699232\\nI3711648467207374797\\nI9722127090168848805\\nI16780197523811627561\\nI18138828537077112905\\nl\\x85R.'</span>\n\npickletools<span class=\"token punctuation\">.</span>dis<span class=\"token punctuation\">(</span>payload<span class=\"token punctuation\">,</span> annotate<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">)</span></code></pre></div>\n<p>Reference: <a href=\"https://docs.python.org/ja/3/library/pickletools.html?highlight=pickletool#module-pickletools\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">pickletools --- Tools for pickle developers — Python 3.11.5 documentation</a></p>\n<p>However, because a STOP instruction is present partway through, <code class=\"language-text\">pickletools</code> can only read up to offset 0x105.</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/4b8487a5dc0bf9ab570cedd61839a104/46e51/image-20230917233959543.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: 25.83333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAABHUlEQVQY0y2QWXOCUAyFeXK6amc6fah2Exe04sImggJaZREVBVptp+3//xmn94Y+nEnu3OTkS4RksEIkufiaHrBmcXjegHrVRr9Uh1NVkakRUjXE0dwi0yLw+ncjJsVdD3HHQ6qE1KtXOhD2Qx9vzyZOVsIK5tDKErRriQxn9wo15toap8muMGUDjuYOSX+FZX2CsDXDtrdA1HZg3srMkE0M2ePTTmiacdOFXu4UhMwwVQIcRkFBpccF4X/0GzZ80SbSoDklGGEnL7ESLWa4pwJJqGFwJkIuvcCtakTG9e1k+BhviJCb/7g5nYLnv15OW1h3AwicbPE0xuZ1Qavz3HvQC9JKl+7ISeePBtyaRn/8VvzWXKOLJkm5bJH+AEXzpBBUp9xSAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/4b8487a5dc0bf9ab570cedd61839a104/8ac56/image-20230917233959543.webp 240w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/d3be9/image-20230917233959543.webp 480w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/e46b2/image-20230917233959543.webp 960w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/2f8da/image-20230917233959543.webp 1003w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/4b8487a5dc0bf9ab570cedd61839a104/8ff5a/image-20230917233959543.png 240w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/e85cb/image-20230917233959543.png 480w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/d9199/image-20230917233959543.png 960w,\n/static/4b8487a5dc0bf9ab570cedd61839a104/46e51/image-20230917233959543.png 1003w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/4b8487a5dc0bf9ab570cedd61839a104/d9199/image-20230917233959543.png\"\n            alt=\"image-20230917233959543\"\n            title=\"image-20230917233959543\"\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>Moreover, even if you specify the payload range with a slice, <code class=\"language-text\">pickletools</code> will fail to interpret the POP and GET instructions and throw an error, causing disassembly to fail.</p>\n<p>I therefore searched for another tool that could disassemble this payload and found <code class=\"language-text\">r2pickledec</code>, a radare2 plugin.</p>\n<p>Reference: <a href=\"https://github.com/doyensec/r2pickledec\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">doyensec/r2pickledec: Pickle decompiler plugin for Radare2</a></p>\n<p>This tool had many rough edges and various issues arose both during and after installation, but by first building the latest radare2 from source and then installing the plugin, I was able to successfully disassemble the entire payload.</p>\n<p>The disassembly output with my analysis comments added is as follows:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">0x000      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x2\n0x00a      8c0767657461.  short_binunicode <span class=\"token string\">\"getattr\"</span>  <span class=\"token punctuation\">;</span> 0xc\n0x013      <span class=\"token number\">93</span>             stack_global\n0x014      <span class=\"token number\">94</span>             memoize\n0x015      <span class=\"token number\">32</span>             dup\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x016      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x18\n0x020      8c05696e7075.  short_binunicode <span class=\"token string\">\"input\"</span>    <span class=\"token punctuation\">;</span> 0x22 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'\"'</span>\n0x027      <span class=\"token number\">93</span>             stack_global\n0x028      8c06464c4147.  short_binunicode <span class=\"token string\">\"FLAG> \"</span>   <span class=\"token punctuation\">;</span> 0x2a <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'*'</span>\n0x030      <span class=\"token number\">85</span>             tuple1\n0x031      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// input<span class=\"token punctuation\">(</span><span class=\"token string\">\"FLAG> \"</span><span class=\"token punctuation\">)</span>\n\n0x032      8c06656e636f.  short_binunicode <span class=\"token string\">\"encode\"</span>   <span class=\"token punctuation\">;</span> 0x34 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'4'</span>\n0x03a      <span class=\"token number\">86</span>             tuple2\n0x03b      <span class=\"token number\">52</span>             reduce\n0x03c      <span class=\"token number\">29</span>             empty_tuple\n0x03d      <span class=\"token number\">52</span>             reduce\n0x03e      <span class=\"token number\">94</span>             memoize\n0x03f      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\n\n0x040      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x41 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'A'</span>\n0x043      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x45 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'E'</span>\n0x04d      8c0464696374   short_binunicode <span class=\"token string\">\"dict\"</span>     <span class=\"token punctuation\">;</span> 0x4f <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'O'</span>\n0x053      <span class=\"token number\">93</span>             stack_global\n0x054      8c03676574     short_binunicode <span class=\"token string\">\"get\"</span>      <span class=\"token punctuation\">;</span> 0x56 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'V'</span>\n0x059      <span class=\"token number\">86</span>             tuple2\n0x05a      <span class=\"token number\">52</span>             reduce\n0x05b      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x5d <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">']'</span>\n0x065      8c07676c6f62.  short_binunicode <span class=\"token string\">\"globals\"</span>  <span class=\"token punctuation\">;</span> 0x67 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'g'</span>\n0x06e      <span class=\"token number\">93</span>             stack_global\n0x06f      <span class=\"token number\">29</span>             empty_tuple\n0x070      <span class=\"token number\">52</span>             reduce\n0x071      8c0166         short_binunicode <span class=\"token string\">\"f\"</span>        <span class=\"token punctuation\">;</span> 0x73 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'s'</span>\n0x074      <span class=\"token number\">86</span>             tuple2\n0x075      <span class=\"token number\">52</span>             reduce\n\n\n0x076      8c047365656b   short_binunicode <span class=\"token string\">\"seek\"</span>     <span class=\"token punctuation\">;</span> 0x78 <span class=\"token punctuation\">;</span> <span class=\"token number\">2</span><span class=\"token string\">'x'</span>\n0x07c      <span class=\"token number\">86</span>             tuple2\n0x07d      <span class=\"token number\">52</span>             reduce\n// dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x07e      <span class=\"token number\">94</span>             memoize\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x07f      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x80\n0x082      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x84\n0x08c      8c03696e74     short_binunicode <span class=\"token string\">\"int\"</span>      <span class=\"token punctuation\">;</span> 0x8e\n0x091      <span class=\"token number\">93</span>             stack_global\n\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// builtins.int<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// __add__\n\n0x092      8c075f5f6164.  short_binunicode <span class=\"token string\">\"__add__\"</span>  <span class=\"token punctuation\">;</span> 0x94\n0x09b      <span class=\"token number\">86</span>             tuple2\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>builtins.int<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, __add__<span class=\"token punctuation\">)</span>\n0x09c      <span class=\"token number\">52</span>             reduce\n0x09d      <span class=\"token number\">94</span>             memoize\n0x09e      <span class=\"token number\">30</span>             pop\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x09f      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0xa0\n0x0a2      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0xa4\n0x0ac      8c03696e74     short_binunicode <span class=\"token string\">\"int\"</span>      <span class=\"token punctuation\">;</span> 0xae\n0x0b1      <span class=\"token number\">93</span>             stack_global\n0x0b2      8c075f5f6d75.  short_binunicode <span class=\"token string\">\"__mul__\"</span>  <span class=\"token punctuation\">;</span> 0xb4\n0x0bb      <span class=\"token number\">86</span>             tuple2\n0x0bc      <span class=\"token number\">52</span>             reduce\n0x0bd      <span class=\"token number\">94</span>             memoize\n0x0be      <span class=\"token number\">30</span>             pop\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x0bf      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0xc0\n0x0c2      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0xc4\n0x0cc      8c03696e74     short_binunicode <span class=\"token string\">\"int\"</span>      <span class=\"token punctuation\">;</span> 0xce\n0x0d1      <span class=\"token number\">93</span>             stack_global\n0x0d2      8c065f5f6571.  short_binunicode <span class=\"token string\">\"__eq__\"</span>   <span class=\"token punctuation\">;</span> 0xd4\n0x0da      <span class=\"token number\">86</span>             tuple2\n0x0db      <span class=\"token number\">52</span>             reduce\n0x0dc      <span class=\"token number\">94</span>             memoize\n0x0dd      <span class=\"token number\">30</span>             pop\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x0de      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0xdf\n0x0e1      67350a         get <span class=\"token string\">\"5\"</span>                     <span class=\"token punctuation\">;</span> 0xe2\n0x0e4      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0xe6\n0x0ee      8c036c656e     short_binunicode <span class=\"token string\">\"len\"</span>      <span class=\"token punctuation\">;</span> 0xf0\n0x0f3      <span class=\"token number\">93</span>             stack_global\n0x0f4      67310a         get <span class=\"token string\">\"1\"</span>                     <span class=\"token punctuation\">;</span> 0xf5\n0x0f7      <span class=\"token number\">85</span>             tuple1\n0x0f8      <span class=\"token number\">52</span>             reduce\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// builtins.len<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">)</span>\n\n0x0f9      4d4000         binint2 0x40                <span class=\"token punctuation\">;</span> <span class=\"token string\">'@'</span>\n0x0fc      <span class=\"token number\">86</span>             tuple2\n\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>builtins.len<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">)</span>, 0x40<span class=\"token punctuation\">)</span>\n\n0x0fd      <span class=\"token number\">52</span>             reduce\n0x0fe      4d0501         binint2 0x105\n0x101      <span class=\"token number\">86</span>             tuple2\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>bool, 0x015<span class=\"token punctuation\">)</span>\n\n0x102      <span class=\"token number\">52</span>             reduce\n// add<span class=\"token punctuation\">(</span>bool, 0x105<span class=\"token punctuation\">)</span>\n\n0x103      <span class=\"token number\">85</span>             tuple1\n// jmp\n// 0x106\n\n0x104      <span class=\"token number\">52</span>             reduce\n0x105      2e             stop -<span class=\"token operator\">></span> Fail\n\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x106      <span class=\"token number\">30</span>             pop\n0x107      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x108\n0x10a      67310a         get <span class=\"token string\">\"1\"</span>                     <span class=\"token punctuation\">;</span> 0x10b\n0x10d      8c0b5f5f6765.  short_binunicode <span class=\"token string\">\"__getitem__\"</span> <span class=\"token punctuation\">;</span> 0x10f\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// Flag\n// __getitem__\n\n0x11a      <span class=\"token number\">86</span>             tuple2\n0x11b      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span>\n0x11c      <span class=\"token number\">94</span>             memoize\n0x11d      <span class=\"token number\">30</span>             pop\n0x11e      4d0000         binint2 0x0\n0x121      <span class=\"token number\">94</span>             memoize\n\n\n<span class=\"token comment\"># loop start</span>\n0x122      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n0x123      67320a         get <span class=\"token string\">\"2\"</span>                     <span class=\"token punctuation\">;</span> 0x124\n0x126      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x127\n0x129      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x12a\n0x12c      67360a         get <span class=\"token string\">\"6\"</span>                     <span class=\"token punctuation\">;</span> 0x12d\n0x12f      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x130\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n\n0x132      <span class=\"token number\">85</span>             tuple1\n0x133      <span class=\"token number\">52</span>             reduce\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// Flag<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span>, __le__\n\n0x134      8c065f5f6c65.  short_binunicode <span class=\"token string\">\"__le__\"</span>   <span class=\"token punctuation\">;</span> 0x136\n0x13c      <span class=\"token number\">86</span>             tuple2\n0x13d      <span class=\"token number\">52</span>             reduce\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token variable\"><span class=\"token punctuation\">((</span>Flag[<span class=\"token number\">0</span>]<span class=\"token punctuation\">,</span> __le__<span class=\"token punctuation\">))</span></span>\n\n0x13e      4d7f00         binint2 0x7f                <span class=\"token punctuation\">;</span> <span class=\"token string\">'\\x7f'</span>\n0x141      <span class=\"token number\">85</span>             tuple1\n0x142      <span class=\"token number\">52</span>             reduce\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>Flag<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> 0x7f<span class=\"token punctuation\">)</span>\n// 0x14a\n\n0x143      4d4a01         binint2 0x14a\n0x146      <span class=\"token number\">86</span>             tuple2\n0x147      <span class=\"token number\">52</span>             reduce\n0x148      <span class=\"token number\">85</span>             tuple1\n0x149      <span class=\"token number\">52</span>             reduce\n0x14a      2e             stop\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>Flag<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> 0x7f<span class=\"token punctuation\">)</span>\n// 0x14a\n\n0x14b      <span class=\"token number\">30</span>             pop\n\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n0x14c      67320a         get <span class=\"token string\">\"2\"</span>                     <span class=\"token punctuation\">;</span> 0x14d\n0x14f      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x150\n0x152      67340a         get <span class=\"token string\">\"4\"</span>                     <span class=\"token punctuation\">;</span> 0x153\n0x155      67350a         get <span class=\"token string\">\"5\"</span>                     <span class=\"token punctuation\">;</span> 0x156\n0x158      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x159\n0x15b      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x15c\n0x15e      4d0100         binint2 0x1\n0x161      <span class=\"token number\">86</span>             tuple2\n0x162      <span class=\"token number\">52</span>             reduce\n0x163      70370a         put <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x164\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token number\">1</span>\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n\n0x166      4d4000         binint2 0x40                <span class=\"token punctuation\">;</span> <span class=\"token string\">'@'</span>\n0x169      <span class=\"token number\">86</span>             tuple2\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span><span class=\"token number\">1</span>, 0x40<span class=\"token punctuation\">)</span>\n\n0x16a      <span class=\"token number\">52</span>             reduce\n0x16b      4d5500         binint2 0x55                <span class=\"token punctuation\">;</span> <span class=\"token string\">'U'</span>\n0x16e      <span class=\"token number\">86</span>             tuple2\n0x16f      <span class=\"token number\">52</span>             reduce\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// mul<span class=\"token variable\"><span class=\"token punctuation\">((</span>eq<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x40</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x55</span><span class=\"token punctuation\">))</span></span>\n\n0x170      4d2201         binint2 0x122\n0x173      <span class=\"token number\">86</span>             tuple2\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// <span class=\"token punctuation\">(</span>mul<span class=\"token variable\"><span class=\"token punctuation\">((</span>eq<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x40</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x55</span><span class=\"token punctuation\">))</span></span>, 0x122<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># Loop until i reaches 0x40</span>\n<span class=\"token comment\"># Verifies all characters are in the ASCII range</span>\n0x174      <span class=\"token number\">52</span>             reduce\n0x175      <span class=\"token number\">85</span>             tuple1\n0x176      <span class=\"token number\">52</span>             reduce\n// jmp\n// <span class=\"token function\">add</span><span class=\"token variable\"><span class=\"token punctuation\">((</span>mul<span class=\"token punctuation\">((</span>eq<span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x40</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0x55</span><span class=\"token punctuation\">))</span></span>, 0x122<span class=\"token punctuation\">))</span>\n\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> 0x40\n\n0x177      <span class=\"token number\">30</span>             pop\n0x178      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x179\n0x17b      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x17c\n0x17e      5d             empty_list\n0x17f      <span class=\"token number\">94</span>             memoize\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// empty_list\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> 0x40\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n0x180      8c0661707065.  short_binunicode <span class=\"token string\">\"append\"</span>   <span class=\"token punctuation\">;</span> 0x182\n0x188      <span class=\"token number\">86</span>             tuple2\n0x189      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// getattr<span class=\"token variable\"><span class=\"token punctuation\">((</span>empty_list<span class=\"token punctuation\">,</span> append<span class=\"token punctuation\">))</span></span>\n\n0x18a      <span class=\"token number\">94</span>             memoize\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> 0x40\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\n\n0x18b      <span class=\"token number\">30</span>             pop\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x18c      67380a         get <span class=\"token string\">\"8\"</span>                     <span class=\"token punctuation\">;</span> 0x18d\n0x18f      8c0b5f5f6765.  short_binunicode <span class=\"token string\">\"__getitem__\"</span> <span class=\"token punctuation\">;</span> 0x191\n0x19c      <span class=\"token number\">86</span>             tuple2\n0x19d      <span class=\"token number\">52</span>             reduce\n0x19e      <span class=\"token number\">94</span>             memoize\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>, __getitem__<span class=\"token punctuation\">)</span>\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> 0x40\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\n\n0x19f      <span class=\"token number\">30</span>             pop\n\n0x1a0      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x1a1\n0x1a3      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x1a5\n0x1ad      8c03696e74     short_binunicode <span class=\"token string\">\"int\"</span>      <span class=\"token punctuation\">;</span> 0x1af\n0x1b2      <span class=\"token number\">93</span>             stack_global\n0x1b3      8c0a66726f6d.  short_binunicode <span class=\"token string\">\"from_bytes\"</span> <span class=\"token punctuation\">;</span> 0x1b5\n0x1bf      <span class=\"token number\">86</span>             tuple2\n0x1c0      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span>int, from_bytes<span class=\"token punctuation\">)</span>\n\n0x1c1      <span class=\"token number\">94</span>             memoize\n0x1c2      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> 0x40\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x1c3      4d0000         binint2 0x0\n0x1c6      70370a         put <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x1c7\n\n\n<span class=\"token comment\"># loop</span>\n0x1c9      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n\n0x1ca      67390a         get <span class=\"token string\">\"9\"</span>                     <span class=\"token punctuation\">;</span> 0x1cb\n0x1cd      6731310a       get <span class=\"token string\">\"11\"</span>                    <span class=\"token punctuation\">;</span> 0x1ce\n0x1d1      67360a         get <span class=\"token string\">\"6\"</span>                     <span class=\"token punctuation\">;</span> 0x1d2\n0x1d4      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x1d6\n0x1de      8c05736c6963.  short_binunicode <span class=\"token string\">\"slice\"</span>    <span class=\"token punctuation\">;</span> 0x1e0\n0x1e5      <span class=\"token number\">93</span>             stack_global\n0x1e6      67340a         get <span class=\"token string\">\"4\"</span>                     <span class=\"token punctuation\">;</span> 0x1e7\n0x1e9      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x1ea\n0x1ec      4d0800         binint2 0x8\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// flag<span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n// slice\n// mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n// 0x8\n\n0x1ef      <span class=\"token number\">86</span>             tuple2\n0x1f0      <span class=\"token number\">52</span>             reduce\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// flag<span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n// slice\n// mul<span class=\"token punctuation\">(</span>i, 0x8<span class=\"token punctuation\">)</span>\n\n0x1f1      67340a         get <span class=\"token string\">\"4\"</span>                     <span class=\"token punctuation\">;</span> 0x1f2\n0x1f4      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x1f5\n0x1f7      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x1f8\n0x1fa      4d0100         binint2 0x1\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// flag<span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n// slice\n// mul<span class=\"token punctuation\">(</span>i, 0x8<span class=\"token punctuation\">)</span>\n// mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n// <span class=\"token number\">1</span>\n\n0x1fd      <span class=\"token number\">86</span>             tuple2\n0x1fe      <span class=\"token number\">52</span>             reduce\n0x1ff      4d0800         binint2 0x8\n0x202      <span class=\"token number\">86</span>             tuple2\n0x203      <span class=\"token number\">52</span>             reduce\n0x204      <span class=\"token number\">86</span>             tuple2\n0x205      <span class=\"token number\">52</span>             reduce\n0x206      <span class=\"token number\">85</span>             tuple1\n\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// flag<span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span>\n// slice<span class=\"token punctuation\">[</span>mul<span class=\"token punctuation\">(</span>i, 0x8<span class=\"token punctuation\">)</span>, mul<span class=\"token punctuation\">(</span>add<span class=\"token punctuation\">(</span>i + <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>, <span class=\"token number\">8</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span>\n\n0x207      <span class=\"token number\">52</span>             reduce\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// flag<span class=\"token punctuation\">[</span>i*8:<span class=\"token punctuation\">(</span>i+1<span class=\"token punctuation\">)</span>*8<span class=\"token punctuation\">]</span>\n\n0x208      8c066c697474.  short_binunicode <span class=\"token string\">\"little\"</span>   <span class=\"token punctuation\">;</span> 0x20a\n0x210      <span class=\"token number\">86</span>             tuple2\n0x211      <span class=\"token number\">52</span>             reduce\n// m8.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// int.from_bytes<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">[</span>i*8:<span class=\"token punctuation\">(</span>i+1<span class=\"token punctuation\">)</span>*8<span class=\"token punctuation\">]</span>, little<span class=\"token punctuation\">)</span>\n\n0x212      <span class=\"token number\">85</span>             tuple1\n0x213      <span class=\"token number\">52</span>             reduce\n0x214      <span class=\"token number\">30</span>             pop\n\n<span class=\"token comment\"># Extract 8 bytes of flag at a time, convert to int, and append to m8</span>\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n\n0x215      67320a         get <span class=\"token string\">\"2\"</span>                     <span class=\"token punctuation\">;</span> 0x216\n0x218      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x219\n0x21b      67340a         get <span class=\"token string\">\"4\"</span>                     <span class=\"token punctuation\">;</span> 0x21c\n0x21e      67350a         get <span class=\"token string\">\"5\"</span>                     <span class=\"token punctuation\">;</span> 0x21f\n0x221      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x222\n0x224      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x225\n0x227      4d0100         binint2 0x1\n0x22a      <span class=\"token number\">86</span>             tuple2\n0x22b      <span class=\"token number\">52</span>             reduce\n// jmp\n// add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// add<span class=\"token punctuation\">(</span>i + <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n\n0x22c      70370a         put <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x22d\n0x22f      4d0800         binint2 0x8\n0x232      <span class=\"token number\">86</span>             tuple2\n0x233      <span class=\"token number\">52</span>             reduce\n0x234      4d7700         binint2 0x77                <span class=\"token punctuation\">;</span> <span class=\"token string\">'w'</span>\n0x237      <span class=\"token number\">86</span>             tuple2\n0x238      <span class=\"token number\">52</span>             reduce\n0x239      4dc901         binint2 0x1c9\n0x23c      <span class=\"token number\">86</span>             tuple2\n0x23d      <span class=\"token number\">52</span>             reduce\n<span class=\"token comment\"># Overwrite i</span>\n// jmp\n// add<span class=\"token punctuation\">(</span>mul<span class=\"token punctuation\">(</span>eq<span class=\"token punctuation\">(</span>add<span class=\"token punctuation\">(</span>i + <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>, 0x8<span class=\"token punctuation\">)</span>, 0x77<span class=\"token punctuation\">)</span>, 0x1c9<span class=\"token punctuation\">)</span>\n\n0x23e      <span class=\"token number\">85</span>             tuple1\n0x23f      <span class=\"token number\">52</span>             reduce\n\n\n<span class=\"token comment\"># Extract 8 bytes of flag at a time, convert to int, and append to m8</span>\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\nmemo8: <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># If i == 8, exit the loop</span>\n0x240      <span class=\"token number\">30</span>             pop\n0x241      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x242\n0x244      5d             empty_list\n0x245      <span class=\"token number\">94</span>             memoize\n// getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// empty_list\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\nmemo8: arr1 <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo12: arr2 <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\n0x246      8c0661707065.  short_binunicode <span class=\"token string\">\"append\"</span>   <span class=\"token punctuation\">;</span> 0x248\n0x24e      <span class=\"token number\">86</span>             tuple2\n0x24f      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span>empty_list, append<span class=\"token punctuation\">)</span>\n\n0x250      <span class=\"token number\">94</span>             memoize\n0x251      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\nmemo8: arr1 <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo12: arr2 <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo13: append to memo12\n\n0x252      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x253\n0x255      6731320a       get <span class=\"token string\">\"12\"</span>                    <span class=\"token punctuation\">;</span> 0x256\n0x259      8c0b5f5f6765.  short_binunicode <span class=\"token string\">\"__getitem__\"</span> <span class=\"token punctuation\">;</span> 0x25b\n0x266      <span class=\"token number\">86</span>             tuple2\n0x267      <span class=\"token number\">52</span>             reduce\n0x268      <span class=\"token number\">94</span>             memoize\n0x269      <span class=\"token number\">30</span>             pop\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\nmemo8: arr1 <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo12: arr2 <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo13: append to memo12\nmemo14: fetch value from memo12 by index\n\n\n0x26a      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x26b\n0x26d      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x26f\n0x277      8c03696e74     short_binunicode <span class=\"token string\">\"int\"</span>      <span class=\"token punctuation\">;</span> 0x279\n0x27c      <span class=\"token number\">93</span>             stack_global\n0x27d      8c075f5f786f.  short_binunicode <span class=\"token string\">\"__xor__\"</span>  <span class=\"token punctuation\">;</span> 0x27f\n0x286      <span class=\"token number\">86</span>             tuple2\n0x287      <span class=\"token number\">52</span>             reduce\n// getattr<span class=\"token punctuation\">(</span>int, xor<span class=\"token punctuation\">)</span>\n0x288      <span class=\"token number\">94</span>             memoize\n0x289      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\nmemo8: arr1 <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo12: arr2 <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo13: append to memo12\nmemo14: fetch value from memo12 by index\nmemo15: int.xor<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\n0x28a      <span class=\"token number\">493132343434</span>.  int <span class=\"token string\">\"1244422970072434993\"</span>   <span class=\"token punctuation\">;</span> 0x28b\n0x29f      <span class=\"token number\">94</span>             memoize\n0x2a0      <span class=\"token number\">30</span>             pop\n0x2a1      4d0000         binint2 0x0\n0x2a4      70370a         put <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x2a5\n0x2a7      <span class=\"token number\">30</span>             pop\n\nmemo0: getattr<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo1: Flag\nmemo2: dict.get<span class=\"token punctuation\">(</span>builtins.globals<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>, f<span class=\"token punctuation\">)</span>.seek<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> -<span class=\"token operator\">></span> jmp\nmemo3: add<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo4: mul<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo5: eq<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo6: getattr<span class=\"token punctuation\">(</span>Flag, __getitem__<span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>x<span class=\"token punctuation\">]</span> -<span class=\"token operator\">></span> likely fetches input character\nmemo7: i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\nmemo8: arr1 <span class=\"token punctuation\">[</span><span class=\"token operator\">&lt;</span>flag <span class=\"token number\">8</span> bytes each, little-endian<span class=\"token operator\">></span><span class=\"token punctuation\">]</span>\nmemo9: append to memo8\nmemo10: fetch value from memo8 by index\nmemo11: int.from_bytes<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo12: arr2 <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\nmemo13: append to memo12\nmemo14: fetch value from memo12 by index\nmemo15: int.xor<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nmemo16: key <span class=\"token operator\">=</span> <span class=\"token number\">1244422970072434993</span>\n\n0x2a8      6731330a       get <span class=\"token string\">\"13\"</span>                    <span class=\"token punctuation\">;</span> 0x2a9\n0x2ac      8c086275696c.  short_binunicode <span class=\"token string\">\"builtins\"</span> <span class=\"token punctuation\">;</span> 0x2ae\n0x2b6      8c03706f77     short_binunicode <span class=\"token string\">\"pow\"</span>      <span class=\"token punctuation\">;</span> 0x2b8\n0x2bb      <span class=\"token number\">93</span>             stack_global\n// arr2.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// pow\n\n0x2bc      6731350a       get <span class=\"token string\">\"15\"</span>                    <span class=\"token punctuation\">;</span> 0x2bd\n0x2c0      6731300a       get <span class=\"token string\">\"10\"</span>                    <span class=\"token punctuation\">;</span> 0x2c1\n0x2c4      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x2c5\n0x2c7      <span class=\"token number\">85</span>             tuple1\n0x2c8      <span class=\"token number\">52</span>             reduce\n0x2c9      6731360a       get <span class=\"token string\">\"16\"</span>                    <span class=\"token punctuation\">;</span> 0x2ca <span class=\"token punctuation\">;</span> <span class=\"token string\">\"16<span class=\"token entity\" title=\"\\n\">\\n</span><span class=\"token entity\" title=\"\\x86\">\\x86</span>RI65537<span class=\"token entity\" title=\"\\n\">\\n</span>I18446744073709551557<span class=\"token entity\" title=\"\\n\">\\n</span><span class=\"token entity\" title=\"\\x87\">\\x87</span>R<span class=\"token entity\" title=\"\\x85\">\\x85</span>R0g14<span class=\"token entity\" title=\"\\n\">\\n</span>g7<span class=\"token entity\" title=\"\\n\">\\n</span><span class=\"token entity\" title=\"\\x85\">\\x85</span>Rp16<span class=\"token entity\" title=\"\\n\">\\n</span>0g2<span class=\"token entity\" title=\"\\n\">\\n</span>g3<span class=\"token entity\" title=\"\\n\">\\n</span>g4<span class=\"token entity\" title=\"\\n\">\\n</span>g5<span class=\"token entity\" title=\"\\n\">\\n</span>g3<span class=\"token entity\" title=\"\\n\">\\n</span>g7<span class=\"token entity\" title=\"\\n\">\\n</span>M<span class=\"token entity\" title=\"\\x01\">\\x01</span>\"</span>\n0x2cd      <span class=\"token number\">86</span>             tuple2\n0x2ce      <span class=\"token number\">52</span>             reduce\n// arr2.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// pow<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// xor<span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>, <span class=\"token number\">1244422970072434993</span><span class=\"token punctuation\">))</span>\n\n\n0x2cf      <span class=\"token number\">493635353337</span>.  int <span class=\"token string\">\"65537\"</span>                 <span class=\"token punctuation\">;</span> 0x2d0\n0x2d6      <span class=\"token number\">493138343436</span>.  int <span class=\"token string\">\"18446744073709551557\"</span>  <span class=\"token punctuation\">;</span> 0x2d7\n0x2ec      <span class=\"token number\">87</span>             tuple3\n0x2ed      <span class=\"token number\">52</span>             reduce\n// arr2.append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n// pow<span class=\"token punctuation\">(</span>\n    <span class=\"token punctuation\">(</span>xor<span class=\"token punctuation\">(</span>arr1<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>, <span class=\"token number\">1244422970072434993</span><span class=\"token punctuation\">)</span>, <span class=\"token number\">65537</span>, <span class=\"token number\">18446744073709551557</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">)</span>\n\n0x2ee      <span class=\"token number\">85</span>             tuple1\n0x2ef      <span class=\"token number\">52</span>             reduce\n0x2f0      <span class=\"token number\">30</span>             pop\n<span class=\"token comment\"># Append result to memo12</span>\n\n0x2f1      6731340a       get <span class=\"token string\">\"14\"</span>                    <span class=\"token punctuation\">;</span> 0x2f2 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"14<span class=\"token entity\" title=\"\\n\">\\n</span>g7<span class=\"token entity\" title=\"\\n\">\\n</span><span class=\"token entity\" title=\"\\x85\">\\x85</span>Rp16<span class=\"token entity\" title=\"\\n\">\\n</span>0g2<span class=\"token entity\" title=\"\\n\">\\n</span>g3<span class=\"token entity\" title=\"\\n\">\\n</span>g4<span class=\"token entity\" title=\"\\n\">\\n</span>g5<span class=\"token entity\" title=\"\\n\">\\n</span>g3<span class=\"token entity\" title=\"\\n\">\\n</span>g7<span class=\"token entity\" title=\"\\n\">\\n</span>M<span class=\"token entity\" title=\"\\x01\">\\x01</span>\"</span>\n0x2f5      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x2f6\n0x2f8      <span class=\"token number\">85</span>             tuple1\n// fetch value from memo12 by index\n// i <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n\n0x2f9      <span class=\"token number\">52</span>             reduce\n0x2fa      7031360a       put <span class=\"token string\">\"16\"</span>                    <span class=\"token punctuation\">;</span> 0x2fb\n0x2fe      <span class=\"token number\">30</span>             pop\n\n<span class=\"token comment\"># Use the result of the previous encryption as the next XOR key</span>\n0x2ff      67320a         get <span class=\"token string\">\"2\"</span>                     <span class=\"token punctuation\">;</span> 0x300\n0x302      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x303\n0x305      67340a         get <span class=\"token string\">\"4\"</span>                     <span class=\"token punctuation\">;</span> 0x306\n0x308      67350a         get <span class=\"token string\">\"5\"</span>                     <span class=\"token punctuation\">;</span> 0x309\n0x30b      67330a         get <span class=\"token string\">\"3\"</span>                     <span class=\"token punctuation\">;</span> 0x30c\n0x30e      67370a         get <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x30f\n0x311      4d0100         binint2 0x1\n0x314      <span class=\"token number\">86</span>             tuple2\n0x315      <span class=\"token number\">52</span>             reduce\n0x316      70370a         put <span class=\"token string\">\"7\"</span>                     <span class=\"token punctuation\">;</span> 0x317\n0x319      4d0800         binint2 0x8\n0x31c      <span class=\"token number\">86</span>             tuple2\n0x31d      <span class=\"token number\">52</span>             reduce\n0x31e      4d8300         binint2 0x83\n0x321      <span class=\"token number\">86</span>             tuple2\n0x322      <span class=\"token number\">52</span>             reduce\n0x323      4da702         binint2 0x2a7\n0x326      <span class=\"token number\">86</span>             tuple2\n0x327      <span class=\"token number\">52</span>             reduce\n0x328      <span class=\"token number\">85</span>             tuple1\n0x329      <span class=\"token number\">52</span>             reduce\n0x32a      <span class=\"token number\">30</span>             pop\n0x32b      67300a         get <span class=\"token string\">\"0\"</span>                     <span class=\"token punctuation\">;</span> 0x32c\n0x32e      6731320a       get <span class=\"token string\">\"12\"</span>                    <span class=\"token punctuation\">;</span> 0x32f\n0x332      8c065f5f6571.  short_binunicode <span class=\"token string\">\"__eq__\"</span>   <span class=\"token punctuation\">;</span> 0x334 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"__eq__<span class=\"token entity\" title=\"\\x86\">\\x86</span>R(I8215359690687096682<span class=\"token entity\" title=\"\\n\">\\n</span>I1862662588367509514<span class=\"token entity\" title=\"\\n\">\\n</span>I8350772864914849965<span class=\"token entity\" title=\"\\n\">\\n</span>I11616510986494699232<span class=\"token entity\" title=\"\\n\">\\n</span>I3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x33a      <span class=\"token number\">86</span>             tuple2\n0x33b      <span class=\"token number\">52</span>             reduce\n0x33c      <span class=\"token number\">28</span>             mark\n0x33d      <span class=\"token number\">493832313533</span>.  int <span class=\"token string\">\"8215359690687096682\"</span>   <span class=\"token punctuation\">;</span> 0x33e <span class=\"token punctuation\">;</span> <span class=\"token string\">\"8215359690687096682<span class=\"token entity\" title=\"\\n\">\\n</span>I1862662588367509514<span class=\"token entity\" title=\"\\n\">\\n</span>I8350772864914849965<span class=\"token entity\" title=\"\\n\">\\n</span>I11616510986494699232<span class=\"token entity\" title=\"\\n\">\\n</span>I3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x352      <span class=\"token number\">493138363236</span>.  int <span class=\"token string\">\"1862662588367509514\"</span>   <span class=\"token punctuation\">;</span> 0x353 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"1862662588367509514<span class=\"token entity\" title=\"\\n\">\\n</span>I8350772864914849965<span class=\"token entity\" title=\"\\n\">\\n</span>I11616510986494699232<span class=\"token entity\" title=\"\\n\">\\n</span>I3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x367      <span class=\"token number\">493833353037</span>.  int <span class=\"token string\">\"8350772864914849965\"</span>   <span class=\"token punctuation\">;</span> 0x368 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"8350772864914849965<span class=\"token entity\" title=\"\\n\">\\n</span>I11616510986494699232<span class=\"token entity\" title=\"\\n\">\\n</span>I3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x37c      <span class=\"token number\">493131363136</span>.  int <span class=\"token string\">\"11616510986494699232\"</span>  <span class=\"token punctuation\">;</span> 0x37d <span class=\"token punctuation\">;</span> <span class=\"token string\">\"11616510986494699232<span class=\"token entity\" title=\"\\n\">\\n</span>I3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x392      <span class=\"token number\">493337313136</span>.  int <span class=\"token string\">\"3711648467207374797\"</span>   <span class=\"token punctuation\">;</span> 0x393 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"3711648467207374797<span class=\"token entity\" title=\"\\n\">\\n</span>I9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x3a7      <span class=\"token number\">493937323231</span>.  int <span class=\"token string\">\"9722127090168848805\"</span>   <span class=\"token punctuation\">;</span> 0x3a8 <span class=\"token punctuation\">;</span> <span class=\"token string\">\"9722127090168848805<span class=\"token entity\" title=\"\\n\">\\n</span>I16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x3bc      <span class=\"token number\">493136373830</span>.  int <span class=\"token string\">\"16780197523811627561\"</span>  <span class=\"token punctuation\">;</span> 0x3bd <span class=\"token punctuation\">;</span> <span class=\"token string\">\"16780197523811627561<span class=\"token entity\" title=\"\\n\">\\n</span>I18138828537077112905<span class=\"token entity\" title=\"\\n\">\\n</span>l<span class=\"token entity\" title=\"\\x85\">\\x85</span>R.\"</span>\n0x3d2      <span class=\"token number\">493138313338</span>.  int <span class=\"token string\">\"18138828537077112905\"</span>  <span class=\"token punctuation\">;</span> 0x3d3\n0x3e8      6c             list\n0x3e9      <span class=\"token number\">85</span>             tuple1\n0x3ea      <span class=\"token number\">52</span>             reduce\n0x3eb      2e             stop</code></pre></div>\n<p>Deserialization via pickle operates as a VM.</p>\n<p>The basic operations are only four: “push a value onto the stack”, “tuple-ify one or two stack values”, “execute code using two stack values (a callable tuple and an argument tuple)”, and “save a stack value into memo”.</p>\n<p>As noted in my analysis comments above, by patiently working through the pattern of “push data → tupleify → call function” from top to bottom, I was ultimately able to identify that the code performs the following operations:</p>\n<ol>\n<li>Split the 64-character flag into 8-byte chunks, convert each chunk to an int in little-endian byte order, and store them in an array.</li>\n<li>\n<p>Process each of the 8 int values with the following formula. (The initial key is 1244422970072434993; for subsequent iterations, the key is the result of the previous encryption.)</p>\n<p><code class=\"language-text\">pow((xor(arr1[i], key), 65537, 18446744073709551557))</code></p>\n</li>\n<li>If the correct flag is entered, the computed results will match the hardcoded long values.</li>\n</ol>\n<p>From the above, if we can decrypt the plaintext from the 8 hardcoded long values, we can obtain the flag.</p>\n<p>The challenge here was how to determine the private key.</p>\n<p>From the encryption logic, it is clearly RSA encryption.</p>\n<p>However, the private key is not given, and 18446744073709551557 (acting as <code class=\"language-text\">n</code>) is not a product of primes, so I could not factor it into <code class=\"language-text\">p</code> and <code class=\"language-text\">q</code>.</p>\n<p>After consulting with a team member, I got the spot-on suggestion to try <code class=\"language-text\">pow(e, -1, n)</code> as the private key for decryption.</p>\n<p>Based on this idea, I created the following solver and successfully decrypted the ciphertext to obtain the correct flag.</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> long_to_bytes\n\nans <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>\n    <span class=\"token number\">8215359690687096682</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">1862662588367509514</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">8350772864914849965</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">11616510986494699232</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">3711648467207374797</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">9722127090168848805</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">16780197523811627561</span><span class=\"token punctuation\">,</span>\n    <span class=\"token number\">18138828537077112905</span>\n<span class=\"token punctuation\">]</span>\n\nkey <span class=\"token operator\">=</span> <span class=\"token number\">1244422970072434993</span>\ne <span class=\"token operator\">=</span> <span class=\"token number\">65537</span>\nn <span class=\"token operator\">=</span> <span class=\"token number\">18446744073709551557</span>\nd <span class=\"token operator\">=</span> <span class=\"token builtin\">pow</span><span class=\"token punctuation\">(</span><span class=\"token number\">65537</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">18446744073709551556</span><span class=\"token punctuation\">)</span>\n\nflag <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 number\">8</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    m <span class=\"token operator\">=</span> <span class=\"token builtin\">pow</span><span class=\"token punctuation\">(</span>ans<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> d<span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span>\n    flag<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>m <span class=\"token operator\">^</span> ans<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 punctuation\">)</span><span class=\"token punctuation\">.</span>to_bytes<span class=\"token punctuation\">(</span><span class=\"token number\">8</span><span class=\"token punctuation\">,</span><span class=\"token string\">'little'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># SECCON{Can_someone_please_make_a_debugger_for_Pickle_bytecode??}</span></code></pre></div>\n<p>Incidentally, reading other people’s writeups, I found that using a tool called <a href=\"https://github.com/trailofbits/fickling\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">flickling</a> yields a decompiled result like the following.</p>\n<p>This is overwhelmingly easier to read, and I found myself wondering what all my hard work had been for.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">_var0 <span class=\"token operator\">=</span> <span class=\"token builtin\">input</span><span class=\"token punctuation\">(</span><span class=\"token string\">'FLAG> '</span><span class=\"token punctuation\">)</span>\n_var1 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span>_var0<span class=\"token punctuation\">,</span> <span class=\"token string\">'encode'</span><span class=\"token punctuation\">)</span>\n_var2 <span class=\"token operator\">=</span> _var1<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n_var3 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">dict</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'get'</span><span class=\"token punctuation\">)</span>\n_var4 <span class=\"token operator\">=</span> <span class=\"token builtin\">globals</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n_var5 <span class=\"token operator\">=</span> _var3<span class=\"token punctuation\">(</span>_var4<span class=\"token punctuation\">,</span> <span class=\"token string\">'f'</span><span class=\"token punctuation\">)</span>\n_var6 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span>_var5<span class=\"token punctuation\">,</span> <span class=\"token string\">'seek'</span><span class=\"token punctuation\">)</span>\n_var7 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__add__'</span><span class=\"token punctuation\">)</span>\n_var8 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__mul__'</span><span class=\"token punctuation\">)</span>\n_var9 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__eq__'</span><span class=\"token punctuation\">)</span>\n_var10 <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>_var2<span class=\"token punctuation\">)</span>\n_var11 <span class=\"token operator\">=</span> _var9<span class=\"token punctuation\">(</span>_var10<span class=\"token punctuation\">,</span> <span class=\"token number\">64</span><span class=\"token punctuation\">)</span>\n_var12 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span>_var11<span class=\"token punctuation\">,</span> <span class=\"token number\">261</span><span class=\"token punctuation\">)</span>\n_var13 <span class=\"token operator\">=</span> _var6<span class=\"token punctuation\">(</span>_var12<span class=\"token punctuation\">)</span>\n_var14 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span>_var2<span class=\"token punctuation\">,</span> <span class=\"token string\">'__getitem__'</span><span class=\"token punctuation\">)</span>\n_var15 <span class=\"token operator\">=</span> _var14<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n_var16 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span>_var15<span class=\"token punctuation\">,</span> <span class=\"token string\">'__le__'</span><span class=\"token punctuation\">)</span>\n_var17 <span class=\"token operator\">=</span> _var16<span class=\"token punctuation\">(</span><span class=\"token number\">127</span><span class=\"token punctuation\">)</span>\n_var18 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span>_var17<span class=\"token punctuation\">,</span> <span class=\"token number\">330</span><span class=\"token punctuation\">)</span>\n_var19 <span class=\"token operator\">=</span> _var6<span class=\"token punctuation\">(</span>_var18<span class=\"token punctuation\">)</span>\n_var20 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n_var21 <span class=\"token operator\">=</span> _var9<span class=\"token punctuation\">(</span>_var20<span class=\"token punctuation\">,</span> <span class=\"token number\">64</span><span class=\"token punctuation\">)</span>\n_var22 <span class=\"token operator\">=</span> _var8<span class=\"token punctuation\">(</span>_var21<span class=\"token punctuation\">,</span> <span class=\"token number\">85</span><span class=\"token punctuation\">)</span>\n_var23 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span>_var22<span class=\"token punctuation\">,</span> <span class=\"token number\">290</span><span class=\"token punctuation\">)</span>\n_var24 <span class=\"token operator\">=</span> _var6<span class=\"token punctuation\">(</span>_var23<span class=\"token punctuation\">)</span>\n_var25 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'append'</span><span class=\"token punctuation\">)</span>\n_var26 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__getitem__'</span><span class=\"token punctuation\">)</span>\n_var27 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'from_bytes'</span><span class=\"token punctuation\">)</span>\n_var28 <span class=\"token operator\">=</span> _var8<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n_var29 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n_var30 <span class=\"token operator\">=</span> _var8<span class=\"token punctuation\">(</span>_var29<span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n_var31 <span class=\"token operator\">=</span> <span class=\"token builtin\">slice</span><span class=\"token punctuation\">(</span>_var28<span class=\"token punctuation\">,</span> _var30<span class=\"token punctuation\">)</span>\n_var32 <span class=\"token operator\">=</span> _var14<span class=\"token punctuation\">(</span>_var31<span class=\"token punctuation\">)</span>\n_var33 <span class=\"token operator\">=</span> _var27<span class=\"token punctuation\">(</span>_var32<span class=\"token punctuation\">,</span> <span class=\"token string\">'little'</span><span class=\"token punctuation\">)</span>\n_var34 <span class=\"token operator\">=</span> _var25<span class=\"token punctuation\">(</span>_var33<span class=\"token punctuation\">)</span>\n_var35 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n_var36 <span class=\"token operator\">=</span> _var9<span class=\"token punctuation\">(</span>_var35<span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n_var37 <span class=\"token operator\">=</span> _var8<span class=\"token punctuation\">(</span>_var36<span class=\"token punctuation\">,</span> <span class=\"token number\">119</span><span class=\"token punctuation\">)</span>\n_var38 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span>_var37<span class=\"token punctuation\">,</span> <span class=\"token number\">457</span><span class=\"token punctuation\">)</span>\n_var39 <span class=\"token operator\">=</span> _var6<span class=\"token punctuation\">(</span>_var38<span class=\"token punctuation\">)</span>\n_var40 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'append'</span><span class=\"token punctuation\">)</span>\n_var41 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__getitem__'</span><span class=\"token punctuation\">)</span>\n_var42 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">int</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__xor__'</span><span class=\"token punctuation\">)</span>\n_var43 <span class=\"token operator\">=</span> _var26<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n_var44 <span class=\"token operator\">=</span> _var42<span class=\"token punctuation\">(</span>_var43<span class=\"token punctuation\">,</span> <span class=\"token number\">1244422970072434993</span><span class=\"token punctuation\">)</span>\n_var45 <span class=\"token operator\">=</span> <span class=\"token builtin\">pow</span><span class=\"token punctuation\">(</span>_var44<span class=\"token punctuation\">,</span> <span class=\"token number\">65537</span><span class=\"token punctuation\">,</span> <span class=\"token number\">18446744073709551557</span><span class=\"token punctuation\">)</span>\n_var46 <span class=\"token operator\">=</span> _var40<span class=\"token punctuation\">(</span>_var45<span class=\"token punctuation\">)</span>\n_var47 <span class=\"token operator\">=</span> _var41<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span>\n_var48 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span>\n_var49 <span class=\"token operator\">=</span> _var9<span class=\"token punctuation\">(</span>_var48<span class=\"token punctuation\">,</span> <span class=\"token number\">8</span><span class=\"token punctuation\">)</span>\n_var50 <span class=\"token operator\">=</span> _var8<span class=\"token punctuation\">(</span>_var49<span class=\"token punctuation\">,</span> <span class=\"token number\">131</span><span class=\"token punctuation\">)</span>\n_var51 <span class=\"token operator\">=</span> _var7<span class=\"token punctuation\">(</span>_var50<span class=\"token punctuation\">,</span> <span class=\"token number\">679</span><span class=\"token punctuation\">)</span>\n_var52 <span class=\"token operator\">=</span> _var6<span class=\"token punctuation\">(</span>_var51<span class=\"token punctuation\">)</span>\n_var53 <span class=\"token operator\">=</span> <span class=\"token builtin\">getattr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'__eq__'</span><span class=\"token punctuation\">)</span>\n_var54 <span class=\"token operator\">=</span> _var53<span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token number\">8215359690687096682</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1862662588367509514</span><span class=\"token punctuation\">,</span> <span class=\"token number\">8350772864914849965</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11616510986494699232</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3711648467207374797</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9722127090168848805</span><span class=\"token punctuation\">,</span> <span class=\"token number\">16780197523811627561</span><span class=\"token punctuation\">,</span> <span class=\"token number\">18138828537077112905</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\nresult0 <span class=\"token operator\">=</span> _var54</code></pre></div>\n<p>Reference: <a href=\"https://qiita.com/hiikunZ/items/e2ab86cf2792dd1394df#sickle-reversing\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">SECCON CTF 2023 Quals Writeup - Qiita</a></p>\n<p>That said, working through the hard-to-read assembly did feel like a small level-up, so I’ll call it a win.</p>\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>35th domestically — the road to the national finals is still long, but I’ll keep grinding.</p>","fields":{"slug":"/ctf-seccon-ctf-2023-en","tagSlugs":["/tag/ctf-en/","/tag/rev-en/","/tag/english/"]},"frontmatter":{"date":"2023-09-17","description":"Writeup for SECCON CTF 2023 QUALS.","tags":["CTF (en)","Rev (en)","English"],"title":"SECCON CTF 2023 QUALS Writeup","socialImage":{"publicURL":"/static/550b5803aac025ea209fc846daa8bc9c/ctf-seccon-ctf-2023.png"}}}},"pageContext":{"slug":"/ctf-seccon-ctf-2023-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}