<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Rev on Zero&#39;s Blog</title>
    <link>/tags/rev/</link>
    <description>Recent content in Rev on Zero&#39;s Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 05 Mar 2026 16:10:00 +0700</lastBuildDate>
    <atom:link href="/tags/rev/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>HTB - Reversing: Maze</title>
      <link>/posts/htb-rev-maze/</link>
      <pubDate>Thu, 05 Mar 2026 16:10:00 +0700</pubDate>
      <guid>/posts/htb-rev-maze/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; Maze&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Medium&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recover the final valid input from multi-stage checker logic.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;maze.exe&lt;/code&gt; is a PyInstaller-packed Python application that gates progress behind hidden constants and staged payloads.&lt;/p&gt;&#xA;&lt;p&gt;Reversing the Python entrypoint reveals:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;route gate string: &lt;code&gt;Y0u_St1ll_1N_4_M4z3&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;ZIP password for &lt;code&gt;enc_maze.zip&lt;/code&gt;: &lt;code&gt;Y0u_Ar3_W4lkiNG_t0_Y0uR_D34TH&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;After unpacking, deeper stages eventually resolve to an ELF checker whose validation is purely arithmetic and reversible.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTB - Reversing: Hexecution</title>
      <link>/posts/htb-rev-hexecution/</link>
      <pubDate>Thu, 05 Mar 2026 15:58:00 +0700</pubDate>
      <guid>/posts/htb-rev-hexecution/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; Hexecution&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Hard&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recover the expected input for the custom VM program and derive the final flag.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;The binary &lt;code&gt;cook&lt;/code&gt; is a small interpreter for the DSL file &lt;code&gt;recipe.asm&lt;/code&gt;. Instead of checking input directly, it transforms user input via a deterministic two-stage permutation pipeline and compares against a fixed 32-byte target table loaded by VM instructions.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTB - Reversing: vvm</title>
      <link>/posts/htb-rev-vvm/</link>
      <pubDate>Thu, 05 Mar 2026 15:35:00 +0700</pubDate>
      <guid>/posts/htb-rev-vvm/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; vvm&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Hard&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recover the password accepted by the embedded custom VM.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;The binary does not compare the input directly. Instead, it runs a custom VM program that:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;enforces input length = &lt;code&gt;32&lt;/code&gt;,&lt;/li&gt;&#xA;&lt;li&gt;rearranges selected bytes into 8 little-endian 32-bit words,&lt;/li&gt;&#xA;&lt;li&gt;applies &lt;code&gt;rol32&lt;/code&gt; transforms,&lt;/li&gt;&#xA;&lt;li&gt;compares against hardcoded constants.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So the intended path is reverse-engineering VM semantics, then algebraically inverting the transformations.&lt;/p&gt;</description>
    </item>
    <item>
      <title>EH4X CTF 2026: Writeup</title>
      <link>/posts/eh4x-ctf-2026-writeup/</link>
      <pubDate>Wed, 04 Mar 2026 14:00:00 +0700</pubDate>
      <guid>/posts/eh4x-ctf-2026-writeup/</guid>
      <description>&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;This post collects the solved EH4X CTF 2026 challenges and the practical exploitation approach used for each.&lt;/p&gt;&#xA;&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#heist-v1-blockchain&#34;&gt;Heist V1 (Blockchain)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#i-guess-bro-reverse&#34;&gt;i-guess-bro (Reverse)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#womp-womp-pwn&#34;&gt;Womp Womp (Pwn)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#lulocator-pwn&#34;&gt;Lulocator (Pwn)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#sarcasm--sarcasm-pwn&#34;&gt;SarcAsm / Sarcasm (Pwn)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#inferno-sprint-misc&#34;&gt;Inferno Sprint (Misc)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#chusembly-misc&#34;&gt;Chusembly (Misc)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#final-notes&#34;&gt;Final Notes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;heist-v1-blockchain&#34;&gt;Heist V1 (Blockchain)&lt;/h2&gt;&#xA;&lt;h3 id=&#34;tldr&#34;&gt;TL;DR&lt;/h3&gt;&#xA;&lt;p&gt;The vault trusted governance too much. By setting governance to an attacker contract and abusing delegatecall execution, storage got overwritten (&lt;code&gt;admin&lt;/code&gt;/&lt;code&gt;paused&lt;/code&gt;), then funds could be withdrawn.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTB - Reversing: Wayback</title>
      <link>/posts/htb-rev-wayback/</link>
      <pubDate>Wed, 04 Mar 2026 10:55:00 +0700</pubDate>
      <guid>/posts/htb-rev-wayback/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; Wayback&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Medium&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recover generated password and decrypt ciphertext to obtain flag.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;The binary generates a password using &lt;code&gt;rand()&lt;/code&gt; seeded from local timestamp fields (year/month/day/hour/min/sec formula), then uses that key material in AES-CBC flow.&lt;/p&gt;&#xA;&lt;p&gt;Given challenge-provided generation window, key recovery becomes bounded brute-force over time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;exploit-strategy&#34;&gt;Exploit Strategy&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Reverse password generator logic:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;static charset (lower/upper/symbols/digits)&lt;/li&gt;&#xA;&lt;li&gt;seed formula from datetime fields&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;rand() % len(charset)&lt;/code&gt; per output char&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Re-implement generator exactly with libc &lt;code&gt;srand/rand&lt;/code&gt; behavior.&lt;/li&gt;&#xA;&lt;li&gt;Iterate each second in the narrowed date range.&lt;/li&gt;&#xA;&lt;li&gt;Build candidate key from generated password and attempt AES-CBC decrypt.&lt;/li&gt;&#xA;&lt;li&gt;Stop when plaintext contains &lt;code&gt;HTB{...}&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Recovered:&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTB - Reversing: Virtually Mad</title>
      <link>/posts/htb-rev-virtually-mad/</link>
      <pubDate>Wed, 04 Mar 2026 10:50:00 +0700</pubDate>
      <guid>/posts/htb-rev-virtually-mad/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; Virtually Mad&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Medium&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Provide VM bytecode that passes strict opcode-shape and final-state validation.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;The checker executes user-provided opcodes in a small custom VM and validates final state exactly:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;a == 0x200&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;b == 0xffffffff&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;c == 0xffffffff&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;d == 0&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;flags == 0x10000000&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;instruction count = 5&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The opcode format and pre-check masks make the intended sequence effectively unique.&lt;/p&gt;</description>
    </item>
    <item>
      <title>HTB - Reversing: Rega Town</title>
      <link>/posts/htb-rev-rega-town/</link>
      <pubDate>Wed, 04 Mar 2026 10:45:00 +0700</pubDate>
      <guid>/posts/htb-rev-rega-town/</guid>
      <description>&lt;h2 id=&#34;challenge-summary&#34;&gt;Challenge Summary&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Name:&lt;/strong&gt; Rega Town&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Category:&lt;/strong&gt; Reversing&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Difficulty:&lt;/strong&gt; Easy-Medium&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Solved by:&lt;/strong&gt; Shinkiro&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Goal:&lt;/strong&gt; Recover the valid passphrase accepted by the binary.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;pagevault hint=&#34;Ask bz for access&#34;&gt;&#xA;&lt;h2 id=&#34;root-cause&#34;&gt;Root Cause&lt;/h2&gt;&#xA;&lt;p&gt;Validation is split into two deterministic layers:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;filter_input&lt;/code&gt; enforces format and character-class constraints via embedded regex patterns.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;check_input&lt;/code&gt; multiplies ASCII values of fixed chunks and compares them to hardcoded constants.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Given both layers, the space collapses to a tiny set of candidates.&lt;/p&gt;&#xA;&lt;h2 id=&#34;exploit-strategy&#34;&gt;Exploit Strategy&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Extract regex constraints from &lt;code&gt;filter_input&lt;/code&gt; to build per-position candidate pools.&lt;/li&gt;&#xA;&lt;li&gt;Extract target products from &lt;code&gt;check_input&lt;/code&gt; for each underscore-separated chunk.&lt;/li&gt;&#xA;&lt;li&gt;Brute-force each chunk independently using product matching.&lt;/li&gt;&#xA;&lt;li&gt;Apply final &lt;code&gt;main&lt;/code&gt; assertions (&lt;code&gt;input[5] == &#39;0&#39;&lt;/code&gt;, &lt;code&gt;input[9] == &#39;r&#39;&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Select intended semantic candidate.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;solver-code&#34;&gt;Solver Code&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; itertools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; math&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; pathlib&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; string&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; subprocess&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Product constants used by check_input() for each chunk.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;TARGETS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x7A070&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x5C436&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x6CC60&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x27B5776&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x10F9&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0xD76A0&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;0x7465A58&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# Character pools inferred from regex constraints in filter_input().&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;POOLS &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;XYZ&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ascii_letters &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ascii_letters &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;_&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;h7&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ascii_uppercase, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;n&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;abcdefgh&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;O&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;digits],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T&amp;#34;&lt;/span&gt;, string&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;ascii_letters, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;e&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nopqrstuvwx&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nopqrstuvwx&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;nc|&amp;#34;&lt;/span&gt;],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ascii_product&lt;/span&gt;(s: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; int:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; math&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;prod(ord(c) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; c &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; s)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;solve_chunk&lt;/span&gt;(charsets, target):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    out &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; tup &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; itertools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;product(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;charsets):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;join(tup)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ascii_product(s) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; target:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            out&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(s)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; out&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;maybe_check_binary&lt;/span&gt;(flag: str) &lt;span style=&#34;color:#f92672&#34;&gt;-&amp;gt;&lt;/span&gt; bool &lt;span style=&#34;color:#f92672&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bin_path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pathlib&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;Path(__file__)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;with_name(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;rega_town&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; bin_path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;exists():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    p &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; subprocess&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;run(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        [str(bin_path)],&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        input&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;flag &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        text&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        capture_output&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        check&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;False&lt;/span&gt;,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    )&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Correct one of us!!&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; p&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;stdout&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;():&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    chunk_candidates &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [solve_chunk(cs, t) &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; cs, t &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; zip(POOLS, TARGETS)]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[+] Chunk candidates:&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; i, cands &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; enumerate(chunk_candidates, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;  chunk&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;i&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;cands&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    all_flags &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; []&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; parts &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; itertools&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;product(&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;chunk_candidates):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        flag &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HTB&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;{{&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;_&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;parts[&lt;span style=&#34;color:#ae81ff&#34;&gt;6&lt;/span&gt;]&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;}}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flag[&lt;span style=&#34;color:#ae81ff&#34;&gt;5&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; flag[&lt;span style=&#34;color:#ae81ff&#34;&gt;9&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;continue&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        all_flags&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;append(flag)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[+] Valid candidates after assertions:&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; f &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; all_flags:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        status &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; maybe_check_binary(f)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; status &lt;span style=&#34;color:#f92672&#34;&gt;is&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;None&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;  &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;f&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;  &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;f&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;  (binary check: &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;status&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;)&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    intended &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; next((f &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; f &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; all_flags &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; f&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;endswith(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Town}&amp;#34;&lt;/span&gt;)), all_flags[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;])&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;[+] Intended flag:&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    print(&lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;  &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;intended&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    main()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;flag&#34;&gt;Flag&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;HTB{Y0u_Ar3_Th3_K1ng_O7_The_Town}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/pagevault&gt;</description>
    </item>
    <item>
      <title>0x1 - Learn CTF: Reverse Engineering</title>
      <link>/posts/0x1-learn-ctf-reverse-engineering/</link>
      <pubDate>Mon, 23 Feb 2026 15:30:00 +0700</pubDate>
      <guid>/posts/0x1-learn-ctf-reverse-engineering/</guid>
      <description>&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#re-010--network-byte-transform-checker&#34;&gt;re-010 — Network byte-transform checker&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#re-012--constraint-based-checker-f1f8&#34;&gt;re-012 — Constraint-based checker (f1..f8)&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#carbonara--jump-obfuscation-and-data-flow-recovery&#34;&gt;Carbonara — jump-obfuscation and data-flow recovery&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;re-010--network-byte-transform-checker&#34;&gt;re-010 — Network byte-transform checker&lt;/h2&gt;&#xA;&lt;h3 id=&#34;summary&#34;&gt;Summary&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Type:&lt;/strong&gt; Reversing (ELF64, stripped, PIE)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Behavior:&lt;/strong&gt; TCP server flag checker&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Port:&lt;/strong&gt; &lt;code&gt;31338&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Expected input length:&lt;/strong&gt; &lt;code&gt;37&lt;/code&gt; bytes&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; &lt;code&gt;:)&lt;/code&gt; on success, &lt;code&gt;:(&lt;/code&gt; on failure&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Flag:&lt;/strong&gt; &lt;code&gt;CBC{c72b6b1feb2dbb3132380e1a9f967441}&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;notes&#34;&gt;Notes&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The binary does not read from stdin directly; it binds/listens and validates client input over a socket.&lt;/li&gt;&#xA;&lt;li&gt;Validation is split into 3 blocks of 16 transformed-byte checks using constant tables in &lt;code&gt;.rodata&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Recovered plaintext chunks:&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;CBC{c72b6b1feb2d&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;bb3132380e1a9f96&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;7441}&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Combined final flag:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CBC{c72b6b1feb2dbb3132380e1a9f967441}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;validation&#34;&gt;Validation&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# run service&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./chall&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# in another shell&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;python3 - &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;lt;&amp;lt; &amp;#39;PY&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;import socket&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;flag=&amp;#39;CBC{c72b6b1feb2dbb3132380e1a9f967441}&amp;#39;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;s=socket.create_connection((&amp;#39;127.0.0.1&amp;#39;,31338))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;print(s.recv(200))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;s.sendall(flag.encode()+b&amp;#39;\n&amp;#39;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;print(s.recv(200))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;PY&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Expected response contains &lt;code&gt;:)&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
