{"componentChunkName":"component---src-templates-post-template-js","path":"/ctf-uiuctf-2023-en","result":{"data":{"markdownRemark":{"id":"fec32077-9102-5876-bdf3-ee504b2e590f","html":"<blockquote>\n<p>This page has been machine-translated from the <a href=\"/ctf-uiuctf-2023\">original page</a>.</p>\n</blockquote>\n<p>I participated in UIUCTF 2023, which started on 7/1, as part of 0nePadding, and we placed 124th out of 818 teams.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 960px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/251fa82515e6b3a2a23649c5a4a9f548/cad6c/image-20230705210351400.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: 30%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAeklEQVQY06WRSQoDMQwE/f/HJrFWb9AjxUwgt8zk0NgIuSjJhYjwrARVg5lBbZ+/5OwVESRnjIGSl0dlcABba7dyQuecKMwchoIXK/o/QNUN3CNzFLahu19Kvsl18bchg+Q+MA2T8wHWGNe9xVI7er+W/Ah/WyrWWjgAWpvSlwxeQdkAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/251fa82515e6b3a2a23649c5a4a9f548/8ac56/image-20230705210351400.webp 240w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/d3be9/image-20230705210351400.webp 480w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/e46b2/image-20230705210351400.webp 960w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/44ab2/image-20230705210351400.webp 1339w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/251fa82515e6b3a2a23649c5a4a9f548/8ff5a/image-20230705210351400.png 240w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/e85cb/image-20230705210351400.png 480w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/d9199/image-20230705210351400.png 960w,\n/static/251fa82515e6b3a2a23649c5a4a9f548/cad6c/image-20230705210351400.png 1339w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/251fa82515e6b3a2a23649c5a4a9f548/d9199/image-20230705210351400.png\"\n            alt=\"image-20230705210351400\"\n            title=\"image-20230705210351400\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<p>This time I solved Rev and OSINT, but the contest left me with a strong sense of how much room I still have to improve.</p>\n<p>For now, I will write up two of the Rev challenges.</p>\n<h2 id=\"vmwhere1rev\" style=\"position:relative;\"><a href=\"#vmwhere1rev\" aria-label=\"vmwhere1rev 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>vmwhere1(Rev)</h2>\n<p>The challenge provides an ELF file named <code class=\"language-text\">vm</code> and a binary file named <code class=\"language-text\">program</code>.</p>\n<p>Analyzing it in Ghidra shows that <code class=\"language-text\">vm</code> reads the byte data from <code class=\"language-text\">program</code> and performs operations according to each byte value.</p>\n<p>The actual decompilation 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>byte <span class=\"token operator\">*</span>param_1<span class=\"token punctuation\">,</span><span class=\"token keyword\">int</span> param_2<span class=\"token punctuation\">)</span>\n\n<span class=\"token punctuation\">{</span>\n  byte <span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">;</span>\n  byte bVar2<span class=\"token punctuation\">;</span>\n  byte bVar3<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">int</span> iVar4<span class=\"token punctuation\">;</span>\n  byte <span class=\"token operator\">*</span>pbVar5<span class=\"token punctuation\">;</span>\n  uint local_24<span class=\"token punctuation\">;</span>\n  byte <span class=\"token operator\">*</span>local_20<span class=\"token punctuation\">;</span>\n  byte <span class=\"token operator\">*</span>local_18<span class=\"token punctuation\">;</span>\n  \n  pbVar5 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>byte <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token function\">malloc</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  local_20 <span class=\"token operator\">=</span> param_1<span class=\"token punctuation\">;</span>\n  local_18 <span class=\"token operator\">=</span> pbVar5<span class=\"token punctuation\">;</span>\n  <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 keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>local_20 <span class=\"token operator\">&lt;</span> param_1<span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>param_1 <span class=\"token operator\">+</span> param_2 <span class=\"token operator\">&lt;=</span> local_20<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Program terminated unexpectedly. Last instruction: 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span>\n             <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_20 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><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>\n    pbVar1 <span class=\"token operator\">=</span> local_20 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">switch</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>local_20<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">1</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">2</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">3</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">4</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">|</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">5</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">6</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token punctuation\">(</span>local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">7</span><span class=\"token operator\">:</span>\n      local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>byte<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><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span>local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">>></span> <span class=\"token punctuation\">(</span>local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">8</span><span class=\"token operator\">:</span>\n      iVar4 <span class=\"token operator\">=</span> <span class=\"token function\">getchar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token operator\">*</span>local_18 <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>byte<span class=\"token punctuation\">)</span>iVar4<span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">9</span><span class=\"token operator\">:</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">putchar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>local_18<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">10</span><span class=\"token operator\">:</span>\n      <span class=\"token operator\">*</span>local_18 <span class=\"token operator\">=</span> <span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> local_20 <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xb</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span><span class=\"token punctuation\">)</span>local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'\\0'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        pbVar1 <span class=\"token operator\">=</span> pbVar1 <span class=\"token operator\">+</span> <span class=\"token function\">CONCAT11</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">,</span>local_20<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> local_20 <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xc</span><span class=\"token operator\">:</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        pbVar1 <span class=\"token operator\">=</span> pbVar1 <span class=\"token operator\">+</span> <span class=\"token function\">CONCAT11</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">,</span>local_20<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> local_20 <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xd</span><span class=\"token operator\">:</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1 <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span><span class=\"token function\">CONCAT11</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">,</span>local_20<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xe</span><span class=\"token operator\">:</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xf</span><span class=\"token operator\">:</span>\n      <span class=\"token operator\">*</span>local_18 <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n      local_18 <span class=\"token operator\">=</span> local_18 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0x10</span><span class=\"token operator\">:</span>\n      local_20 <span class=\"token operator\">=</span> local_20 <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n      bVar2 <span class=\"token operator\">=</span> <span class=\"token operator\">*</span>pbVar1<span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_18 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>pbVar5 <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span>bVar2<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack underflow in reverse at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_20 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>local_24 <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>local_24 <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>bVar2 <span class=\"token operator\">>></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> local_24 <span class=\"token operator\">=</span> local_24 <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        bVar3 <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>local_24 <span class=\"token operator\">-</span> bVar2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        local_18<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>local_24 <span class=\"token operator\">-</span> bVar2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_18<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token operator\">~</span>local_24<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        local_18<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token operator\">~</span>local_24<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> bVar3<span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n      <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n      <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unknown opcode: 0x%02x at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>local_20<span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_20 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><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 keyword\">case</span> <span class=\"token number\">0x28</span><span class=\"token operator\">:</span>\n      <span class=\"token function\">FUN_00101370</span><span class=\"token punctuation\">(</span>param_1<span class=\"token punctuation\">,</span>pbVar5<span class=\"token punctuation\">,</span>local_18<span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>pbVar1 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      local_20 <span class=\"token operator\">=</span> pbVar1<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>local_18 <span class=\"token operator\">&lt;</span> pbVar5<span class=\"token punctuation\">)</span> <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>pbVar5 <span class=\"token operator\">+</span> <span class=\"token number\">0x1000</span> <span class=\"token operator\">&lt;</span> local_18<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack overflow at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_20 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><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>\n  <span class=\"token punctuation\">}</span>\n  <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack underflow at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_20 <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>param_1<span class=\"token punctuation\">)</span><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>Looking at this code, you can see that when the opcode is 0x08, the <code class=\"language-text\">getchar</code> function is called and the input is read one character at a time.</p>\n<p>So I extracted the 0x08 instructions from <code class=\"language-text\">program</code>, and found the following periodic pattern.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 786px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/4c543d47656591ce6256b99635328d4e/321ea/image-20230703183714428.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: 45.416666666666664%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB50lEQVQoz12RyW/aYBDFOVTqlq5K27RS1VYpWSDgLThAjBNjMMYsNjZeCciAlEiV+v8fX2dMwqGHp2+R5jdv3pTcmwk8zYGldOGoFgYVE7Y0xuDEgHmswxFHsGo2hvIYdt2GXjYgH4q4/d6A+bOJ4amOzle5uHe+ySj98Tb4a98hVcdY6gHWZoTcCLHtJ1i2JthoLlLJQq552PZiRKoD5aCMq49VKG9OC4mvfqP67Adqz3+htLZTPExy+KKFWB1hQdC4NUWmzRC3XayMCIEyRCQPEIt9TCu3UN6eEfACl+/OSOeQqAFDWaXcSvAwWsG76CIghfUe4oZDQK8Ar8htSI1SapBde/CEflHIIHbJ4rfw8ngH3FgpNv0Ucy6igrQ5QUhFodBDSK5XNwEi+lt0fNIMU2oovS6j9amOxvsKmoc1Os8hvHgErnsJ8m6EmWwjuhoX0IRGjQkyJ2B2OYRPzuPHhi79qR8qaH+uQzsS0aA757h3uLWywmFAGSUE4dGS9i5DBudmjFCxEdNiWC7BOUN2eP1FJLDw38i0TR7bpbD9qoGEip/AnOEdjTx/ypDeHo2sUm48KouBHMEeeO8scT9c7nKiopSKw7qJlMEUwXaQIWEwbX+h+5hJg2K7DGVpRxLkg5M98B/MjjO6q5xaIAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/4c543d47656591ce6256b99635328d4e/8ac56/image-20230703183714428.webp 240w,\n/static/4c543d47656591ce6256b99635328d4e/d3be9/image-20230703183714428.webp 480w,\n/static/4c543d47656591ce6256b99635328d4e/4cb1e/image-20230703183714428.webp 786w\"\n              sizes=\"(max-width: 786px) 100vw, 786px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/4c543d47656591ce6256b99635328d4e/8ff5a/image-20230703183714428.png 240w,\n/static/4c543d47656591ce6256b99635328d4e/e85cb/image-20230703183714428.png 480w,\n/static/4c543d47656591ce6256b99635328d4e/321ea/image-20230703183714428.png 786w\"\n            sizes=\"(max-width: 786px) 100vw, 786px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/4c543d47656591ce6256b99635328d4e/321ea/image-20230703183714428.png\"\n            alt=\"image-20230703183714428\"\n            title=\"image-20230703183714428\"\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>Tracing the following byte sequence shows that after the input value is saved by the 0xf handler, it is transformed by the 0x7 and 0x5 handlers, XORed with a hardcoded byte value, and then verified one character at a time by the 0xc handler.</p>\n<p>Once I had narrowed it down that far, I could brute-force it with dynamic analysis.</p>\n<p>Using the following script, I identified characters that satisfy the 0xc condition one by one from the beginning, which let me recover the flag.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># gdb -x solver.py</span>\n<span class=\"token keyword\">import</span> gdb\n<span class=\"token keyword\">from</span> pprint <span class=\"token keyword\">import</span> pprint\n\n<span class=\"token comment\"># pprint(dir(gdb))</span>\nBINDIR <span class=\"token operator\">=</span> <span class=\"token string\">\"/home/ubuntu/Hacking/CTF/2023/UIUCTF/Rev/vmwhere1/\"</span>\nBIN <span class=\"token operator\">=</span> <span class=\"token string\">\"chal\"</span>\n\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'file {}/{}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span>BINDIR<span class=\"token punctuation\">,</span> BIN<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># gdb.execute('b *{}'.format(0x555555555587))</span>\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'b *{}'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x55555555569f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n\nflag <span class=\"token operator\">=</span> <span class=\"token string\">\"uiuctf{\"</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token number\">150</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\">150</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">for</span> j <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x21</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x126</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        flag <span class=\"token operator\">=</span> flag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>j<span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token string\">\"A\"</span><span class=\"token operator\">*</span><span class=\"token punctuation\">(</span><span class=\"token number\">30</span><span class=\"token operator\">-</span>i<span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"in.txt\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"w\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n            f<span class=\"token punctuation\">.</span>write<span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">)</span>\n        \n        gdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">\"run program &lt; in.txt\"</span><span class=\"token punctuation\">)</span>\n        gdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">\"continue {}\"</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span><span class=\"token number\">51</span><span class=\"token operator\">+</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        res <span class=\"token operator\">=</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">(</span>gdb<span class=\"token punctuation\">.</span>parse_and_eval<span class=\"token punctuation\">(</span><span class=\"token string\">\"$al\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n        <span class=\"token keyword\">if</span> res <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>flag<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>j<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>flag<span class=\"token punctuation\">)</span>            \n            <span class=\"token keyword\">break</span>\n        <span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">continue</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>flag<span class=\"token punctuation\">)</span>\ngdb<span class=\"token punctuation\">.</span>execute<span class=\"token punctuation\">(</span><span class=\"token string\">'quit'</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h3 id=\"solving-it-properly-with-static-analysis\" style=\"position:relative;\"><a href=\"#solving-it-properly-with-static-analysis\" aria-label=\"solving it properly with static analysis 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>Solving it properly with static analysis</h3>\n<p>For vmwhere1, it was enough to identify that 0xc checks the input one character at a time, and that alone was enough to recover the flag, but if you move on without understanding more than that, you get stuck on vmwhere2.</p>\n<p>So at the vmwhere1 stage, I dug a little deeper to better understand how the binary works.</p>\n<p>To understand the behavior of the VM, the following function called by the 0x28 handler is a useful clue.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">void</span> <span class=\"token function\">FUN_00101370</span><span class=\"token punctuation\">(</span>undefined8 param_1<span class=\"token punctuation\">,</span><span class=\"token keyword\">long</span> param_2<span class=\"token punctuation\">,</span><span class=\"token keyword\">long</span> param_3<span class=\"token punctuation\">,</span>undefined8 param_4<span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">int</span> local_c<span class=\"token punctuation\">;</span>\n  \n  param_3 <span class=\"token operator\">=</span> param_3 <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Program counter: 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span>param_4<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack pointer: 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span>param_3 <span class=\"token operator\">-</span> param_2<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token function\">puts</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack:\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>local_c <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> local_c <span class=\"token operator\">&lt;</span> <span class=\"token number\">0x10</span><span class=\"token punctuation\">;</span> local_c <span class=\"token operator\">=</span> local_c <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span>param_3 <span class=\"token operator\">-</span> param_2<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_c<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"0x%04lx: 0x%04x\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span>param_3 <span class=\"token operator\">-</span> param_2<span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>local_c<span class=\"token punctuation\">,</span>\n             <span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span><span class=\"token punctuation\">(</span>byte <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>param_3 <span class=\"token operator\">-</span> local_c<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 punctuation\">}</span>\n  <span class=\"token keyword\">return</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>If you make a binary that pushes some arbitrary values onto the stack and then invokes the 0x28 handler, you get output like this.</p>\n<p>This shows that the variable passed as <code class=\"language-text\">param_3</code> is the stack pointer.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token builtin class-name\">echo</span> -n -e <span class=\"token string\">\"<span class=\"token entity\" title=\"\\x0a\">\\x0a</span><span class=\"token entity\" title=\"\\x21\">\\x21</span><span class=\"token entity\" title=\"\\x0a\">\\x0a</span><span class=\"token entity\" title=\"\\x22\">\\x22</span><span class=\"token entity\" title=\"\\x0a\">\\x0a</span><span class=\"token entity\" title=\"\\x23\">\\x23</span><span class=\"token entity\" title=\"\\x0a\">\\x0a</span><span class=\"token entity\" title=\"\\x24\">\\x24</span><span class=\"token entity\" title=\"\\x28\">\\x28</span>\"</span> <span class=\"token operator\">></span> <span class=\"token builtin class-name\">test</span>\n./chal <span class=\"token builtin class-name\">test</span>\n<span class=\"token operator\">></span>\nProgram counter: 0x0009\nStack pointer: 0x0003\nStack:\n0x0003: 0x0024\n0x0002: 0x0023\n0x0001: 0x0022\n0x0000: 0x0021\nProgram terminated unexpectedly. Last instruction: 0x0009</code></pre></div>\n<p>Once I had identified the stack pointer and program counter, the rest was to work through the necessary operations.</p>\n<p>After 0x8 reads one character of the flag, the following sequence runs.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">08 0f 0a 04 07 05 05 0f 0a <span class=\"token number\">72</span> 05 0c 00 03 0d 04 0d 0e</code></pre></div>\n<p>As a starting point, I rewrote the processing up to 0xc in Python like this.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">op <span class=\"token operator\">=</span> prog<span class=\"token punctuation\">[</span>pic<span class=\"token punctuation\">]</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n    a <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    b <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>a<span class=\"token operator\">+</span>b<span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">5</span><span class=\"token punctuation\">:</span>\n    a <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    b <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    n <span class=\"token operator\">=</span> a <span class=\"token operator\">^</span> b\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">7</span><span class=\"token punctuation\">:</span>\n    a <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    b <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span>pop<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    n <span class=\"token operator\">=</span> b <span class=\"token operator\">>></span> <span class=\"token punctuation\">(</span>a <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span>\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>n<span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">8</span><span class=\"token punctuation\">:</span>\n    c <span class=\"token operator\">=</span> flag<span class=\"token punctuation\">[</span>seek<span class=\"token punctuation\">]</span>\n    seek <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>c<span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">1</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">0xa</span><span class=\"token punctuation\">:</span>\n    data <span class=\"token operator\">=</span> prog<span class=\"token punctuation\">[</span>pic<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">2</span>\n\n<span class=\"token keyword\">if</span> op <span class=\"token operator\">==</span> <span class=\"token number\">0xf</span><span class=\"token punctuation\">:</span>\n    stack<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>stack<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n    pic <span class=\"token operator\">+=</span> <span class=\"token number\">1</span></code></pre></div>\n<p>Rephrased in order, it does the following.</p>\n<ul>\n<li>It reads one input character and pushes it onto the stack</li>\n<li>It pushes the same value onto the stack once more</li>\n<li>It pushes <code class=\"language-text\">0x4</code> onto the stack</li>\n<li>It right-shifts the input value by <code class=\"language-text\">0x4 &amp; 0x1f</code> and stores the result on the stack (extracting only the high bits of the input character)</li>\n<li>It XORs that value with the input value and stores the result on the stack (the high bits stay as-is and only the low bits are XORed)</li>\n<li>It XORs the value that had been on the stack before the input was read (initially <code class=\"language-text\">0x00</code>) with the transformed value above</li>\n<li>It pushes another copy of that result onto the stack</li>\n<li>It pushes <code class=\"language-text\">0x72</code> onto the stack (this value changes every time and is also used in the next verification)</li>\n<li>It XORs <code class=\"language-text\">0x72</code> with the previous result and stores it on the stack</li>\n<li>It checks whether the previous result is 0, and treats 0 as correct</li>\n</ul>\n<p>If you actually evaluate this sequence, you can see that when the first character is <code class=\"language-text\">u</code>, it returns the correct value <code class=\"language-text\">0</code> as shown below.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 296px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/27edc374106c84ff753747d17d51b920/b1a44/image-20230703220020748.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: 67.91666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAAAsTAAALEwEAmpwYAAACTUlEQVQ4y3VTaVcaQRDcHCYmmjsxKiIQYVlgkWuR5VouheW+D4nxwvcSE/P/P1amW+SBhA/9ZqZhq7u6qqWKN4uhXkfyaxCjeAO39Ut8T7cxKY3xu3nNuUGsjl60IvIdJLYCOFz/htCGC8HXzlkEXh3wKRl7Gs6zPYwSDVzkByg4dGhvFaR3Qoh/9kN7pyC8KTOA/knlj/wvHfC/cExP+wyMTim5HcSZ0UXDX+AuDEtEgIX5D9H3HoTfyPxObB2Kt5eLxT6qoO90UTAlClOxWYdFVwrdSJkpnxkd/Kpd4KowxLEjjq5WRsai4U/rGnftG/S0Co+nHSrhb+cG42SL2RGLwPoUsBk8QUxQ8T23QV2zQ3myx+F9ti/CynnPUysH3akTmuF8LFAuOpMw5bSg4UPeFuPOSuJd9eZQVjKoUHiyMN0Gar7cfTdTgMeCcIemYrCSBEai/KyeYyjek+KY8zTX02STf6MRkFDU1TzggsrxL34xhz5bohMxWT23ZIFL2uGTqMrSrnhvwyvu6lTVh3gMLJ0cJHjQWWsU/aMqOmGTRaIClKf3KNHkrk/FSW4Ibbr+C8aAJTnF1GiWg1gN41QLdTXPVKtidlSQZkjKlsV4ymKWwQ3nakDyEs2HtsLYDWNf+sAKy4KyIiiTeYkyhbpmWzLyEqDpTnN1UpmokSg/hLfu2hP2JN1vG5fsxYonw6DzRl4CpFWjTelHq2yN3P4RMmIdKU8nbUferrML9BUKL1IWKpPjr45HvClscEHr3ug2BqC7b3pfRfUh/gGh7bG7XixEtAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/27edc374106c84ff753747d17d51b920/8ac56/image-20230703220020748.webp 240w,\n/static/27edc374106c84ff753747d17d51b920/f6dfe/image-20230703220020748.webp 296w\"\n              sizes=\"(max-width: 296px) 100vw, 296px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/27edc374106c84ff753747d17d51b920/8ff5a/image-20230703220020748.png 240w,\n/static/27edc374106c84ff753747d17d51b920/b1a44/image-20230703220020748.png 296w\"\n            sizes=\"(max-width: 296px) 100vw, 296px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/27edc374106c84ff753747d17d51b920/b1a44/image-20230703220020748.png\"\n            alt=\"image-20230703220020748\"\n            title=\"image-20230703220020748\"\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>Apart from the value pushed by <code class=\"language-text\">0a 72</code>, the rest of this processing is shared for every character.</p>\n<p>In other words, if we extract the hardcoded verification value for each character, we should be able to reconstruct the correct flag.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 696px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/6320f6da07c48e23aaa38c5f175e2775/82158/image-20230703220312435.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: 144.16666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAdCAYAAACqhkzFAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFdklEQVRIxz1WZ3sTZxDU1ySQEEoAU2wDrnJRt5p7VS+nK9KpugSDQx4SQv7+ZGYl58M9J8PdvrM7ZS8yPvbxxblBLXoEb30f9Q95uKkSensOBgcuglwdvUITvd02/Ngpmq+T6Kwf4OBtBsmfV5H5dZ33Few8jtoV6fLhm1IflTUWW95FdS6O8rMNVPlie/sUbrYGn8900hW4O1V0eHWLLezNJZF+tI78b1ssGrXCiQfLiPxeHuDf/p/opMoYnwQYHXnoE1WwcQiHRZ2FDJEfYHToYsRuxic+rs9DnLzLIfFwGcUXcRbdRv7ZFpIPVxARum+9O7QTFxiyWGitdjA+7WLA3yHb77zPsXgC7nIRXT53ddbDIVuO/7SE1C+rduVY0BB2Cw1MiEwtt/hCY3UPTrIEhy16bNfuuQacxDlqizuoPN9CfamA/dcpQ5R+tIadJxvI6nq6icjlWRd3zUs0t07gbR6hxTabROOQnB4LCrGQC7VI6u22cHkaGMIUSdl7lUTh+TaO5ncMaeRTbYy/g89wMxVM2MqED4+KTXSjh3DnU/CX8gg2jzHh/CYcgwB8rAxx9qHAGa5YMRGju0iK9Io6sYvK+qEx6JAcXV6ebabLaEUPUH2VQOVpFLWFHTR5UMD/O17MEtGaFRWy3bnElJQhW7kh03WicNlym3efLLvZOkJqTy9LJp3YGVrvsqi92IJD1jVDyUVkSDKF5zE7IHLXuMS37p0NPYyfwedLAVn1V3cx3mtbmzpQ47iiXCaUzS1bPl7MmZA1SxXM8LdkRISuCbtGZD0W8InIpTSa1FmNjDbeptCmAqSGgAKXEfr7Dg7epLH9w3tjVwWFLv5gCZGQrF1fhKiKBM5Q7XZIkNzhJFl4he55GbMZ1om8Rff0OSaxK+sJpVovvIhNdXhbG01b5svDTBkhiRgfexhRm1c8SC3rGlBCAcfgEvGQB4oUodt9mUCO+lNBsW06/NK+sZNl+tabpF0ORd7L1YwU6U+o1Kpalj3VsnQo22l+ErecE+nyhSsWVcse2zWpbByh+iaFi8drKDMsamxbklJQaCxKoHunCKX0Z+EgUkTIV++WaVLGkOIVmuEsCPokokuyHLbpELXPg3rZqpF4RE1abM0sZwcQMdNmiL/8TxYO/XQJAWfZJ9sDFtXspgkT2Gz9laKFRMhnJBsJWgVV2Nie5mHD7FQSmzy1/GwTZcqlyqE7Shq1OstBd2caFkG+bs5Qm0WScR8SxrIS+3NjgiadEO530OV8PBLUmk+jQbm0leAzqUinCgelkwStQsYwXWLxJeup2D/hH4ZGrelSQFyXBhjx5XD7BC5jy1/MoMff+rdbBsr5UtGKCWWOXYl187L8ak7hwDskoM2XFPcmbipAzOveps/rZL7C9dBiZhZfxi2lpT85JDubZWRAbYmYKjXYfD+1W52Dl0OkQd/CoWmSCThvjweF/FusihAh0/ysoBB+qo/xPfwCj0NXAIwVpHSMz9l5C2n0GF99FrFgIHnqRu46fZc33Wl2ykIV/58UhayELQTKR6ESQR7n6hBpfS6G5qs4OvL7bNaHRBb78YO5xRBynqZDWcmcwoB1ybRDPaqgQ1RTZ0zd0WLiaMVqhs3ZDEWIWlXSiGnbKbfVEb5rjXIx+XypQ1d4bDfYmsb+eJaH12xVu2RIlm8IQE5RGNzn4f9O0Y796n40HSphQmUeg7b1No02F5bPrwmP4TtdVK4Fw/VFH8cLWcvDe5Ri25aUwsF2yhqThoXk6TbnpJ3SpFRq8xmUnkRtfTbYgfZNl1JTfEl/KqJW9+gcCwfZTgi1i+2rQYuehOh7RqgUWX3tFo6gzYCoc4Zh8tzWZoHRNf0kWTMLapb/AXd27gbalT2UAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/6320f6da07c48e23aaa38c5f175e2775/8ac56/image-20230703220312435.webp 240w,\n/static/6320f6da07c48e23aaa38c5f175e2775/d3be9/image-20230703220312435.webp 480w,\n/static/6320f6da07c48e23aaa38c5f175e2775/038cb/image-20230703220312435.webp 696w\"\n              sizes=\"(max-width: 696px) 100vw, 696px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/6320f6da07c48e23aaa38c5f175e2775/8ff5a/image-20230703220312435.png 240w,\n/static/6320f6da07c48e23aaa38c5f175e2775/e85cb/image-20230703220312435.png 480w,\n/static/6320f6da07c48e23aaa38c5f175e2775/82158/image-20230703220312435.png 696w\"\n            sizes=\"(max-width: 696px) 100vw, 696px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/6320f6da07c48e23aaa38c5f175e2775/82158/image-20230703220312435.png\"\n            alt=\"image-20230703220312435\"\n            title=\"image-20230703220312435\"\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 following script can be used to extract those keys.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"program\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rb\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    prog <span class=\"token operator\">=</span> f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\npattern <span class=\"token operator\">=</span> <span class=\"token string\">b\"\\x05\\x0f\\x0a\"</span>\nkey <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\">3</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>prog<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> prog<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">3</span><span class=\"token punctuation\">:</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> pattern<span class=\"token punctuation\">:</span>\n        key<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>prog<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span></code></pre></div>\n<p>Then, based on the analysis, I ran the following solver and obtained the correct flag.</p>\n<p>The reason <code class=\"language-text\">chr((a>>4)^a)</code> recovers the flag is that the correct input keeps its upper bits unchanged, while its lower bits are XORed with the upper bits.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">with</span> <span class=\"token builtin\">open</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"program\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"rb\"</span><span class=\"token punctuation\">)</span> <span class=\"token keyword\">as</span> f<span class=\"token punctuation\">:</span>\n    prog <span class=\"token operator\">=</span> f<span class=\"token punctuation\">.</span>read<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n\npattern <span class=\"token operator\">=</span> <span class=\"token string\">b\"\\x05\\x0f\\x0a\"</span>\nkey <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\">3</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>prog<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> prog<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">3</span><span class=\"token punctuation\">:</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> pattern<span class=\"token punctuation\">:</span>\n        key<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>prog<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># print([hex(i) for i in key])</span>\n\nflag <span class=\"token operator\">=</span> <span class=\"token string\">\"\"</span>\nkey <span class=\"token operator\">=</span> key<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>key<span class=\"token punctuation\">)</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    k <span class=\"token operator\">=</span> key<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n    a <span class=\"token operator\">=</span> k <span class=\"token operator\">^</span> key<span class=\"token punctuation\">[</span>i<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\n    flag <span class=\"token operator\">+=</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>a<span class=\"token operator\">>></span><span class=\"token number\">4</span><span class=\"token punctuation\">)</span><span class=\"token operator\">^</span>a<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"c\"</span> <span class=\"token operator\">+</span> flag<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\"># ciuctf{ar3_y0u_4_r3al_vm_wh3r3_(gpt_g3n3r4t3d_th1s_f14g)}</span></code></pre></div>\n<h2 id=\"vmwhere2rev\" style=\"position:relative;\"><a href=\"#vmwhere2rev\" aria-label=\"vmwhere2rev 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>vmwhere2(Rev)</h2>\n<p>This challenge gives you a binary almost identical to vmwhere1 along with a new <code class=\"language-text\">program</code> file.</p>\n<p>Unlike vmwhere1, this ELF added the following two handlers.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token keyword\">case</span> <span class=\"token number\">0x11</span><span class=\"token operator\">:</span>\n  local_30 <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>j <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">=</span> j <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token punctuation\">(</span>sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_30 <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    local_30 <span class=\"token operator\">=</span> local_30 <span class=\"token operator\">>></span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token number\">7</span><span class=\"token punctuation\">;</span>\n  current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">case</span> <span class=\"token number\">0x12</span><span class=\"token operator\">:</span>\n  local_2f <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>k <span class=\"token operator\">=</span> <span class=\"token number\">7</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&lt;</span> k<span class=\"token punctuation\">;</span> k <span class=\"token operator\">=</span> k <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    local_2f <span class=\"token operator\">=</span> local_2f <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">1</span> <span class=\"token operator\">|</span> <span class=\"token punctuation\">(</span>sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">8</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n  sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_2f<span class=\"token punctuation\">;</span>\n  sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">7</span><span class=\"token punctuation\">;</span>\n  current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>The 0x11 handler splits the input character into individual bits and pushes them onto the stack.</p>\n<p>Meanwhile, 0x12 appears to reorder the bit sequence stored by 0x11 in reverse and pack it back again.</p>\n<p>The rest looks the same as vmwhere1, so next I looked at the program itself.</p>\n<p>In vmwhere2, unlike vmwhere1, it seems to read all of the input first and only then verify the flag.</p>\n<p>First, just like before, let’s look at the processing after 0x08 reads a character.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 812px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/f73677230ecc79b1a5c0f5976e1ca50c/63ec5/image-20230703233629823.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: 54.58333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAAB4ElEQVQoz52SS0/bQBhFs2mrlraBVkhIgESLE/JwiLFdJ34ksZO4xg1xYjv4ATagqoUN/397+82EVuqiKOpiNNaMfObeM1Px+1/h6i5saYhxewC7PobdcGHuyjD2+7AEh9Y9WptiQrO814N5oME9NjBr2Xy2D7/Aq1kYHaioPC6+494rkKgzFFaEchAi789R6HOkooO4biLrOEhkDz/Or+AcqpC3alDfN6C8O8HZ2xrEl0cQXxyh8+oTKj/9AjfOJcLuFLkRoKDvpB8gM5fIrBCX2gzpmYfgs46IUugfRajbTWg7bfQ+tKFWm5DeCJC2BD5X7v0Spb1CUDMRCgZWrREiyUUxivm4HlBqOiQ1Fsh7F7D2JCiUTttp8aFWG+i+Pl5DOfBbibtJikj1kVLVTD7HgryEdEDcmSAhyC3t55T4bpphuK8Q8GQDoOLzn3JrSZUJTKCYpC+oatwckRKXA5l45u5Z4O04QXi6dsjr6cETPOQJM4WlJnDdgsEcVpvPAMkhO/mPQ0oTdX87XP3l8IqSDzZySAm5Q0rG0xA4FExE4hiJ9h8OS0oT0TvL2U2ymgxMVVdte121MeRKNnL4MLuhS0kQ06Vc06NmcOYtf3qHSW/OUy8pdURwnUG2/+3wF64KcElFKdJhAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/f73677230ecc79b1a5c0f5976e1ca50c/8ac56/image-20230703233629823.webp 240w,\n/static/f73677230ecc79b1a5c0f5976e1ca50c/d3be9/image-20230703233629823.webp 480w,\n/static/f73677230ecc79b1a5c0f5976e1ca50c/77913/image-20230703233629823.webp 812w\"\n              sizes=\"(max-width: 812px) 100vw, 812px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/f73677230ecc79b1a5c0f5976e1ca50c/8ff5a/image-20230703233629823.png 240w,\n/static/f73677230ecc79b1a5c0f5976e1ca50c/e85cb/image-20230703233629823.png 480w,\n/static/f73677230ecc79b1a5c0f5976e1ca50c/63ec5/image-20230703233629823.png 812w\"\n            sizes=\"(max-width: 812px) 100vw, 812px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/f73677230ecc79b1a5c0f5976e1ca50c/63ec5/image-20230703233629823.png\"\n            alt=\"image-20230703233629823\"\n            title=\"image-20230703233629823\"\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 handling of the first input character looked like this.</p>\n<p>There is a lot more here than before.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">08 <span class=\"token number\">11</span> 0a ff <span class=\"token number\">10</span> 09 <span class=\"token number\">10</span> 08 0a 00 <span class=\"token number\">10</span> 02 0f 0a ff 05 0c 00 04 0e 0d 00 04 0e 0d 00 <span class=\"token number\">16</span> <span class=\"token number\">10</span> 02 <span class=\"token number\">10</span> 02 0c 00 07 0e 0a 01 01 0d 00 01 0e 0f 0f 01 01 0d ff d9 0e</code></pre></div>\n<p>To make each step easier to follow, I arranged it by opcode and operand.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">08\n<span class=\"token number\">11</span>\n0a ff\n<span class=\"token number\">10</span> 09\n<span class=\"token number\">10</span> 08\n0a 00\n<span class=\"token number\">10</span> 02\n0f\n0a ff\n05\n0c 00 04 \n0e \n0d 00 04\n0e 0d 00 <span class=\"token number\">16</span> \n<span class=\"token number\">10</span> 02 \n<span class=\"token number\">10</span> 02 \n0c 00 07 0e 0a 01 01 0d 00 01 \n0e \n0f \n0f \n01 \n01 \n0d ff d9\n0e</code></pre></div>\n<ul>\n<li>The received input value is stored on the stack as a bit sequence by the 0x11 handler</li>\n<li><code class=\"language-text\">0xff</code> is pushed onto the stack</li>\n<li>The 0x10 handler manipulates the stack with <code class=\"language-text\">0x9</code> as its argument</li>\n<li>Then 0x10 manipulates the stack again with <code class=\"language-text\">0x8</code> as its argument</li>\n<li><code class=\"language-text\">0x0</code> is pushed onto the stack</li>\n<li>0x10 is called with <code class=\"language-text\">0x2</code> as its argument</li>\n<li>The top stack value is duplicated onto the stack</li>\n<li><code class=\"language-text\">0xff</code> is pushed onto the stack</li>\n<li>The top two stack values are XORed</li>\n<li>Execution advances by two steps and proceeds to the 0xd handler</li>\n<li>The 0x10 handler is executed twice with <code class=\"language-text\">0x2</code> as its argument</li>\n<li>Execution continues until the 0xe handler</li>\n<li>After pushing several values onto the stack, the 0xd handler moves the program counter back by <code class=\"language-text\">-0x25</code> (<code class=\"language-text\">(0x55555555a535+0xffffffffffffffd9) &amp; 0xffffffffffffffff</code>)</li>\n</ul>\n<p>I got this far, but the remaining amount of processing was so huge that I gave up trying to trace it manually.</p>\n<p>So I decided to reimplement the binary and observe its behavior with print debugging.</p>\n<p>My Python version was not good enough to reproduce the behavior completely, so I wrote it in C instead.</p>\n<p>The code I wrote is as follows.</p>\n<div class=\"gatsby-highlight\" data-language=\"c\"><pre class=\"language-c\"><code class=\"language-c\"><span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;stdio.h></span></span>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;stdlib.h></span></span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">char</span> bVar1<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> bVar2<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> iVar3<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>stack<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> local_30<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> local_2f<span class=\"token punctuation\">;</span>\n    uint i<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> j<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> k<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>current_pic<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>sp<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">char</span> <span class=\"token operator\">*</span>next_pic<span class=\"token punctuation\">;</span>\n\n    FILE <span class=\"token operator\">*</span>f<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">void</span> <span class=\"token operator\">*</span>prog<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">long</span> f_size<span class=\"token punctuation\">;</span>\n\n    <span class=\"token comment\">// Read file</span>\n    f <span class=\"token operator\">=</span> <span class=\"token function\">fopen</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"program\"</span><span class=\"token punctuation\">,</span><span class=\"token string\">\"r\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>f <span class=\"token operator\">==</span> <span class=\"token punctuation\">(</span>FILE <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        prog <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">void</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">fseek</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">,</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        f_size <span class=\"token operator\">=</span> <span class=\"token function\">ftell</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">rewind</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        prog <span class=\"token operator\">=</span> <span class=\"token function\">malloc</span><span class=\"token punctuation\">(</span>f_size<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>prog <span class=\"token operator\">==</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">void</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            prog <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">void</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token number\">0x0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">else</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">fread</span><span class=\"token punctuation\">(</span>prog<span class=\"token punctuation\">,</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span>f_size<span class=\"token punctuation\">,</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token function\">fclose</span><span class=\"token punctuation\">(</span>f<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// Run program</span>\n    stack <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span> <span class=\"token operator\">*</span><span class=\"token punctuation\">)</span><span class=\"token function\">malloc</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    current_pic <span class=\"token operator\">=</span> prog<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> start <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>current_pic<span class=\"token punctuation\">;</span>\n    sp <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>current_pic <span class=\"token operator\">&lt;</span> prog<span class=\"token punctuation\">)</span> <span class=\"token operator\">||</span> <span class=\"token punctuation\">(</span>prog <span class=\"token operator\">+</span> f_size <span class=\"token operator\">&lt;=</span> current_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Program terminated unexpectedly. Last instruction: 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>current_pic <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>prog<span class=\"token punctuation\">)</span><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>\n    <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"[0x%x] OP:0x%x  \"</span><span class=\"token punctuation\">,</span> current_pic <span class=\"token operator\">-</span> start<span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>current_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    next_pic <span class=\"token operator\">=</span> current_pic <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">switch</span><span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>current_pic<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">return</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">1</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"ADD %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">2</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"SUB %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">3</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"AND %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">4</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"OR %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">|</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">|</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">5</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"XOR %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">^</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">6</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"LSH %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">>></span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">7</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"RSH %x, %x = %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;&lt;</span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span><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><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">>></span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">0x1f</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">8</span><span class=\"token operator\">:</span>\n        iVar3 <span class=\"token operator\">=</span> <span class=\"token function\">getchar</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token operator\">*</span>sp <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span><span class=\"token punctuation\">)</span>iVar3<span class=\"token punctuation\">;</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"READ %c\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>sp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">9</span><span class=\"token operator\">:</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PUTCHAR %c\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>sp<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token comment\">// putchar((uint)*sp);</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">10</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"PUSH %x\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>next_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token operator\">*</span>sp <span class=\"token operator\">=</span> <span class=\"token operator\">*</span>next_pic<span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> current_pic <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xb</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">char</span><span class=\"token punctuation\">)</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> <span class=\"token char\">'\\0'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            next_pic <span class=\"token operator\">=</span> next_pic <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>next_pic <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span> <span class=\"token operator\">|</span> current_pic<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> current_pic <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"JPM %x\\n\"</span><span class=\"token punctuation\">,</span> current_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xc</span><span class=\"token operator\">:</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            next_pic <span class=\"token operator\">=</span> next_pic <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>next_pic <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span> <span class=\"token operator\">|</span> current_pic<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> current_pic <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"JPM %x\\n\"</span><span class=\"token punctuation\">,</span> current_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xd</span><span class=\"token operator\">:</span>\n        current_pic <span class=\"token operator\">=</span> next_pic <span class=\"token operator\">+</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">*</span>next_pic <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">8</span> <span class=\"token operator\">|</span> current_pic<span class=\"token punctuation\">[</span><span class=\"token number\">2</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"JPM %x\\n\"</span><span class=\"token punctuation\">,</span> current_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xe</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"POP\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0xf</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"DUP %x\\n\"</span><span class=\"token punctuation\">,</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token operator\">*</span>sp <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0x10</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"REVERSE TOP %x\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>next_pic<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> current_pic <span class=\"token operator\">+</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n        bVar1 <span class=\"token operator\">=</span> <span class=\"token operator\">*</span>next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>sp <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>stack <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span>bVar1<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack underflow in reverse at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>current_pic <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>prog<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span>i <span class=\"token operator\">&lt;</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>uint<span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>bVar1 <span class=\"token operator\">>></span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> i <span class=\"token operator\">=</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n            bVar2 <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">-</span> bVar1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n            sp<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">(</span>i <span class=\"token operator\">-</span> bVar1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token operator\">~</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n            sp<span class=\"token punctuation\">[</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span><span class=\"token punctuation\">)</span><span class=\"token operator\">~</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> bVar2<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0x11</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"SPLIT BYTE TO BITS\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        local_30 <span class=\"token operator\">=</span> sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>j <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> <span class=\"token number\">8</span><span class=\"token punctuation\">;</span> j <span class=\"token operator\">=</span> j <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token punctuation\">(</span>sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_30 <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        local_30 <span class=\"token operator\">=</span> local_30 <span class=\"token operator\">>></span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token number\">7</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">case</span> <span class=\"token number\">0x12</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"POP 8 VALUES, NEW VALUE = LSB OF LAST 8\\n\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        local_2f <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span>k <span class=\"token operator\">=</span> <span class=\"token number\">7</span><span class=\"token punctuation\">;</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span> <span class=\"token operator\">&lt;</span> k<span class=\"token punctuation\">;</span> k <span class=\"token operator\">=</span> k <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        local_2f <span class=\"token operator\">=</span> local_2f <span class=\"token operator\">&lt;&lt;</span> <span class=\"token number\">1</span> <span class=\"token operator\">|</span> <span class=\"token punctuation\">(</span>sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">8</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n        sp<span class=\"token punctuation\">[</span><span class=\"token operator\">-</span><span class=\"token number\">8</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> local_2f<span class=\"token punctuation\">;</span>\n        sp <span class=\"token operator\">=</span> sp <span class=\"token operator\">+</span> <span class=\"token operator\">-</span><span class=\"token number\">7</span><span class=\"token punctuation\">;</span>\n        current_pic <span class=\"token operator\">=</span> next_pic<span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">default</span><span class=\"token operator\">:</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Unknown opcode: 0x%02x at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span>ulong<span class=\"token punctuation\">)</span><span class=\"token operator\">*</span>current_pic<span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>current_pic <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>prog<span class=\"token punctuation\">)</span><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>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>sp <span class=\"token operator\">&lt;</span> stack<span class=\"token punctuation\">)</span> <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>stack <span class=\"token operator\">+</span> <span class=\"token number\">0x1000</span> <span class=\"token operator\">&lt;</span> sp<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack overflow at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>current_pic <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>prog<span class=\"token punctuation\">)</span><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>\n    <span class=\"token punctuation\">}</span>\n    <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Stack underflow at 0x%04lx\\n\"</span><span class=\"token punctuation\">,</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>current_pic <span class=\"token operator\">-</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">long</span><span class=\"token punctuation\">)</span>prog<span class=\"token punctuation\">)</span><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>When I compiled and ran this, it eventually executed up to the instruction at offset <code class=\"language-text\">0xbed</code> and printed the string <code class=\"language-text\">Incorrect password!</code>.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 325px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/794c70b537698bd483d43304b9f93042/ff46a/image-20230705184531728.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: 399.58333333333326%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAABQCAYAAAAZQFV3AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKmklEQVRYw3WYZ1sbyRKF2Xzv7tqbbexdZ5skUCSDJBBJgEgKCKFABtt4vc/9/x/61ls9NZrB3g88EqOZ7qpzTlWdnoHGbMUdze26o/k911rYd+XhgqvlNt322LL+v/pizk3/knDN2R3XLdZc6dmMXp/+ZcyNffXEjX/z3KX++8qlv3+tnwPd5bo7Wz1yJ6VDd7Lc0IUu1o9dNVt2V5tdt/pyzs3+Nu5uKifuZrun/3Pf1uiSK/yZc2uvFlzu/ohL/eelLjpQn9nWxS42jt3xoo+ona+6vdSaXiMibrza7Lja5KZeJ9K3ssFlue3O11pucTDtJr597hfslRrudKXpI5S/nYkV/axmN/SBrdGiyz/KShZNheZaov5wcOkj/33cjX75RKKLpNyYqbjeUsN1l+oawdqref2+m1zV3TdHCi7zwxuNEByBpL144M7XW/pcp1Bzc39MuInvXvgI24WqPni50XZnEunWSFFSqrtqrqyLrL9e0Bvf7py6pkS4nVjWjN7vnbvrra77u3blCo9zSk64YE8iIk1u3JQF+QQrNik9n5HUJhSzQ8nmWKKDnNbCnjvIbLid8ZKb+TXhkt8FpDSEFCKD6cb0tqYMKfvpdSWFlHmgIxs3piuaIhsROZsZuyGGRgpRcrORciCksCDyyPw45G73L0Sru64iKfP7raR8FRC0+Cjjxo1lZAMJREhksAeGRkr+cdal5EZ0WJ/cUkiQ1/u9M8XwnWCbjy7YKXpSiIZIiYgNEPb1Vk9YXXLzD5K6ISwj+g8HF7rw8tNprZjsvaGwWgaO8wch/YAeJeV87chtvFnU0kOTlOeh4Mh1ooUQsPSVEix4KLXM7uiqLYtzAwQcZNZ1ESJkd9KzDTtSKe92fcrIB1jGo5VysuwlQ+oV2ZXvSAIYlp5MucmfRkJSuH4p14HjdOVQtRorvbpIhZT58ZjuoqTUlBQW3BjKu4WHKY0KsV9IJmgS/Lg+PPA43m06SzW9iagAHVkgIR4mZf7P/PhG00PUYItswBHygAnhh6XXEgkgE1oSN5YlolP59KS0NBJqGWbrU1teBRIt+qNiPtav46V3OLejpFyVO8p0n5QNxcf6HXKBFP7YiMj4zsb0y6RFqKRIREQJTjtRUmSR8nBeQWcRZMPne2EYOS0OZhS3GIb16a0w3cbUtpJCpHtUimBrsiFaL5uCkke6YE9dLzyE5SBCRsC5pEw0KhslpRGSsvJ8Vkmh1GiwyApCboP29VHbV7aP4ZG0ISUlmCmkwndkw+6rL+el9FL6HVIgjN64O7GqnYnoYpXSFLES2RnlJA+gO0jREbDRVlYRdk82Q9hICxLBWMeDRJe9N9yvZVImMjTFZyVhpKwrDGyQlfb1d/VSMdwO2hf/31R67p/GTbz0IIXdIYC2tPJi1pPC1JMFizIqbepBms4UkQz4gSX3xEqvK4uRgv9rKuhsoO1LGigsIw9rXzpHqleqT65bZKFswJBSQ/01aUlKiiyIbMCVyskJRggflm0u01AoRVyGzhQb9LBsU4/IykpKzTsHWWRTrAk3ojs/Rpd0McQNDJRgIYohpKA7gCYtMIIUG1LalSUCdMgYhRgWojsRMT5n7o9kvzlopQQjlAh8pfStCOaJB5g3dGnuA0f65IzU8MgXf4XphlNPzZKkS0ntjK/od1IGBmRCt6FDt/T3kgbAcKKSgCJWenQbKoWdARv2wNKmHq2JG1nQph6ysdKjrcV02Mrve1KEAMAmRRa2qccCpMY9hwIJeBMVVQXepD7102ifZTo2EcEs7SlKCosgoznpyODZkt/BElJ2xRBQy9Q5zSMsPQb9aWBFYI1mACn7ASlsEGtfkgEpmz+kUcScg1kRHaUSkYHuSfFTD2Hf7p9rBobtB5mCYAiW+MdwQTx2N3BfpE0avcAfEuH660Vlkd+pChZjcaR0t1t751A40AI390VL6gYj0w/6ZbUa1jwwUZQkGZANWE+JHQlJaRe9P+SP5kn/C0mRRfDc1r7YkA249x+Zdu92T/UzNvXwh6elpooYq2uVwoJEiGmHRX7HH3IdVbAp9yP2+WjphaY9GFRRf8iC6BC7ZirwDeFC5QRhY189jU89IkSsvahpL0ZNezFssNZtWuHUO1ZCY82hXYyYdoki9Ic5374oxfQPr7V2depJbXMf3YdNPt417bDcjZp2EW7UtDNGqRQiQtjga72RauF+/GPIciPwhyobmRlRf+hNe1H7oRlSSg/2yYToISymQyWl1AzHQEhKxkx7UWUDEZYyv/M/kTJfYpVSV1LMtB+o7swfhqZddrcOY6YdDYIhNR037dJtzLQz9Uy4vn11A9OeCqceuKppF+yW/ppU10AGYcr4QzPtVIKSEvpDb9qnfh4LTbvakRV/kEQJ9E+cRUiK+UM0BRlRf+hPo3HTbmdBS5lG8RnT3ghM+1HEivRNOx1Z2xdRBbOGxXiOQGIzRUkJFuRAaP7Q2hdzGgx1VtO+RDIQxHhFn0N3Tbv6w7XAtKssSp+adpl6LIJTYCNmD7+BNfjHSi/qD4kUt3USMe2kzIKcU5h66LKjpt3rMDSchiHexkw7+qNDkx4YYpb4f1IwNNMOjmAI43RwMoidl9UfqmmvKbufmHY9+PRNO5u/3TnRhdjMnNcd0+5fYKDD0LST8udM+3Bg2sVsMsS4vjB4x7Tb4dGb9sAfBqTQsakEDolY4h017a3gAN7Rdw75uxjGSLlj2nWYy5mO9M0s0RtJ2V4S5aIeW/3het+0R/2hVcqk1Cub4BxIm4z4nU3RY+7+v5l2eaiSiPhDTLtE7KfelTftYxHTvu1Ne+GuabcS6pv2at+0S0cJTbuQBsbmbyhVoo2VnvlDWheRqRUJ/CEPqWl/9KlptwNR4utn8dKj2/RN+6Z2m94d045z0KknomaOkAGWmOkHDDN6Gn3Z74c29fS8LDrrBP6QRVgwHbxmCU17yUx7V7GMnfXUHwaEeNPetyJsAouUFguwoKYtCwEL3YkIYy/TeOdwGoxQfjR/GDPt0qbUtE95g0/do0FGLKY9hqGRAm60J516UdM+5tsXg52IKmbad09Dw7kQPZqpPwxMe98fNmJTT027POhNe0E3pp2hw09GAG+WvGn3pPBAaNrlAWbIbMS0++jO9PhBytgQhlQq5g/NtPPCMUKKmfbZiGlHKrBPSUIYL3ZjYzRq2nlA3x8W+u8PP2/aq4rhZ9/OWS3bota+aLA0jaIO8+FQNip4uY+02RDnEDsFgKGNRRZFyNxIP2QRUqNWEbEZzv8136qYcQ3ghwrClBcepRULXn8SOgQwxcDNTqJghBb5Y2jxl/jmmb5pT3z9NH54zP+Z1SKnGmZ+Hdd30yzENSLjhSM3Yt14XcALCxouZHGNKalvRaLHCvSEQDVlAR2MqAraPHrkxlsZm5C1l/ZtDf1db3c9hoMZNxGtZYTdDY4WHGf5Dsu8PUYWtPh3Wyeunim7/QlxFCtH7qbcded8CrZKiqStKbcW93RHTqM2U9AfLDOY9pJrLnlPxmRq2k0MZ1w2MeXSuVmXKkgXepFyKbmeTE661KuUm3yQhpSMgsx04xNSwM9IgYikmPbkoGD5UE5Mv4/o9+RjGe6/yfcHo/qZvj+kWP4fesUMstM+4zMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/794c70b537698bd483d43304b9f93042/8ac56/image-20230705184531728.webp 240w,\n/static/794c70b537698bd483d43304b9f93042/647a8/image-20230705184531728.webp 325w\"\n              sizes=\"(max-width: 325px) 100vw, 325px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/794c70b537698bd483d43304b9f93042/8ff5a/image-20230705184531728.png 240w,\n/static/794c70b537698bd483d43304b9f93042/ff46a/image-20230705184531728.png 325w\"\n            sizes=\"(max-width: 325px) 100vw, 325px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/794c70b537698bd483d43304b9f93042/ff46a/image-20230705184531728.png\"\n            alt=\"image-20230705184531728\"\n            title=\"image-20230705184531728\"\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>With this, it looked like I could finally trace the behavior of the actual challenge program.</p>\n<p>Extracting just the part after reading one character from the print-debug output gives the following.</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token punctuation\">[</span>0x74<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x76<span class=\"token punctuation\">]</span> OP:0x8  READ u\n<span class=\"token punctuation\">[</span>0x77<span class=\"token punctuation\">]</span> OP:0x11  SPLIT BYTE TO BITS\n<span class=\"token punctuation\">[</span>0x78<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x7a<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">9</span>\n<span class=\"token punctuation\">[</span>0x7c<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">8</span>\n<span class=\"token punctuation\">[</span>0x7e<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">0</span>, ffffffff <span class=\"token operator\">=</span> ffffffff\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f52f\n<span class=\"token punctuation\">[</span>0x9f<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">0</span>, <span class=\"token number\">0</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">0</span>, <span class=\"token number\">0</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">0</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">1</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">1</span>, <span class=\"token number\">2</span> <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">3</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">4</span>\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">4</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">4</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">4</span>, <span class=\"token number\">4</span> <span class=\"token operator\">=</span> <span class=\"token number\">8</span>\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">4</span>, <span class=\"token number\">8</span> <span class=\"token operator\">=</span> c\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD c, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> d\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP d\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP d\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD d, d <span class=\"token operator\">=</span> 1a\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD d, 1a <span class=\"token operator\">=</span> <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">0</span>, ffffffff <span class=\"token operator\">=</span> ffffffff\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f52f\n<span class=\"token punctuation\">[</span>0x9f<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">27</span>, <span class=\"token number\">27</span> <span class=\"token operator\">=</span> 4e\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">27</span>, 4e <span class=\"token operator\">=</span> <span class=\"token number\">75</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">75</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">76</span>\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">76</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">76</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">76</span>, <span class=\"token number\">76</span> <span class=\"token operator\">=</span> ec\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">76</span>, ffffffec <span class=\"token operator\">=</span> <span class=\"token number\">62</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">0</span>, ffffffff <span class=\"token operator\">=</span> ffffffff\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f52f\n<span class=\"token punctuation\">[</span>0x9f<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">62</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">62</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">62</span>, <span class=\"token number\">62</span> <span class=\"token operator\">=</span> c4\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">62</span>, ffffffc4 <span class=\"token operator\">=</span> <span class=\"token number\">26</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">26</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530\n<span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">27</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">27</span>, <span class=\"token number\">27</span> <span class=\"token operator\">=</span> 4e\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">27</span>, 4e <span class=\"token operator\">=</span> <span class=\"token number\">75</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP ffffffff\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR ffffffff, ffffffff <span class=\"token operator\">=</span> <span class=\"token number\">0</span>\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f51d\n<span class=\"token punctuation\">[</span>0x8d<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8e<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f537\n<span class=\"token punctuation\">[</span>0xa7<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0xa8<span class=\"token punctuation\">]</span> OP:0x8  READ i</code></pre></div>\n<p>It is quite long.</p>\n<p>I was completely stuck at this point, but after referring to <a href=\"https://github.com/D13David/ctf-writeups/blob/main/uiuctf23/rev/vmwhere2/README.md\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">ctf-writeups/uiuctf23/rev/vmwhere2</a>, it seems this can be rewritten as a Python script that performs the following base-3 encoding.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">result <span class=\"token operator\">=</span> <span class=\"token number\">0</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\">7</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 operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>x <span class=\"token operator\">>></span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">&amp;</span> <span class=\"token number\">1</span> <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span>\n\t\tresult <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span>result <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">*</span> <span class=\"token number\">3</span>\n\t<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n\t\tresult <span class=\"token operator\">=</span> result <span class=\"token operator\">*</span> <span class=\"token number\">3</span>\n\tresult <span class=\"token operator\">=</span> result <span class=\"token operator\">%</span> <span class=\"token number\">256</span>\n<span class=\"token keyword\">return</span> result</code></pre></div>\n<p>Sure, if you spot the loop structure from <code class=\"language-text\">0xa0</code> to <code class=\"language-text\">0x9c</code>, I guess it kind of does look like that … maybe? (Not really.)</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token punctuation\">[</span>0xa0<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0xa1<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0xa2<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">1</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0xa3<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">1</span>, <span class=\"token number\">2</span> <span class=\"token operator\">=</span> <span class=\"token number\">3</span>\n<span class=\"token punctuation\">[</span>0xa4<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f510\n\n<span class=\"token punctuation\">[</span>0x80<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x82<span class=\"token punctuation\">]</span> OP:0xf  DUP <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x83<span class=\"token punctuation\">]</span> OP:0xa  PUSH ffffffff\n<span class=\"token punctuation\">[</span>0x85<span class=\"token punctuation\">]</span> OP:0x5  XOR <span class=\"token number\">1</span>, ffffffff <span class=\"token operator\">=</span> fffffffe\n<span class=\"token punctuation\">[</span>0x86<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f519\n<span class=\"token punctuation\">[</span>0x89<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x8a<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f521\n\n<span class=\"token punctuation\">[</span>0x91<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x93<span class=\"token punctuation\">]</span> OP:0x10  REVERSE TOP <span class=\"token number\">2</span>\n<span class=\"token punctuation\">[</span>0x95<span class=\"token punctuation\">]</span> OP:0xc  JPM f117f528\n\n<span class=\"token punctuation\">[</span>0x98<span class=\"token punctuation\">]</span> OP:0xe  POP\n<span class=\"token punctuation\">[</span>0x99<span class=\"token punctuation\">]</span> OP:0xa  PUSH <span class=\"token number\">1</span>\n<span class=\"token punctuation\">[</span>0x9b<span class=\"token punctuation\">]</span> OP:0x1  ADD <span class=\"token number\">3</span>, <span class=\"token number\">1</span> <span class=\"token operator\">=</span> <span class=\"token number\">4</span>\n<span class=\"token punctuation\">[</span>0x9c<span class=\"token punctuation\">]</span> OP:0xd  JPM f117f530</code></pre></div>\n<p>I stared at the output for quite a while, but unfortunately I still could not form a clean understanding of the logic.</p>\n<p>Still, it was reasonable to expect that the transformed input values would eventually be compared against some constant.</p>\n<p>And in fact, I found the place where it compares against <code class=\"language-text\">0x75</code>, which is the computed result when the first character is <code class=\"language-text\">\"u\"</code>.</p>\n<p>If you change the input as shown below, the XOR result changes as well, which suggests that the flag is ultimately checked around this point.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 919px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/7956a882f04292acb11b20e2a45579b6/6295b/image-20230705203219584.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: 13.750000000000002%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAvElEQVQI1yWO226CQBRF+YBGiUZrLPYGTSMDMiAwwOhArbb9/x9aPZ0+7Kych732CYakwtUjNm6xz446sjRbQ7GqScMCFWoyYSosV0eurz3TrsEsM8/Lk/H8eXfcYktwjis+mwsu6RiTD8zO0kUdx02LmuVk84MkRwn1Uvuy21a0C8VZOEY17uFvaPDyYHop+TZfTG89t/1VvjxhH3svVXcp+SyTKDJhuTh4ob3XNOGeYV1w2mi5i/8hEf8CbHhbuAobE+cAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/7956a882f04292acb11b20e2a45579b6/8ac56/image-20230705203219584.webp 240w,\n/static/7956a882f04292acb11b20e2a45579b6/d3be9/image-20230705203219584.webp 480w,\n/static/7956a882f04292acb11b20e2a45579b6/5041b/image-20230705203219584.webp 919w\"\n              sizes=\"(max-width: 919px) 100vw, 919px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/7956a882f04292acb11b20e2a45579b6/8ff5a/image-20230705203219584.png 240w,\n/static/7956a882f04292acb11b20e2a45579b6/e85cb/image-20230705203219584.png 480w,\n/static/7956a882f04292acb11b20e2a45579b6/6295b/image-20230705203219584.png 919w\"\n            sizes=\"(max-width: 919px) 100vw, 919px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/7956a882f04292acb11b20e2a45579b6/6295b/image-20230705203219584.png\"\n            alt=\"image-20230705203219584\"\n            title=\"image-20230705203219584\"\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>So I looked for hardcoded keys around <code class=\"language-text\">0xb90</code> in the binary.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 696px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b0966b7f74539817fdde71c0d2ffe209/82158/image-20230705204000304.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: 36.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABTElEQVQoz1VQy07CUBDtt7lRf8CYqHGjJq6MCeqOGBCQgqClPPqilEKhUFoqiomGhV92vDOtFRfnzpmZmzNnRlLydcz0MdqFJrRyC/qjCqPaZugVFb2SwtyUO6LX5n6/3kP9rgw5V4R8U0Q1V0Dt9gGlqzwkr+Pge71BYE0QuwFeRyHjzYtSvsBqHDEoX4n6ehpjrNpiSBf2k5bBqnUh0fPOHwbslOBro4zPDQ9+yqdpfW567JLca5VWEstJlGiVX0FfH/HnbTFCYE44zoyktuhPWdCsdvgUBDLGgsMXC5v4k12F9gyRM0c8DLAUkXg0SGrLLcTuglfs0c3Fnem2tD65lZymga/ogwVpckgCKWhAaPv/cxFJ1FX6sIRLu6FjIDScZ5NdS+p9g9c0hH1qJE0j43+5nuWuYuH68BKnOwe42D/B2e4RzveOOf4A76mI9p3dT7MAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b0966b7f74539817fdde71c0d2ffe209/8ac56/image-20230705204000304.webp 240w,\n/static/b0966b7f74539817fdde71c0d2ffe209/d3be9/image-20230705204000304.webp 480w,\n/static/b0966b7f74539817fdde71c0d2ffe209/038cb/image-20230705204000304.webp 696w\"\n              sizes=\"(max-width: 696px) 100vw, 696px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b0966b7f74539817fdde71c0d2ffe209/8ff5a/image-20230705204000304.png 240w,\n/static/b0966b7f74539817fdde71c0d2ffe209/e85cb/image-20230705204000304.png 480w,\n/static/b0966b7f74539817fdde71c0d2ffe209/82158/image-20230705204000304.png 696w\"\n            sizes=\"(max-width: 696px) 100vw, 696px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b0966b7f74539817fdde71c0d2ffe209/82158/image-20230705204000304.png\"\n            alt=\"image-20230705204000304\"\n            title=\"image-20230705204000304\"\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>As the code shows, the flag characters are embedded in reverse order, so the bottom <code class=\"language-text\">0x75</code> is the key used to compare against the first character.</p>\n<p>Once I understood that much, I fed in an arbitrary string as shown below and was able to identify every location that seemed to be a key. (Every value that is being compared with <code class=\"language-text\">0x67</code> is a key.)</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/b3dad32f6a0985f871dae4d48c20123a/9de76/image-20230705204415010.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: 67.08333333333334%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAAAsTAAALEwEAmpwYAAABBklEQVQ4y62SS0/CQBSFu4MQEoJAcSsSgcLMEJRHJYG2UF4qBKFiogH5/z/icG9JURZuGBZ3MY98+eacMb77KyyVj1Fe4sVy0cnUIGMF1BPFi8b4GWwQPE4xuVWYy6E+8K/ha9VD+4aAcQ3g1g3IcHIytHOSDO8uB3713o+GJhu6IVDoAHfex6+hoAyz4koZsmHN038yZ7i+qmEvalnRP3So5apey5zhukGGBFwQ+NnULCXKcExAbrmd0fyH+8EnAjKcUobLug87zJAN76EIzHDOlPfOpxC+hM+je7w2Vt03zIQLx1TwSw6aWQWReIBMltFIWWGmdk78MxKttIWnVAUtusdxHQD2u3hpAoko1AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b3dad32f6a0985f871dae4d48c20123a/8ac56/image-20230705204415010.webp 240w,\n/static/b3dad32f6a0985f871dae4d48c20123a/d3be9/image-20230705204415010.webp 480w,\n/static/b3dad32f6a0985f871dae4d48c20123a/e46b2/image-20230705204415010.webp 960w,\n/static/b3dad32f6a0985f871dae4d48c20123a/fb6f1/image-20230705204415010.webp 1423w\"\n              sizes=\"(max-width: 960px) 100vw, 960px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b3dad32f6a0985f871dae4d48c20123a/8ff5a/image-20230705204415010.png 240w,\n/static/b3dad32f6a0985f871dae4d48c20123a/e85cb/image-20230705204415010.png 480w,\n/static/b3dad32f6a0985f871dae4d48c20123a/d9199/image-20230705204415010.png 960w,\n/static/b3dad32f6a0985f871dae4d48c20123a/9de76/image-20230705204415010.png 1423w\"\n            sizes=\"(max-width: 960px) 100vw, 960px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b3dad32f6a0985f871dae4d48c20123a/d9199/image-20230705204415010.png\"\n            alt=\"image-20230705204415010\"\n            title=\"image-20230705204415010\"\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>From there, I could extract the keys, build a table in Python mapping each character to its transformed value, and use that to recover the flag.</p>\n<p>I wrote the following solver.</p>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> subprocess\n\nkey <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">0xc6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x8b</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd9</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xcf</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x63</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x60</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x7b</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x60</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd3</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x7b</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xc1</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xcf</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd0</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x72</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x63</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x75</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xbe</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x7f</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x63</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xe7</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x6d</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x63</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xcf</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xf6</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xd8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x63</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xe7</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x6d</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xb4</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x88</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x72</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x70</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x75</span><span class=\"token punctuation\">,</span><span class=\"token number\">0xb8</span><span class=\"token punctuation\">,</span><span class=\"token number\">0x75</span><span class=\"token punctuation\">]</span>\nkey <span class=\"token operator\">=</span> key<span class=\"token punctuation\">[</span><span class=\"token punctuation\">:</span><span class=\"token punctuation\">:</span><span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span>\ntable <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0x21</span><span class=\"token punctuation\">,</span> <span class=\"token number\">0xfd</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    cmd <span class=\"token operator\">=</span> <span class=\"token string\">'echo \"{}\" | ./a.out | grep 0xb90 | cut -d \" \" -f 5'</span><span class=\"token punctuation\">.</span><span class=\"token builtin\">format</span><span class=\"token punctuation\">(</span><span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n    result <span class=\"token operator\">=</span> subprocess<span class=\"token punctuation\">.</span>run<span class=\"token punctuation\">(</span>cmd<span class=\"token punctuation\">,</span> capture_output<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">,</span> shell<span class=\"token operator\">=</span><span class=\"token boolean\">True</span><span class=\"token punctuation\">)</span>\n    table<span class=\"token punctuation\">[</span>result<span class=\"token punctuation\">.</span>stdout<span class=\"token punctuation\">.</span>decode<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\",\\n\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token builtin\">chr</span><span class=\"token punctuation\">(</span>i<span class=\"token punctuation\">)</span>\n\n<span class=\"token keyword\">for</span> k <span class=\"token keyword\">in</span> key<span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>table<span class=\"token punctuation\">[</span><span class=\"token builtin\">hex</span><span class=\"token punctuation\">(</span>k<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>replace<span class=\"token punctuation\">(</span><span class=\"token string\">\"0x\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"\"</span><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>Running this recovers the flag.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 746px; \"\n    >\n      <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/b15e5ac4dee2f49415d826a2f51e0903/62de4/image-20230705210305482.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: 24.583333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA5UlEQVQY05XMQXOCMBQEYG5YPNSx1Y6dUUEEFCQJQQ0TEiitl/7/H7R9YGs99NLDN7v7MhPn00/xtj7hEhu0/hnN8gg1L6AXe7yXJbRqYCsLyY5IowxFWqDIJMqDpM4oBWTWJx+2oyOFhlm0wkKFJaxfwW47qKWG9mtUa4NqVQ83HTbIXiX2qxNEcMaFtfjYdTCBQZd0sBtDH84Y9HOOes4pqdO2C3Hds/zGvHAYuvNJDPGUgE/JY4zci3AY75ARNk7gsNEGvdwNhmTud3ev/f69J0YhOBE/PPLwyxHeFv/B7/x1+wJxBZIwu13iqgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <picture>\n          <source\n              srcset=\"/static/b15e5ac4dee2f49415d826a2f51e0903/8ac56/image-20230705210305482.webp 240w,\n/static/b15e5ac4dee2f49415d826a2f51e0903/d3be9/image-20230705210305482.webp 480w,\n/static/b15e5ac4dee2f49415d826a2f51e0903/f7ebd/image-20230705210305482.webp 746w\"\n              sizes=\"(max-width: 746px) 100vw, 746px\"\n              type=\"image/webp\"\n            />\n          <source\n            srcset=\"/static/b15e5ac4dee2f49415d826a2f51e0903/8ff5a/image-20230705210305482.png 240w,\n/static/b15e5ac4dee2f49415d826a2f51e0903/e85cb/image-20230705210305482.png 480w,\n/static/b15e5ac4dee2f49415d826a2f51e0903/62de4/image-20230705210305482.png 746w\"\n            sizes=\"(max-width: 746px) 100vw, 746px\"\n            type=\"image/png\"\n          />\n          <img\n            class=\"gatsby-resp-image-image\"\n            src=\"/static/b15e5ac4dee2f49415d826a2f51e0903/62de4/image-20230705210305482.png\"\n            alt=\"image-20230705210305482\"\n            title=\"image-20230705210305482\"\n            loading=\"lazy\"\n            style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n          />\n        </picture>\n  </a>\n    </span></p>\n<h2 id=\"summary\" style=\"position:relative;\"><a href=\"#summary\" aria-label=\"summary permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Summary</h2>\n<p>This time I really felt how lacking my pure reversing skills are.</p>\n<p>Just like in the recent Google CTF, I have been running into more and more problems lately that I still cannot solve even after reading writeups.</p>\n<p>To solve the kinds of problems I still cannot solve now and aim for a higher placement, I strongly feel that I need to build the raw ability to read binaries and understand their behavior, rather than relying on tool usage alone.</p>","fields":{"slug":"/ctf-uiuctf-2023-en","tagSlugs":["/tag/ctf-en/","/tag/rev-en/","/tag/english/"]},"frontmatter":{"date":"2023-07-05","description":"This is my writeup for UIUCTF 2023.","tags":["CTF (en)","Rev (en)","English"],"title":"UIUCTF 2023 Writeup","socialImage":{"publicURL":"/static/cb5ed04abfdd2e10f676bb43deb53b87/ctf-uiuctf-2023.png"}}}},"pageContext":{"slug":"/ctf-uiuctf-2023-en"}},"staticQueryHashes":["251939775","401334301","825871152"]}