<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Crypto on 4mN3s14 | CTF Player &amp; Student</title><link>https://john-jkar.github.io/myblog/tags/crypto/</link><description>Recent content in Crypto on 4mN3s14 | CTF Player &amp; Student</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 12 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://john-jkar.github.io/myblog/tags/crypto/index.xml" rel="self" type="application/rss+xml"/><item><title>Daily Alpacahack - XOR (Crypto / Easy) Writeup</title><link>https://john-jkar.github.io/myblog/posts/xor/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://john-jkar.github.io/myblog/posts/xor/</guid><description>&lt;h1 id="daily-alpacahack-writeup-xor-crypto--easy"&gt;Daily Alpacahack Writeup: XOR (Crypto / Easy)&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Crypto&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Easy&lt;/p&gt;
&lt;h2 id="challenge-description"&gt;Challenge Description&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re given a Python encryption script and a ciphertext hex string.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; os
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; secrets
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; string
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; itertools &lt;span style="color:#f92672"&gt;import&lt;/span&gt; cycle
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;flag &lt;span style="color:#f92672"&gt;=&lt;/span&gt; os&lt;span style="color:#f92672"&gt;.&lt;/span&gt;getenv(&lt;span style="color:#e6db74"&gt;&amp;#34;FLAG&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;Alpaca&lt;/span&gt;&lt;span style="color:#e6db74"&gt;{FAKEFAKEFAKEFAKE}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encode()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;assert&lt;/span&gt; flag&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#e6db74"&gt;b&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;Alpaca{&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# key = b&amp;#34;???????&amp;#34;, e.g, abcdefg&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;key &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;b&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;join(secrets&lt;span style="color:#f92672"&gt;.&lt;/span&gt;choice(string&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ascii_letters)&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encode() &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; _ &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;assert&lt;/span&gt; len(key) &lt;span style="color:#f92672"&gt;==&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;c &lt;span style="color:#f92672"&gt;=&lt;/span&gt; bytes([c1 &lt;span style="color:#f92672"&gt;^&lt;/span&gt; c2 &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; c1, c2 &lt;span style="color:#f92672"&gt;in&lt;/span&gt; zip(flag, cycle(key))])
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(c&lt;span style="color:#f92672"&gt;.&lt;/span&gt;hex())
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Ciphertext:&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;031b13072d280a2c1816392f3b041d07020d2f1619232817153b24141d000c3925281a3704161b
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="analysis"&gt;Analysis&lt;/h2&gt;
&lt;p&gt;The encryption scheme is a &lt;strong&gt;repeating-key XOR cipher&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A random 7-byte key is generated using &lt;code&gt;secrets.choice(string.ascii_letters)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The flag is XOR&amp;rsquo;d against the key, repeating the key cyclically with &lt;code&gt;itertools.cycle&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;XOR has the useful property:&lt;/p&gt;</description></item><item><title>AAAAAAAAEEEEEEEESSSSSSSS - CTF Writeup</title><link>https://john-jkar.github.io/myblog/posts/aes/</link><pubDate>Sun, 15 Feb 2026 06:00:00 +0000</pubDate><guid>https://john-jkar.github.io/myblog/posts/aes/</guid><description>&lt;h1 id="aaaaaaaaeeeeeeeessssssss---alpacahack-challenge-writeup"&gt;AAAAAAAAEEEEEEEESSSSSSSS - Alpacahack challenge writeup&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Crypto&lt;br&gt;
&lt;strong&gt;Difficulty:&lt;/strong&gt; Medium&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; hiikunz&lt;/p&gt;
&lt;h2 id="challenge-description"&gt;Challenge Description&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re given a Python script that encrypts a flag using AES-ECB mode with a twist - each character of the flag is repeated 8 times before encryption. We can also query an encryption oracle with arbitrary plaintexts.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; c &lt;span style="color:#f92672"&gt;in&lt;/span&gt; flag:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ffffffffllllllllaaaaaaaagggggggg &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; bytes([c] &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ciphertext &lt;span style="color:#f92672"&gt;=&lt;/span&gt; cipher&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encrypt(ffffffffllllllllaaaaaaaagggggggg)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="initial-analysis"&gt;Initial Analysis&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s break down what the code does:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flag format&lt;/strong&gt;: 32 bytes total, format &lt;code&gt;Alpaca{...}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Character repetition&lt;/strong&gt;: Each character is repeated 8 times&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total plaintext&lt;/strong&gt;: 32 characters × 8 repetitions = 256 bytes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Encryption&lt;/strong&gt;: AES-ECB mode (Electronic Codebook)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blocks&lt;/strong&gt;: 256 bytes ÷ 16 bytes per block = 16 blocks&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="understanding-the-encoding"&gt;Understanding the Encoding&lt;/h3&gt;
&lt;p&gt;If the flag is &lt;code&gt;Alpaca{test_flag_here______}&lt;/code&gt;, the plaintext becomes:&lt;/p&gt;</description></item></channel></rss>