<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>re | BKISC Blogs</title><link>https://bkisc-blog.netlify.app/tag/re/</link><atom:link href="https://bkisc-blog.netlify.app/tag/re/index.xml" rel="self" type="application/rss+xml"/><description>re</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Mon, 27 Mar 2023 00:00:00 +0000</lastBuildDate><image><url>https://bkisc-blog.netlify.app/media/logo_huc55a0313517dd04bda48a4ace4db28bc_511389_300x300_fit_lanczos_3.png</url><title>re</title><link>https://bkisc-blog.netlify.app/tag/re/</link></image><item><title>Cyber Apocalypse 2023: The Cursed Mission - Reverse Engineering</title><link>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-re/</link><pubDate>Mon, 27 Mar 2023 00:00:00 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/bkisc/htb2023-re/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/re/">re&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/htb-2023/">htb-2023&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#shattered-tablet">Shattered Tablet&lt;/a>&lt;/li>
&lt;li>&lt;a href="#needle-in-a-haystack">Needle in a Haystack&lt;/a>&lt;/li>
&lt;li>&lt;a href="#she-shells-c-shells">She Shells C Shells&lt;/a>&lt;/li>
&lt;li>&lt;a href="#hunting-license">Hunting License&lt;/a>&lt;/li>
&lt;li>&lt;a href="#cave-system">Cave System&lt;/a>&lt;/li>
&lt;li>&lt;a href="#alien-saboteur">Alien Saboteur&lt;/a>&lt;/li>
&lt;li>&lt;a href="#somewhat-linear">Somewhat Linear&lt;/a>&lt;/li>
&lt;li>&lt;a href="#analogue-signal-processing-v2">Analogue Signal Processing v2&lt;/a>&lt;/li>
&lt;li>&lt;a href="#original-posts">Original Posts&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="shattered-tablet">Shattered Tablet&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1KbW9wdpO7sfwq1nUaqMTmmriVMkXzpdq/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Deep in an ancient tomb, you&amp;rsquo;ve discovered a stone tablet with secret information on the locations of other relics. However, while dodging a poison dart, it slipped from your hands and shattered into hundreds of pieces. Can you reassemble it and read the clues?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Reverse Engineering category greets us with a binary. I used &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a> to decompile the binary.&lt;/p>
&lt;p>In the main function, the input is being checked through an if clause.&lt;/p>
&lt;p>I used &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a> to get the input (you can refer to &lt;a href="https://docs.angr.io/examples" target="_blank" rel="noopener">this&lt;/a> and &lt;a href="https://s0uthwood.github.io/post/angr-ctf-writeup/" target="_blank" rel="noopener">this, too&lt;/a> to get the hang of angr).&lt;/p>
&lt;p>Here is the Python script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">angr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">angr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Project&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;E:/Downloads/tablet&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">simulation_manager&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entry_state&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">explore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401359&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">avoid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401367&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">found&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">posix&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We have to find the address of &lt;strong>puts(&amp;ldquo;Yes! That&amp;rsquo;s right!&amp;rdquo;);&lt;/strong> and avoid the address of &lt;strong>puts(&amp;ldquo;No&amp;hellip; not that&amp;rdquo;);&lt;/strong>. Also, we have to increase each of the address by &lt;strong>0x400000&lt;/strong> due to the fact that this binary is &lt;a href="https://ir0nstone.gitbook.io/notes/types/stack/pie" target="_blank" rel="noopener">PIE-enabled&lt;/a>.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{br0k3n_4p4rt,n3ver_t0_b3_r3p41r3d}&lt;/strong>&lt;/p>
&lt;h2 id="needle-in-a-haystack">Needle in a Haystack&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1f9daRLUAowb2GXMbgTaZWzu8v7aEqkWz/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You&amp;rsquo;ve obtained an ancient alien Datasphere, containing categorized and sorted recordings of every word in the forgotten intergalactic common language. Hidden within it is the password to a tomb, but the sphere has been worn with age and the search function no longer works, only playing random recordings. You don&amp;rsquo;t have time to search through every recording - can you crack it open and extract the answer?&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given an another binary. Again, load the binary using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>.&lt;/p>
&lt;p>This time, the main algorithm of the binary is to print out a random element from the given list, and guess what, the flag is also there!&lt;/p>
&lt;img src="re1.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{d1v1ng_1nt0_th3_d4tab4nk5}&lt;/strong>&lt;/p>
&lt;h2 id="she-shells-c-shells">She Shells C Shells&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1oYAAIEwVZ2zmv7vTyZVhfCMPLxoinSKK/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You&amp;rsquo;ve arrived in the Galactic Archive, sure that a critical clue is hidden here. You wait anxiously for a terminal to boot up, hiding in the shadows from the guards hunting for you. Unfortunately, it looks like you&amp;rsquo;ll need a password to get what you need without setting off the alarms&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Very Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We get another binary, and it&amp;rsquo;s time to use &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a> to decompile it.&lt;/p>
&lt;p>Load the binary, we notice the function &lt;strong>func_flag&lt;/strong>. Let&amp;rsquo;s check that out!&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="n">fgets&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">256&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">stdin&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mh">0x4C&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^=&lt;/span> &lt;span class="n">m1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">memcmp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">s&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4DuLL&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mh">0xFFFFFFFFLL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mh">0x4C&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^=&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">];&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Flag: %s&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">return&lt;/span> &lt;span class="mi">0LL&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This is the main part of the function. Our input string s will be used to &lt;strong>XOR&lt;/strong> with two lists, &lt;strong>m1&lt;/strong> and &lt;strong>m2&lt;/strong>. We can use &lt;strong>export data&lt;/strong> in IDA to dump out the contents of &lt;strong>m1&lt;/strong> and &lt;strong>m2&lt;/strong>, as shown below (do the same for &lt;strong>m2&lt;/strong>).&lt;/p>
&lt;img src="re2.png" alt="linux" width="1000"/>
&lt;p>We also know that after the first &lt;strong>XOR&lt;/strong>, &lt;strong>s&lt;/strong> needs to be equal to &lt;strong>t&lt;/strong> (which we can get from the memory, too). Then we can reverse &lt;strong>XOR&lt;/strong> to find &lt;strong>s&lt;/strong>, and the algorithm looks like this.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Since after the check, we continue to &lt;strong>XOR&lt;/strong> &lt;strong>m2&lt;/strong> with the modified &lt;strong>s&lt;/strong> (which should be equal to &lt;strong>t&lt;/strong> after the memcmp), we get the algorithm to print out our flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We can use this Python script to get the flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">m2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span> &lt;span class="mh">0x64&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x97&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x44&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF8&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5F&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xF9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xBE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x18&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x48&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x91&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF1&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x5C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8D&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x26&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x9E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x02&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF7&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF7&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xE4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xB3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x98&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x57&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xED&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x4B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xD1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF6&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0xA1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xEB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x09&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xF2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x58&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xCB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x5E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xBE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x13&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xAB&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x8F&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x1C&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x3E&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xA6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xFE&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x90&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xC9&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0x10&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mh">0xE9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">t&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">0x2C&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x78&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x97&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0D9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x47&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x38&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BD&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FF&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x85&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0xE1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x4A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0AB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x74&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A8&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x9F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0D7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0EC&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0EB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0CD&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x63&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0B2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x39&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x23&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x84&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x92&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x96&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x09&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0F2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x58&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FA&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0CB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x6F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x5E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x1F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0BE&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x2B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x13&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x8E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A5&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x99&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0AB&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x8F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x70&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x1C&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C4&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x3E&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0A6&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0FE&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x93&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x35&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x90&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C3&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0C9&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x10&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x0E9&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">end&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">t&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">m2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{cr4ck1ng_0p3n_sh3ll5_by_th3_s34_sh0r3}&lt;/strong>&lt;/p>
&lt;h2 id="hunting-license">Hunting License&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1xResSHQcRL1wdSw3t3u-TuzGj839Gh0m/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> STOP! Adventurer, have you got an up to date relic hunting license? If you don&amp;rsquo;t, you&amp;rsquo;ll need to take the exam again before you&amp;rsquo;ll be allowed passage into the spacelanes!&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Note:&lt;/strong> This challenge had a docker but it might be closed at the time you are reading this. All needed files will be given in the write-ups.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary file, together with a netcat server.&lt;/p>
&lt;p>By analyzing the binary file using &lt;a href="https://www.geeksforgeeks.org/file-command-in-linux-with-examples/" target="_blank" rel="noopener">file&lt;/a>, we can answer some first questions.&lt;/p>
&lt;img src="re3.png" alt="linux" width="1000"/>
&lt;p>For the next question, we can use &lt;em>&lt;strong>ldd license&lt;/strong>&lt;/em> to get info about libraries of the binary.&lt;/p>
&lt;img src="re4.png" alt="linux" width="1000"/>
&lt;p>For the upcoming question, I used &lt;a href="https://manpages.ubuntu.com/manpages/trusty/man1/gdb.1.html" target="_blank" rel="noopener">gdb&lt;/a> together with its &lt;strong>info function&lt;/strong> command to get the address of the &lt;strong>main&lt;/strong> function.&lt;/p>
&lt;img src="re5.png" alt="linux" width="1000"/>
&lt;img src="re6.png" alt="linux" width="1000"/>
&lt;p>Using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, we can answer some more questions correctly.&lt;/p>
&lt;p>There will be 3 passwords for us to find, the first one is too obvious, the second one is reversed, and the last one is generated using &lt;strong>XOR&lt;/strong> with the key &lt;strong>19&lt;/strong>.&lt;/p>
&lt;p>Here is the script for the last password.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mh">0x47&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7B&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x61&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x77&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x52&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x77&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x55&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7A&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7D&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x72&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x7F&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mh">0x32&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">key&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;img src="re7.png" alt="linux" width="1000"/>
&lt;p>Flag is: &lt;strong>HTB{l1c3ns3_4cquir3d-hunt1ng_t1m3!}&lt;/strong>&lt;/p>
&lt;h2 id="cave-system">Cave System&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/10IGptbNTTSxzx-Mv0Elgt2Vx4bVKjHCZ/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> Deep inside a cave system, 500 feet below the surface, you find yourself stranded with supplies running low. Ahead of you sprawls a network of tunnels, branching off and looping back on themselves. You don&amp;rsquo;t have time to explore them all - you&amp;rsquo;ll need to program your cave-crawling robot to find the way out&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Easy&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We are given a binary once again. Using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, for this type of challenge, we should consider using &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a> or &lt;a href="https://pypi.org/project/z3-solver/" target="_blank" rel="noopener">z3 solver&lt;/a>. Here I choose to use &lt;a href="https://angr.io/" target="_blank" rel="noopener">angr&lt;/a>&lt;/p>
&lt;p>Here is the Python script.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">angr&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">angr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">Project&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;E:/Downloads/cave&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">simulation_manager&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">factory&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">entry_state&lt;/span>&lt;span class="p">())&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">explore&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">find&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401ABA&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">avoid&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mh">0x401AC8&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">simgr&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">found&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">posix&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dumps&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>We have to find the address of &lt;strong>puts(&amp;ldquo;Freedom at last!&amp;rdquo;);&lt;/strong> and avoid the address of &lt;strong>puts(&amp;ldquo;Lost in the darkness, you&amp;rsquo;ll wander for eternity&amp;hellip;&amp;rdquo;);&lt;/strong>. Also, we have to increase each of the address by &lt;strong>0x400000&lt;/strong> due to the fact that this binary is &lt;a href="https://ir0nstone.gitbook.io/notes/types/stack/pie" target="_blank" rel="noopener">PIE-enabled&lt;/a>.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{H0p3_u_d1dn&amp;rsquo;t_g3t_th15_by_h4nd,1t5_4_pr3tty_l0ng_fl4g!!!}&lt;/strong>&lt;/p>
&lt;h2 id="alien-saboteur">Alien Saboteur&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given file:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1LFinP3KsutSSt46WExL_TekEBFv_GOmR/view?usp=sharing" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Description:&lt;/strong> You finally manage to make it into the main computer of the vessel, it&amp;rsquo;s time to get this over with. You try to shutdown the vessel, however a couple of access codes unknown to you are needed. You try to figure them out, but the computer start speaking some weird language, it seems like gibberish&amp;hellip;&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>We get a binary with a text file with no format. Analyze the binary using &lt;a href="https://hex-rays.com/ida-pro/" target="_blank" rel="noopener">IDA Pro&lt;/a>, from the function &amp;ldquo;vm_create&amp;rdquo;, the text file is contained in *&lt;strong>(v3 + 18)&lt;/strong> and being executed like a normal binary.&lt;/p>
&lt;img src="re8.png" alt="linux" width="1000"/>
&lt;p>Each instructions appear to be at every &lt;strong>6th&lt;/strong> index from 0. From that, I wrote an interpreter for the text file (that runs through the binary).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">malduck&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">xor&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ls&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;vm_add&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_addi&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_sub&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_subi&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_mul&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_muli&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_div&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_cmp&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jmp&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_inv&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_push&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_pop&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_mov&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_nop&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_exit&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_print&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_putc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_je&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jne&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_jle&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_jge&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_xor&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_store&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;vm_load&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;vm_input&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">disass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">code&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">code&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">op&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">code&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">opr&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ls&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">op&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_add&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: ADD [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] + [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_addi&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: ADDI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] + &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_sub&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: SUB [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] - [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_subi&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: SUBI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] - &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_mul&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MUL [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] * [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_muli&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MULI [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] * &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_div&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: DIV [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] / [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_cmp&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: CMP flag &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] == [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jmp&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JMP pc &amp;lt;- pc + [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">])))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_inv&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: INV [31] &amp;lt;- syscall(&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">, &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_push&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PUSH [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_pop&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: POP [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_mov&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: MOV [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_nop&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: NOP&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_exit&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: EXIT&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_print&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PRINT [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_putc&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: PUTC &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ascii&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_je&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] == [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jne&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JNE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] != [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jle&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JLE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;= [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_jge&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: JGE pc &amp;lt;- &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2"> if [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;gt;= [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_xor&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: XOR [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] ^ [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_store&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: STORE MEM[[&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]] &amp;lt;- [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_load&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: LOAD [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">] &amp;lt;- MEM[[&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">elif&lt;/span> &lt;span class="n">opr&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;vm_input&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: INPUT [&lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">]&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: UNKNOWN&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">except&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{:03d}&lt;/span>&lt;span class="s2">: UNKNOWN &lt;/span>&lt;span class="si">{}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">format&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">op&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">with&lt;/span> &lt;span class="nb">open&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;./bin&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="s1">&amp;#39;rb&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">f&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">:]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">714&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">714&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">220&lt;/span>&lt;span class="o">*&lt;/span>&lt;span class="mi">6&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ls1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="mi">69&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">disass&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ls1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Which gives the below output.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">000: PUTC &amp;#39;[&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">006: PUTC &amp;#39;M&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">012: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">018: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">024: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">030: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">036: PUTC &amp;#39;V&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">042: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">048: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">054: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">060: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">066: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">072: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">078: PUTC &amp;#39;T&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">084: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">090: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">096: PUTC &amp;#39;m&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">102: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">108: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">114: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">120: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">126: PUTC &amp;#39;]&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">132: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">138: PUTC &amp;#39;&amp;lt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">144: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">150: PUTC &amp;#39;E&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">156: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">162: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">168: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">174: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">180: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">186: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">192: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">198: PUTC &amp;#39;y&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">204: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">210: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">216: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">222: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">228: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">234: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">240: PUTC &amp;#39;&amp;gt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">246: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">252: MOV [30] &amp;lt;- 160
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">258: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">264: MOV [29] &amp;lt;- 17
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">270: INPUT [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">276: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">282: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">288: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">294: JLE pc &amp;lt;- 270 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">300: MOV [30] &amp;lt;- 4
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">306: MOV [31] &amp;lt;- 160
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">312: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">318: MOV [29] &amp;lt;- 10
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">324: MOV [27] &amp;lt;- 169
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">330: MOV [23] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">336: LOAD [25] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">342: LOAD [24] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">348: XOR [25] &amp;lt;- [25] ^ [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">354: JE pc &amp;lt;- 468 if [25] == [24]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">360: PUTC &amp;#39;U&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">366: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">372: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">378: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">384: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">390: PUTC &amp;#39;w&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">396: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">402: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">408: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">414: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">420: PUTC &amp;#39;y&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">426: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">432: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">438: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">444: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">450: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">456: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">462: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">468: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">474: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">480: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">486: JLE pc &amp;lt;- 336 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">492: MOV [15] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">498: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">504: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">510: PUSH [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">516: INV [31] &amp;lt;- syscall(101, 3)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">522: MOV [16] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">528: JE pc &amp;lt;- 648 if [31] == [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">534: PUTC &amp;#39;T&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">540: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">546: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">552: PUTC &amp;#39;m&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">558: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">564: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">570: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">576: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">582: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">588: PUTC &amp;#39;b&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">594: PUTC &amp;#39;l&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">600: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">606: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">612: PUTC &amp;#39;k&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">618: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">624: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">630: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">636: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">642: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">648: MOV [30] &amp;lt;- 119
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">654: MULI [30] &amp;lt;- [30] * 6
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">660: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">666: MOV [29] &amp;lt;- 220
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">672: MOV [27] &amp;lt;- 69
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">678: LOAD [25] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">684: XOR [25] &amp;lt;- [25] ^ [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">690: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">696: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">702: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">708: JLE pc &amp;lt;- 678 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">714: PUTC &amp;#39;&amp;lt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">720: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">726: PUTC &amp;#39;E&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">732: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">738: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">744: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">750: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">756: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">762: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">768: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">774: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">780: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">786: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">792: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">798: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">804: PUTC &amp;#39;p&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">810: PUTC &amp;#39;h&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">816: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">822: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">828: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">834: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">840: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">846: PUTC &amp;#39;&amp;gt;&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">852: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">858: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">864: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">870: MOV [29] &amp;lt;- 36
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">876: INPUT [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">882: STORE MEM[[30]] &amp;lt;- [25]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">888: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">894: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">900: JLE pc &amp;lt;- 876 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">906: MOV [28] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">912: MOV [29] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">918: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">924: MOV [31] &amp;lt;- 148
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">930: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">936: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">942: LOAD [20] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">948: LOAD [21] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">954: PUSH [20]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">960: POP [19]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">966: MOV [18] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">972: ADD [18] &amp;lt;- [18] + [21]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">978: LOAD [17] &amp;lt;- MEM[[18]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">984: STORE MEM[[30]] &amp;lt;- [17]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">990: STORE MEM[[18]] &amp;lt;- [19]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">996: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1002: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1008: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1014: JLE pc &amp;lt;- 942 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1020: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1026: MOV [31] &amp;lt;- 248
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1032: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1038: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1044: LOAD [20] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1050: PUSH [31]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1056: POP [15]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1062: ADD [15] &amp;lt;- [15] + [28]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1068: LOAD [16] &amp;lt;- MEM[[15]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1074: XOR [20] &amp;lt;- [20] ^ [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1080: STORE MEM[[30]] &amp;lt;- [20]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1086: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1092: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1098: JLE pc &amp;lt;- 1044 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1104: ADDI [28] &amp;lt;- [28] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1110: JLE pc &amp;lt;- 918 if [28] &amp;lt;= [29]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1116: MOV [30] &amp;lt;- 48
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1122: MOV [31] &amp;lt;- 92
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1128: MOV [26] &amp;lt;- 0
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1134: MOV [27] &amp;lt;- 35
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1140: LOAD [15] &amp;lt;- MEM[[30]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1146: LOAD [16] &amp;lt;- MEM[[31]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1152: JE pc &amp;lt;- 1206 if [15] == [16]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1158: PUTC &amp;#39;W&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1164: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1170: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1176: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1182: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1188: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1194: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1200: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1206: ADDI [26] &amp;lt;- [26] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1212: ADDI [30] &amp;lt;- [30] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1218: ADDI [31] &amp;lt;- [31] + 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1224: JLE pc &amp;lt;- 1140 if [26] &amp;lt;= [27]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1230: PUTC &amp;#39;A&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1236: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1242: PUTC &amp;#39;c&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1248: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1254: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1260: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1266: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1272: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1278: PUTC &amp;#39;r&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1284: PUTC &amp;#39;a&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1290: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1296: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1302: PUTC &amp;#39;e&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1308: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1314: PUTC &amp;#39;,&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1320: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1326: PUTC &amp;#39;s&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1332: PUTC &amp;#39;h&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1338: PUTC &amp;#39;u&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1344: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1350: PUTC &amp;#39;t&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1356: PUTC &amp;#39;i&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1362: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1368: PUTC &amp;#39;g&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1374: PUTC &amp;#39; &amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1380: PUTC &amp;#39;d&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1386: PUTC &amp;#39;o&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1392: PUTC &amp;#39;w&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1398: PUTC &amp;#39;n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1404: PUTC &amp;#39;!&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1410: PUTC &amp;#39;\n&amp;#39;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1416: EXIT
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1422: UNKNOWN 69
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>For the part from &lt;strong>714&lt;/strong> onwards, the text is being &lt;strong>XOR-ed&lt;/strong> with key &lt;strong>0x69&lt;/strong>.&lt;/p>
&lt;p>Use debuggers to read the memory at &lt;strong>[30]&lt;/strong> then &lt;strong>XOR&lt;/strong> with key &lt;strong>169&lt;/strong>, we get the first input, which is &lt;strong>c0d3_r3d_5hutd0wn&lt;/strong>.&lt;/p>
&lt;img src="re10.png" alt="linux" width="1000"/>
&lt;p>Then we reach the part that it prints out &lt;strong>Enter secret phrase&lt;/strong>. For this part, the algorithm is &lt;strong>shuffle and XOR&lt;/strong>, which can be solved by using debuggers to read the memory at &lt;strong>[92]&lt;/strong>, &lt;strong>[148]&lt;/strong> and &lt;strong>[248]&lt;/strong>, then by the Python script below, we get the flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">malduck&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">unhex&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;13190F0A07001D0E16100C010B1F181408091C1A21042212051B1120060215170D1E2303&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">#[148]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">key2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;16B047B201FBDEEB825D5B5D107C6E215FE7452A3623D4D726D5A311EDE75ECBDB9FDDE2&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1">#[248]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">list&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">unhex&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">b&lt;/span>&lt;span class="s2">&amp;#34;655D774A3340566C75375D356E6E66366C367065776A31795D31707F6C6E33323636315D&amp;#34;&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="c1">#[92]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">36&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">k&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">^&lt;/span> &lt;span class="n">key2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">k&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">35&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">tmp&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">key1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">k&lt;/span>&lt;span class="p">]]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">tmp&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">flag&lt;/span>&lt;span class="p">]))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Flag is: &lt;strong>HTB{5w1rl_4r0und_7h3_4l13n_l4ngu4g3}&lt;/strong>&lt;/p>
&lt;h2 id="somewhat-linear">Somewhat Linear&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1_ExekBgLRfE1J9aMB1QReaAHuX6_SHHZ?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Hard&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, we are provided with &lt;strong>input_generator.py&lt;/strong>, &lt;strong>impulse_response.wav&lt;/strong>, and &lt;strong>shuffled_flag.wav&lt;/strong> files. The objective is to reverse the process implemented in &lt;strong>input_generator.py&lt;/strong> to recover the original flag message.&lt;/p>
&lt;p>The &lt;strong>input_generator.py&lt;/strong> script reads the flag from a file, applies a randomly generated filter to shuffle the frequencies, and then writes the shuffled flag and impulse response to two separate WAV files. The filtering process is achieved by multiplying the amplitudes of the flag&amp;rsquo;s frequency components with the randomly generated &lt;strong>filter_frequency_response&lt;/strong>.&lt;/p>
&lt;p>To solve the challenge, we must deconvolute the shuffled flag by applying the inverse of the filter.&lt;/p>
&lt;p>First, read the &lt;strong>impulse_response.wav&lt;/strong> and &lt;strong>shuffled_flag.wav&lt;/strong> files.&lt;/p>
&lt;p>Next, calculate the filter&amp;rsquo;s frequency response by taking the ratio of the Fast Fourier Transform (FFT) of shuffled_flag.wav to the FFT of impulse_response.wav.&lt;/p>
&lt;p>Finally, apply the inverse of the filter to shuffled_flag.wav to recover the original flag.&lt;/p>
&lt;p>However, the initial attempt to reverse the process yielded a low signal-to-noise ratio, making it difficult to hear the flag. To improve the result, a Wiener filter was implemented. The Wiener filter helps in deconvolution, extracting the original signal from the convoluted signal (in this case, the filter).&lt;/p>
&lt;p>Here&amp;rsquo;s the Python code to recover the flag using the Wiener filter:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">soundfile&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">sf&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Read impulse_response.wav and shuffled_flag.wav&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">impulse_response&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;impulse_response.wav&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">shuffled_flag&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">read&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;shuffled_flag.wav&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Compute the Wiener filter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">impulse_response_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">shuffled_flag_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">rfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">shuffled_flag&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wiener_filter&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">conj&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response_fft&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">abs&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">impulse_response_fft&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">2&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mf">1e-6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># Adding a small value to avoid division by zero&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Apply the Wiener filter to recover the original flag&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">recovered_flag_fft&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">wiener_filter&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">shuffled_flag_fft&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">recovered_flag&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">fft&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">irfft&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">recovered_flag_fft&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Save the result to a WAV file&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;recovered_flag_using_wiener_filter.wav&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">recovered_flag&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">rate&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After running the script, we can listen to the recovered_flag_using_wiener_filter.wav file to hear the flag.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{th1s_w@s_l0w_eff0rt}&lt;/strong>&lt;/p>
&lt;h2 id="analogue-signal-processing-v2">Analogue Signal Processing v2&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Given zip:&lt;/strong> &lt;a href="https://drive.google.com/drive/folders/1HJWdy9Z56bPPIs0nPko2R1KUX7dCCUyj?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Difficulty:&lt;/strong> Insane&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>In this challenge, the encoding process is implemented in &lt;strong>input_generator.py&lt;/strong>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">encode_flag&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vin&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">uniform&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">samples&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vout&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">simulate_chained_circuits&lt;/span>&lt;span class="p">([&lt;/span>&lt;span class="n">ZLCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="n">j&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">]),&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)],&lt;/span> &lt;span class="n">vin&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">duration&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">SAMPLE_RATE&lt;/span>&lt;span class="p">)[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sf&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">write&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;audio/encoded&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1">.wav&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">real&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">vout&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">astype&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;float64&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">SAMPLE_RATE&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">subtype&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;DOUBLE&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">vin&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">vout&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s1">&amp;#39;encoded &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1"> of &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">flag&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s1"> characters&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;strong>encode_flag&lt;/strong> function takes the flag string as input and encodes it character by character. For each character, it creates a &lt;strong>ZLCircuit&lt;/strong> object with a complex impedance of &lt;strong>1j * ord(flag[i])&lt;/strong> and an inductance of &lt;strong>1&lt;/strong> Henry. This circuit represents an inductor and a component with impedance Z in series.&lt;/p>
&lt;p>The &lt;strong>simulate_chained_circuits&lt;/strong> function from circuit.py is called with the created &lt;strong>ZLCircuit&lt;/strong>, input signal &lt;strong>vin&lt;/strong>, &lt;strong>duration&lt;/strong>, and &lt;strong>sample rate&lt;/strong> as arguments. This function calculates the state space representation of the circuits and uses it to simulate the response of the circuit to the input signal &lt;strong>vin&lt;/strong>. The real part of the simulated output signal is saved as a WAV file with the filename format &lt;strong>encoded{i}.wav&lt;/strong>.&lt;/p>
&lt;p>The output signal vout is assigned as the input signal &lt;strong>vin&lt;/strong> for the next iteration, as the circuits are chained, and the output of one circuit is used as the input for the next circuit. The encoding process results in a series of chained circuits with input signals that depend on the previous circuit&amp;rsquo;s output. Our goal is to reverse this encoding process and extract the hidden flag characters from the provided audio files.&lt;/p>
&lt;p>To decode the flag, we need to reverse the encoding process. Since the circuits are chained and the output of one circuit is used as the input for the next circuit, we can work our way backward from the last audio file to the first.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Load the last audio file, &lt;strong>encoded14.wav&lt;/strong>, as the initial input signal.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For each audio file, starting from the last and moving towards the first:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Create a range of possible ASCII values for the flag&amp;rsquo;s characters. Generally, the printable ASCII characters are between 32 and 126.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>For each possible ASCII value:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Create a &lt;strong>ZLCircuit&lt;/strong> object with a complex impedance of &lt;strong>1j * possible_ascii_value&lt;/strong> and an inductance of 1 Henry.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Call the &lt;strong>simulate_chained_circuits&lt;/strong> function with the created &lt;strong>ZLCircuit&lt;/strong>, the input signal from the audio file, duration, and sample rate as arguments.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Compare the simulated output signal with the input signal of the previous audio file (or a zero-filled array for the first character). Calculate the mean squared error (MSE) between the two signals.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Find the character with the lowest MSE, which is the most likely decoded character for the current audio file.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Use the input signal of the current audio file as the input signal for the next iteration.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>By iterating through the audio files in reverse order and finding the character with the lowest mean squared error between the simulated output signal and the input signal of the previous audio file, we can reconstruct the original flag. The decoded flag obtained is &amp;ldquo;HTBqp)le_dance|&amp;rdquo;.&lt;/p>
&lt;p>However, this decoded flag is not entirely accurate. With some reasonable guesses, we can correct the flag. It is likely that the &amp;ldquo;q&amp;rdquo; and &amp;ldquo;|&amp;rdquo; characters should be replaced by &amp;ldquo;{&amp;rdquo; and &amp;ldquo;}&amp;rdquo;, respectively. Also, the &amp;ldquo;)&amp;rdquo; can be replaced by &amp;ldquo;o&amp;rdquo; or &amp;ldquo;0&amp;rdquo;. After these adjustments and some attempts, we get the correct flag: &amp;ldquo;HTB{p0le_dance}&amp;rdquo;.&lt;/p>
&lt;p>Flag is: &lt;strong>HTB{p0le_dance}&lt;/strong>&lt;/p>
&lt;h2 id="original-posts">Original Posts&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="https://fazect.github.io/htb2023/" target="_blank" rel="noopener">From FazeCT&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>ISITDTU CTF 2022 Finals - Slow</title><link>https://bkisc-blog.netlify.app/blog/fazect/isitdtu-2022-slow/</link><pubDate>Fri, 13 Jan 2023 15:44:54 +0000</pubDate><guid>https://bkisc-blog.netlify.app/blog/fazect/isitdtu-2022-slow/</guid><description>&lt;p>
&lt;ul class="tags-list">
&lt;a href="https://bkisc-blog.netlify.app/tag/ctf/">ctf&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/writeup/">writeup&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/re/">re&lt;/a>
&lt;a href="https://bkisc-blog.netlify.app/tag/isitdtu-2022/">isitdtu-2022&lt;/a>
&lt;/ul>
&lt;details class="toc-inpage d-print-none " open>
&lt;summary class="font-weight-bold">Table of Contents&lt;/summary>
&lt;nav id="TableOfContents">
&lt;ul>
&lt;li>&lt;a href="#introduction">Introduction&lt;/a>&lt;/li>
&lt;li>&lt;a href="#static-analysis">Static Analysis&lt;/a>&lt;/li>
&lt;li>&lt;a href="#reaching-case-14">Reaching case 14&lt;/a>&lt;/li>
&lt;li>&lt;a href="#reaching-case-1">Reaching case 1&lt;/a>&lt;/li>
&lt;li>&lt;a href="#patch-the-binary">Patch the binary&lt;/a>&lt;/li>
&lt;li>&lt;a href="#result">Result&lt;/a>&lt;/li>
&lt;/ul>
&lt;/nav>
&lt;/details>
&lt;/p>
&lt;h2 id="introduction">Introduction&lt;/h2>
&lt;p>&lt;strong>Given binary:&lt;/strong> &lt;a href="https://drive.google.com/file/d/1K2NjzRQadtL9CkbTINYDvrH7HRgSfDc1/view?usp=share_link" target="_blank" rel="noopener">Get it here!&lt;/a>&lt;/p>
&lt;p>&lt;strong>Description:&lt;/strong> If you can make the program runs faster, you&amp;rsquo;ll get the flag!&lt;/p>
&lt;p>&lt;strong>Category:&lt;/strong> Reverse Engineering&lt;/p>
&lt;h2 id="static-analysis">Static Analysis&lt;/h2>
&lt;p>The challenge provides us with a single binary, named &lt;strong>slow.exe&lt;/strong>. By using &lt;strong>IDA Pro&lt;/strong> or &lt;strong>Ghidra&lt;/strong> or any other kinds of decompiler, we will get the decompiled code.&lt;/p>
&lt;p>Analyze the &lt;strong>main&lt;/strong> function, we claim that the program initiates an array whose size is &lt;strong>45&lt;/strong>, then modifies it through some more functions, as shown below.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">argc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">argv&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">const&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="o">**&lt;/span>&lt;span class="n">envp&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+4h] [ebp-BCh]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">45&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+8h] [ebp-B8h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">43&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">44&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Block&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">void&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">sub_401AC0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">38&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_4013B0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401B40&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">Block&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The function &lt;strong>sub_401AC0(v5, 38, 0)&lt;/strong> allocates dynamic memory using &lt;strong>malloc&lt;/strong> based on &lt;strong>v5&lt;/strong> then assigns it into variable &lt;strong>Block&lt;/strong>. That variable is then being passed into function &lt;strong>sub_4013B0(Block)&lt;/strong>, which will produce our flag once we have fixed it.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_4013B0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// eax
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// eax
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+4h] [ebp-64h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">v37&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+64h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">v38&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+64h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v6&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">++&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v6&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">switch&lt;/span> &lt;span class="p">(&lt;/span> &lt;span class="n">v6&lt;/span> &lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v22&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v26&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sub_401110&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v26&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v22&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v16&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v16&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">v16&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">7&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">9&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">12&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">13&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">14&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v38&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">_DWORD&lt;/span> &lt;span class="o">*&lt;/span>&lt;span class="p">)(&lt;/span>&lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401040&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;RESULT: %d&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v38&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401260&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v38&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">break&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">15&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">16&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">17&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">case&lt;/span> &lt;span class="mi">18&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">default&lt;/span>&lt;span class="o">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">continue&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is easy to observe that only case 1 and case 14 involve calling other functions.&lt;/p>
&lt;p>To be more precise, if the program reaches &lt;strong>case 1&lt;/strong>, the function &lt;strong>sub_401110(v26, v22)&lt;/strong> will be called, and on the other hand, if the program reaches &lt;strong>case 14&lt;/strong>, the function &lt;strong>sub_401260(v38)&lt;/strong> will be called. We will talk more about these two functions in the next parts of this blog.&lt;/p>
&lt;h2 id="reaching-case-14">Reaching case 14&lt;/h2>
&lt;p>As stated earlier, the function &lt;strong>sub_401260(v38)&lt;/strong> will be called if the program reaches &lt;strong>case 14&lt;/strong>, which will be the last part of our code flow.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_401260&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">char&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">256&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+10h] [ebp-224h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">Buffer&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+110h] [ebp-124h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">_BYTE&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+111h] [ebp-123h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="kt">char&lt;/span> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">32&lt;/span>&lt;span class="p">];&lt;/span> &lt;span class="c1">// [esp+210h] [ebp-24h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qmemcpy&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;Áõ&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">77&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">26&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">...&lt;/span> &lt;span class="n">snip&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">28&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">66&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v5&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">29&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">63&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">memset&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="k">sizeof&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">));&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401D50&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">55&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sub_401160&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">v5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">30&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">v4&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">strlen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">Buffer&lt;/span>&lt;span class="p">)]&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">v4&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">sub_401040&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;flag is: %s&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">char&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">v2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The function receives our modified variable &lt;strong>Block&lt;/strong>, then uses it to produce our flag.&lt;/p>
&lt;h2 id="reaching-case-1">Reaching case 1&lt;/h2>
&lt;p>Here is where things get interesting. Take a look at the function &lt;strong>sub_401110(v26, v22)&lt;/strong>, we can conclude that this is why our program runs slowly. The fact that it makes our program sleeps plus it is possibly called many times throughout the process makes our executable runs without any output for a very long time.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-c" data-lang="c">&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="kr">__cdecl&lt;/span> &lt;span class="nf">sub_401110&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">a2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// [esp+0h] [ebp-4h]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">v3&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sub_4010F0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">Sleep&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1000&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">sub_4010F0&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">v3&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The algorithm here is very simple, however this is author&amp;rsquo;s idea to let the program sleeps for a total of &lt;strong>(a1 + a2) seconds&lt;/strong> each time this function is called. The intended result of this function is to &lt;strong>return a1 + a2&lt;/strong>. We will have to patch the binary to get our flag.&lt;/p>
&lt;h2 id="patch-the-binary">Patch the binary&lt;/h2>
&lt;p>So we know what makes our program runs slowly, it is time to fix that. Below is the decompiled assembly code of that part.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">mov ecx, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov edx, [ecx+10h]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sub edx, 1
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov eax, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov [eax+10h], edx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov ecx, [ebp+var_10]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">push ecx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov edx, [ebp+var_C]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">push edx
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">call sub_401110
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">add esp, 8
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov [ebp+var_58], eax
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mov eax, [ebp+arg_0]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Instead of calling &lt;strong>sub_401110&lt;/strong>, we should patch the program to directly calculates &lt;strong>ecx + edx&lt;/strong> then assigns it into &lt;strong>eax&lt;/strong>. We find out that the opcode of &lt;strong>call sub_401110&lt;/strong> is &lt;strong>E8 77 FC FF FF&lt;/strong>.&lt;/p>
&lt;p>Using &lt;strong>IDA Pro&lt;/strong> integrated settings, which can be found at &lt;strong>Options &amp;gt; Generals &amp;gt; Number of Opcode bytes (non-graph) set to a large enough number&lt;/strong>, we can view each instruction&amp;rsquo;s opcode.&lt;/p>
&lt;p>With &lt;a href="https://github.com/Gallopsled/pwntools" target="_blank" rel="noopener">pwntools&lt;/a> library, we also find out the opcode for &lt;strong>add ecx, edx&lt;/strong> and &lt;strong>move eax, ecx&lt;/strong> is &lt;strong>01 D1&lt;/strong> and &lt;strong>89 C8&lt;/strong> using this script written in &lt;strong>Python&lt;/strong> below.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pwn&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="o">*&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">arch&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;amd64&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">asm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;add ecx, edx&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">asm&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;mov eax, ecx&amp;#39;&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It is now time to patch the binary. Use any hex editor of your choice to patch the binary, here I use &lt;strong>IDA Pro&lt;/strong>&amp;rsquo;s integrated &lt;strong>hex view&lt;/strong> to patch the binary.&lt;/p>
&lt;p>Change &lt;strong>E8 77 FC FF FF&lt;/strong> to &lt;strong>01 D1 89 C8 90&lt;/strong> using any hex editor of your choice (here &lt;strong>90&lt;/strong> corresponds to the &lt;strong>NOP&lt;/strong> instruction).&lt;/p>
&lt;h2 id="result">Result&lt;/h2>
&lt;p>After patching the binary, run it again to get our flag.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">fazect@LAPTOP-CQA118DI:/mnt/d/Downloads$ ./slow.exe
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RESULT: 75025
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">flag is: Pr4ct1c3_VMc0d3_w1th_F1b0n4cc1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Wrap the flag with &lt;strong>ISITDTU{}&lt;/strong>, we have our flag for the challenge: &lt;strong>ISITDTU{Pr4ct1c3_VMc0d3_w1th_F1b0n4cc1}&lt;/strong>.&lt;/p></description></item></channel></rss>