<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>T4QI-Blog</title>
    <link>https://t4qi.rocks/</link>
    <description>Recent content on T4QI-Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 20 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://t4qi.rocks/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Quadratic Residues</title>
      <link>https://t4qi.rocks/blog/quadratic_residues/</link>
      <pubDate>Fri, 20 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/blog/quadratic_residues/</guid>
      <description>&lt;h2 id=&#34;1-the-concept-quadratic-residues&#34;&gt;&#xA;  &lt;a href=&#34;#1-the-concept-quadratic-residues&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    1. The Concept: Quadratic Residues&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;In modular arithmetic, an integer $a$ is considered a &lt;strong&gt;Quadratic Residue (QR)&lt;/strong&gt; modulo $n$ if it has a perfect square root under that modulus. Mathematically, there exists some integer $x$ such that:&lt;/p&gt;&#xA;&lt;p&gt;$$x^2 \equiv a \pmod n$$&lt;/p&gt;&#xA;&lt;p&gt;If no such integer $x$ exists, then $a$ is a &lt;strong&gt;Quadratic Non-Residue (QNR)&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;brute-force-implementation&#34;&gt;&#xA;  &lt;a href=&#34;#brute-force-implementation&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Brute Force Implementation&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;For small numbers, we can iterate through all possible values in the modulus to see if their square matches our target number.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Group Theory and Modular Arithmetic – Foundations for Basic Cryptography</title>
      <link>https://t4qi.rocks/blog/group_theory_and_modular_arithmetic_foundations_for_basic_cryptography/</link>
      <pubDate>Sun, 15 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/blog/group_theory_and_modular_arithmetic_foundations_for_basic_cryptography/</guid>
      <description>&lt;p&gt;Cryptography relies heavily on specific mathematical structures and number theory. This post breaks down the fundamental definitions of Groups, Modular Arithmetic, and key theorems like the GCD and the Chinese Remainder Theorem based on my study notes.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-group-theory&#34;&gt;&#xA;  &lt;a href=&#34;#1-group-theory&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    1. Group Theory&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;To understand modern encryption (like RSA or Elliptic Curve Cryptography), we must first define the algebraic structures they operate on.&lt;/p&gt;&#xA;&lt;h3 id=&#34;semigroups&#34;&gt;&#xA;  &lt;a href=&#34;#semigroups&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Semigroups&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;A set $S$ combined with a binary operation $\circ$ is a Semigroup if it satisfies:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Baby_Time_Capsule</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/baby_time_capsule/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/baby_time_capsule/</guid>
      <description>&lt;h2 id=&#34;vulnerability-analysis&#34;&gt;&#xA;  &lt;a href=&#34;#vulnerability-analysis&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Vulnerability Analysis&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The provided &lt;code&gt;server.py&lt;/code&gt; script reveals the following cryptographic setup:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Message:&lt;/strong&gt; The same &lt;code&gt;FLAG&lt;/code&gt; is encrypted every time a user requests a &amp;ldquo;time capsule.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Public Exponent ($e$):&lt;/strong&gt; Fixed at &lt;strong&gt;5&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Modulus ($n$):&lt;/strong&gt; A new $1024$-bit RSA modulus is generated for every request.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Process:&lt;/strong&gt; Each time you ask for a capsule, the server provides a new ciphertext $c_i \equiv m^5 \pmod{n_i}$ and the corresponding public key $(n_i, 5)$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>BabyEncryption</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/baby_encryption/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/baby_encryption/</guid>
      <description>&lt;p&gt;This challenge is a classic example of an &lt;strong&gt;Affine Cipher&lt;/strong&gt; applied at the byte level. Here is a breakdown of how the encryption works and how to reverse it to retrieve the message.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;understanding-the-encryption&#34;&gt;&#xA;  &lt;a href=&#34;#understanding-the-encryption&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Understanding the Encryption&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The provided &lt;code&gt;chall.py&lt;/code&gt; script performs a simple linear transformation on each character of the secret message. The mathematical formula for the encryption is:&lt;/p&gt;&#xA;&lt;p&gt;$$E(x) = (ax + b) \pmod{n}$$&lt;/p&gt;&#xA;&lt;p&gt;Based on the source code:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Embryonic_Plant</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/embryonic_plant/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/embryonic_plant/</guid>
      <description>&lt;p&gt;This challenge involves a custom Linear Congruential Generator (LCG) where the parameters of the RNG are tied to the factors of an RSA modulus.&lt;/p&gt;&#xA;&lt;h3 id=&#34;analysis-of-the-rng&#34;&gt;&#xA;  &lt;a href=&#34;#analysis-of-the-rng&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Analysis of the RNG&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The &lt;code&gt;RNG&lt;/code&gt; class uses three primes: $p$, $q$, and $r$. The modulus $n$ is the product of these three:&lt;/p&gt;&#xA;&lt;p&gt;$n = p \cdot q \cdot r$&lt;/p&gt;&#xA;&lt;p&gt;The state of the RNG updates as follows:&lt;/p&gt;&#xA;&lt;p&gt;$s_{i} = (s_{i-1} \cdot p + q) \pmod{r}$&lt;/p&gt;</description>
    </item>
    <item>
      <title>Protein_Cookies</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/protein_cookies/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/protein_cookies/</guid>
      <description>&lt;p&gt;This challenge involves exploiting a &lt;strong&gt;Hash Length Extension&lt;/strong&gt; vulnerability in a Flask web application to elevate privileges from a guest user to an authenticated member.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;vulnerability-analysis&#34;&gt;&#xA;  &lt;a href=&#34;#vulnerability-analysis&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Vulnerability Analysis&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;h3 id=&#34;prefix-mac-construction&#34;&gt;&#xA;  &lt;a href=&#34;#prefix-mac-construction&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Prefix-MAC Construction&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The application&amp;rsquo;s core vulnerability lies in how it generates and validates session signatures in &lt;code&gt;models.py&lt;/code&gt;. The signature is created by prepending a 16-byte secret to the payload and hashing it with SHA-512:&lt;/p&gt;&#xA;&lt;p&gt;Python&lt;/p&gt;&#xA;&lt;div class=&#34;mb-codeblock&#34; id=&#34;cb-5feceb66&#34; data-lang=&#34;text&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;mb-codeblock-header&#34;&gt;&#xA;    &lt;div class=&#34;mb-codeblock-left&#34;&gt;&#xA;      &lt;span class=&#34;mb-codeblock-badge&#34;&gt;&#xA;        TEXT&#xA;      &lt;/span&gt;&lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;mb-codeblock-actions&#34;&gt;&lt;button class=&#34;mb-action-btn mb-collapse-btn&#34; data-collapsed=&#34;false&#34; aria-label=&#34;Collapse code&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Collapse&lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button class=&#34;mb-action-btn mb-copy-btn&#34; aria-label=&#34;Copy code&#34;&gt;&#xA;        &lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&#xA;        &lt;span&gt;Copy&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div &#xA;    class=&#34;mb-codeblock-content&#34; &#xA;    data-state=&#34;expanded&#34;&#xA;  &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# models.py&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;hashlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sha512&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;secret&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;payload&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hexdigest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;mb-collapse-overlay&#34;&gt;&#xA;        &lt;button class=&#34;mb-expand-trigger&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-chevron-down&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Click to expand&lt;/span&gt;&#xA;        &lt;/button&gt;&#xA;      &lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  &#39;use strict&#39;;&#xA;  &#xA;  const codeblock = document.getElementById(&#39;cb-5feceb66&#39;);&#xA;  if (!codeblock) return;&#xA;&#xA;  const copyBtn = codeblock.querySelector(&#39;.mb-copy-btn&#39;);&#xA;  const collapseBtn = codeblock.querySelector(&#39;.mb-collapse-btn&#39;);&#xA;  const content = codeblock.querySelector(&#39;.mb-codeblock-content&#39;);&#xA;  const overlay = codeblock.querySelector(&#39;.mb-collapse-overlay&#39;);&#xA;  const expandTrigger = overlay?.querySelector(&#39;.mb-expand-trigger&#39;);&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (copyBtn) {&#xA;    copyBtn.addEventListener(&#39;click&#39;, async function() {&#xA;      let codeText = &#39;&#39;;&#xA;&#xA;      &#xA;      const codeCell = codeblock.querySelector(&#39;.lntd:last-child code&#39;);&#xA;      if (codeCell) {&#xA;        codeText = codeCell.textContent || codeCell.innerText || &#39;&#39;;&#xA;      } else {&#xA;        &#xA;        const codeEl = codeblock.querySelector(&#39;pre code&#39;);&#xA;        codeText = codeEl ? (codeEl.textContent || codeEl.innerText || &#39;&#39;) : &#39;&#39;;&#xA;      }&#xA;&#xA;      try {&#xA;        await navigator.clipboard.writeText(codeText.trim());&#xA;        &#xA;        &#xA;        const originalHTML = copyBtn.innerHTML;&#xA;        copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;        copyBtn.classList.add(&#39;mb-btn-success&#39;);&#xA;        &#xA;        setTimeout(() =&gt; {&#xA;          copyBtn.innerHTML = originalHTML;&#xA;          copyBtn.classList.remove(&#39;mb-btn-success&#39;);&#xA;        }, 2000);&#xA;      } catch (err) {&#xA;        console.error(&#39;Failed to copy code:&#39;, err);&#xA;        &#xA;        &#xA;        const textArea = document.createElement(&#39;textarea&#39;);&#xA;        textArea.value = codeText.trim();&#xA;        textArea.style.position = &#39;fixed&#39;;&#xA;        textArea.style.opacity = &#39;0&#39;;&#xA;        document.body.appendChild(textArea);&#xA;        textArea.select();&#xA;        &#xA;        try {&#xA;          document.execCommand(&#39;copy&#39;);&#xA;          copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;          setTimeout(() =&gt; {&#xA;            copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&lt;span&gt;Copy&lt;/span&gt;&#39;;&#xA;          }, 2000);&#xA;        } catch (fallbackErr) {&#xA;          console.error(&#39;Fallback copy failed:&#39;, fallbackErr);&#xA;        }&#xA;        &#xA;        document.body.removeChild(textArea);&#xA;      }&#xA;    });&#xA;  }&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (collapseBtn &amp;&amp; content &amp;&amp; overlay) {&#xA;    const collapsedHeight =  200 ;&#xA;    &#xA;    function toggleCollapse() {&#xA;      const isCollapsed = content.dataset.state === &#39;collapsed&#39;;&#xA;      &#xA;      if (isCollapsed) {&#xA;        &#xA;        content.style.maxHeight = &#39;&#39;;&#xA;        content.style.overflow = &#39;&#39;;&#xA;        content.dataset.state = &#39;expanded&#39;;&#xA;        overlay.style.display = &#39;none&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Collapse&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;false&#39;;&#xA;      } else {&#xA;        &#xA;        content.style.maxHeight = collapsedHeight + &#39;px&#39;;&#xA;        content.style.overflow = &#39;hidden&#39;;&#xA;        content.dataset.state = &#39;collapsed&#39;;&#xA;        overlay.style.display = &#39;flex&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;      }&#xA;    }&#xA;&#xA;    &#xA;    if (&#39;expanded&#39; === &#39;collapsed&#39;) {&#xA;      content.dataset.state = &#39;collapsed&#39;;&#xA;      overlay.style.display = &#39;flex&#39;;&#xA;      collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;      collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;    }&#xA;&#xA;    collapseBtn.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    &#xA;    if (expandTrigger) {&#xA;      expandTrigger.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    }&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;style&gt;&#xA; &#xA;&#xA;.mb-codeblock-filename {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  color: var(--color-text);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 500;&#xA;  padding: 0.2rem 0.6rem;&#xA;  border-radius: 0.35rem;&#xA;  background: color-mix(in srgb, var(--color-bg) 40%, transparent);&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 60%, transparent);&#xA;}&#xA;&#xA;.mb-action-btn {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  background: transparent;&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent);&#xA;  color: var(--color-text-muted);&#xA;  cursor: pointer;&#xA;  font-size: 0.7rem;&#xA;  padding: 0.35rem 0.65rem;&#xA;  border-radius: 0.4rem;&#xA;  transition: all 0.15s ease-out;&#xA;  font-family: inherit;&#xA;}&#xA;&#xA;.mb-action-btn:hover {&#xA;  color: var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 12%, transparent);&#xA;  border-color: var(--color-accent);&#xA;  transform: translateY(-1px);&#xA;}&#xA;&#xA;.mb-action-btn:active {&#xA;  transform: translateY(0);&#xA;}&#xA;&#xA;.mb-action-btn i {&#xA;  font-size: 0.7rem;&#xA;}&#xA;&#xA;.mb-btn-success {&#xA;  color: #22c55e !important;&#xA;  border-color: #22c55e !important;&#xA;  background: color-mix(in srgb, #22c55e 12%, transparent) !important;&#xA;}&#xA;&#xA;.mb-collapse-overlay {&#xA;  display: none;&#xA;  position: absolute;&#xA;  inset: 0;&#xA;  background: linear-gradient(&#xA;    to bottom,&#xA;    transparent 0%,&#xA;    rgba(0, 0, 0, 0.3) 40%,&#xA;    rgba(0, 0, 0, 0.85) 100%&#xA;  );&#xA;  align-items: flex-end;&#xA;  justify-content: center;&#xA;  padding-bottom: 1rem;&#xA;  cursor: pointer;&#xA;  z-index: 10;&#xA;}&#xA;&#xA;.mb-expand-trigger {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.4rem;&#xA;  padding: 0.4rem 0.8rem;&#xA;  border-radius: 0.5rem;&#xA;  border: 1px solid var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 20%, transparent);&#xA;  color: var(--color-accent);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  cursor: pointer;&#xA;  transition: all 0.15s ease-out;&#xA;  backdrop-filter: blur(8px);&#xA;}&#xA;&#xA;.mb-expand-trigger:hover {&#xA;  background: color-mix(in srgb, var(--color-accent) 30%, transparent);&#xA;  transform: translateY(-2px);&#xA;  box-shadow: 0 4px 12px rgba(168, 85, 247, 0.3);&#xA;}&#xA;&#xA;.mb-expand-trigger i {&#xA;  font-size: 0.7rem;&#xA;  animation: bounce 1.5s infinite;&#xA;}&#xA;&#xA;@keyframes bounce {&#xA;  0%, 100% {&#xA;    transform: translateY(0);&#xA;  }&#xA;  50% {&#xA;    transform: translateY(3px);&#xA;  }&#xA;}&#xA;&#xA; &#xA;.mb-codeblock[data-lang=&#34;javascript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;js&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #f7df1e 25%, transparent);&#xA;  color: #f7df1e;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;typescript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;ts&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3178c6 25%, transparent);&#xA;  color: #3178c6;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;python&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;py&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3776ab 25%, transparent);&#xA;  color: #3776ab;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;go&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #00add8 25%, transparent);&#xA;  color: #00add8;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;rust&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;rs&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #ce422b 25%, transparent);&#xA;  color: #ce422b;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;html&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #e34c26 25%, transparent);&#xA;  color: #e34c26;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;css&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #264de4 25%, transparent);&#xA;  color: #264de4;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;bash&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;sh&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;shell&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #4eaa25 25%, transparent);&#xA;  color: #4eaa25;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;json&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #000000 25%, transparent);&#xA;  color: #dddddd;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;yaml&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;yml&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #cb171e 25%, transparent);&#xA;  color: #cb171e;&#xA;}&#xA;&lt;/style&gt;&lt;p&gt;Because SHA-512 uses the Merkle-Damgård construction, an attacker who knows the length of the secret and the original message can calculate the hash of a new message that begins with the original message and its padding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quantum_Safe</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/quantum_safe/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/quantum_safe/</guid>
      <description>&lt;p&gt;The challenge provides a SageMath script used to encrypt a flag and an output file containing the resulting ciphertext vectors. The encryption process uses a linear transformation involving a &lt;strong&gt;3x3 public key matrix&lt;/strong&gt;, a &lt;strong&gt;random noise vector&lt;/strong&gt;, and a &lt;strong&gt;constant shift vector&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;encryption-method&#34;&gt;&#xA;  &lt;a href=&#34;#encryption-method&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Encryption Method&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;Based on the &lt;code&gt;source.sage&lt;/code&gt; file, each character $c$ of the flag is processed as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A vector is created using the character&amp;rsquo;s ASCII value and two random integers: $v = [ord(c), \text{rand}_1, \text{rand}_2]$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rhome</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/rhome/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/rhome/</guid>
      <description>&lt;p&gt;This challenge implements a Diffie-Hellman (DH) key exchange but introduces a critical mathematical vulnerability: the generator $g$ operates within a very small subgroup of the prime field.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;analysis-of-the-source-serverpy&#34;&gt;&#xA;  &lt;a href=&#34;#analysis-of-the-source-serverpy&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Analysis of the Source (&lt;code&gt;server.py&lt;/code&gt;)&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The security of Diffie-Hellman relies on the &lt;strong&gt;Discrete Logarithm Problem (DLP)&lt;/strong&gt; being hard. However, the server constructs its parameters $p$ and $g$ in a specific way:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Prime Construction&lt;/strong&gt;: $p = 2qr + 1$, where $q$ is a 42-bit prime and $r$ is a 512-bit prime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RSAisEasy</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/rsaiseasy/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/rsaiseasy/</guid>
      <description>&lt;p&gt;This challenge presents an RSA-based cryptography problem where two separate flags are encrypted using moduli that share a common prime factor $q$.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;challenge-overview&#34;&gt;&#xA;  &lt;a href=&#34;#challenge-overview&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Challenge Overview&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The script &lt;code&gt;RSAisEasy.py&lt;/code&gt; performs the following operations:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Generates three 512-bit primes: $p$, $q$, and $z$.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Creates two RSA moduli: $n_1 = p \times q$ and $n_2 = q \times z$.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Encrypts &lt;code&gt;flag1&lt;/code&gt; using $n_1$ and &lt;code&gt;flag2&lt;/code&gt; using $n_2$ with the standard public exponent $e = 65537$.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The_Last_Dance</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/the_last_dance/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/the_last_dance/</guid>
      <description>&lt;p&gt;This challenge demonstrates a critical cryptographic flaw: &lt;strong&gt;Nonce Reuse&lt;/strong&gt; in a stream cipher. When the same key and nonce are used to encrypt two different messages, the security of the cipher is compromised.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;analysis&#34;&gt;&#xA;  &lt;a href=&#34;#analysis&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Analysis&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The provided &lt;code&gt;source.py&lt;/code&gt; script reveals how the encryption is handled:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Cipher:&lt;/strong&gt; ChaCha20 (a stream cipher).&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;The Flaw:&lt;/strong&gt; Both the &lt;code&gt;message&lt;/code&gt; and the &lt;code&gt;FLAG&lt;/code&gt; are encrypted using the &lt;strong&gt;same&lt;/strong&gt; &lt;code&gt;key&lt;/code&gt; and the &lt;strong&gt;same&lt;/strong&gt; &lt;code&gt;iv&lt;/code&gt; (nonce).&lt;/p&gt;</description>
    </item>
    <item>
      <title>xorxorxor</title>
      <link>https://t4qi.rocks/writeups/hackthebox/crypto/xorxorxor/</link>
      <pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/hackthebox/crypto/xorxorxor/</guid>
      <description>&lt;p&gt;This challenge involves a hex-encoded ciphertext encrypted using a repeating 4-byte XOR key. In XOR cryptography, if you know a portion of the original message (plaintext), you can easily recover the key and decrypt the rest of the file.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;analysis&#34;&gt;&#xA;  &lt;a href=&#34;#analysis&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Analysis&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;p&gt;The provided encryption script reveals three critical pieces of information:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Key Length:&lt;/strong&gt; &lt;code&gt;os.urandom(4)&lt;/code&gt; tells us the key is exactly 4 bytes long.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;Algorithm:&lt;/strong&gt; It uses a repeating XOR: &lt;code&gt;data[i] ^ key[i % 4]&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Aswan CTF RSA Signature Challenges</title>
      <link>https://t4qi.rocks/writeups/ctf/aswan_ctf/rsa_signature/</link>
      <pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/ctf/aswan_ctf/rsa_signature/</guid>
      <description>&lt;h2 id=&#34;description-can-u-break-my-rsa-signature-system-&#34;&gt;&#xA;  &lt;a href=&#34;#description-can-u-break-my-rsa-signature-system-&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Description: &amp;ldquo;can u break my RSA Signature system &amp;hellip;&amp;rdquo;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;السلام عليكم ورحمة الله وبركاته&lt;/p&gt;&#xA;&lt;h3 id=&#34;today-i-am-going-to-show-how-i-solved-the-rsa-signature-challenge-with-a-creative-approach-which-i-think-no-one-thought-of&#34;&gt;&#xA;  &lt;a href=&#34;#today-i-am-going-to-show-how-i-solved-the-rsa-signature-challenge-with-a-creative-approach-which-i-think-no-one-thought-of&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    Today, I am going to show how I solved the RSA Signature challenge with a creative approach which I think no one thought of.&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mb-codeblock&#34; id=&#34;cb-5feceb66&#34; data-lang=&#34;python&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;mb-codeblock-header&#34;&gt;&#xA;    &lt;div class=&#34;mb-codeblock-left&#34;&gt;&#xA;      &lt;span class=&#34;mb-codeblock-badge&#34;&gt;&#xA;        PYTHON&#xA;      &lt;/span&gt;&lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;mb-codeblock-actions&#34;&gt;&lt;button class=&#34;mb-action-btn mb-collapse-btn&#34; data-collapsed=&#34;false&#34; aria-label=&#34;Collapse code&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Collapse&lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button class=&#34;mb-action-btn mb-copy-btn&#34; aria-label=&#34;Copy code&#34;&gt;&#xA;        &lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&#xA;        &lt;span&gt;Copy&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div &#xA;    class=&#34;mb-codeblock-content&#34; &#xA;    data-state=&#34;expanded&#34;&#xA;  &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;Crypto.Util.number&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;getPrime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;long_to_bytes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLAG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;redacted&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;give_me_the_flag&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPrime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;getPrime&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;512&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;q&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;0x10001&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;phi&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sign&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;signed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;signed&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;long_to_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;banner&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&amp;#39;1.sign&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;2.verify&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;3.exit&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;banner&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;n&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;enter your msg as hex &amp;gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;that will not work here &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sign&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;msg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;here is your signed msg : &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;hex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;input&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;enter your signed msg as hex &amp;gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;you got me this time here is the flag : &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLAG&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&#x9;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wrong msg try harder &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#x9;&#x9;&lt;span class=&#34;n&#34;&gt;exit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;mb-collapse-overlay&#34;&gt;&#xA;        &lt;button class=&#34;mb-expand-trigger&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-chevron-down&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Click to expand&lt;/span&gt;&#xA;        &lt;/button&gt;&#xA;      &lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  &#39;use strict&#39;;&#xA;  &#xA;  const codeblock = document.getElementById(&#39;cb-5feceb66&#39;);&#xA;  if (!codeblock) return;&#xA;&#xA;  const copyBtn = codeblock.querySelector(&#39;.mb-copy-btn&#39;);&#xA;  const collapseBtn = codeblock.querySelector(&#39;.mb-collapse-btn&#39;);&#xA;  const content = codeblock.querySelector(&#39;.mb-codeblock-content&#39;);&#xA;  const overlay = codeblock.querySelector(&#39;.mb-collapse-overlay&#39;);&#xA;  const expandTrigger = overlay?.querySelector(&#39;.mb-expand-trigger&#39;);&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (copyBtn) {&#xA;    copyBtn.addEventListener(&#39;click&#39;, async function() {&#xA;      let codeText = &#39;&#39;;&#xA;&#xA;      &#xA;      const codeCell = codeblock.querySelector(&#39;.lntd:last-child code&#39;);&#xA;      if (codeCell) {&#xA;        codeText = codeCell.textContent || codeCell.innerText || &#39;&#39;;&#xA;      } else {&#xA;        &#xA;        const codeEl = codeblock.querySelector(&#39;pre code&#39;);&#xA;        codeText = codeEl ? (codeEl.textContent || codeEl.innerText || &#39;&#39;) : &#39;&#39;;&#xA;      }&#xA;&#xA;      try {&#xA;        await navigator.clipboard.writeText(codeText.trim());&#xA;        &#xA;        &#xA;        const originalHTML = copyBtn.innerHTML;&#xA;        copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;        copyBtn.classList.add(&#39;mb-btn-success&#39;);&#xA;        &#xA;        setTimeout(() =&gt; {&#xA;          copyBtn.innerHTML = originalHTML;&#xA;          copyBtn.classList.remove(&#39;mb-btn-success&#39;);&#xA;        }, 2000);&#xA;      } catch (err) {&#xA;        console.error(&#39;Failed to copy code:&#39;, err);&#xA;        &#xA;        &#xA;        const textArea = document.createElement(&#39;textarea&#39;);&#xA;        textArea.value = codeText.trim();&#xA;        textArea.style.position = &#39;fixed&#39;;&#xA;        textArea.style.opacity = &#39;0&#39;;&#xA;        document.body.appendChild(textArea);&#xA;        textArea.select();&#xA;        &#xA;        try {&#xA;          document.execCommand(&#39;copy&#39;);&#xA;          copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;          setTimeout(() =&gt; {&#xA;            copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&lt;span&gt;Copy&lt;/span&gt;&#39;;&#xA;          }, 2000);&#xA;        } catch (fallbackErr) {&#xA;          console.error(&#39;Fallback copy failed:&#39;, fallbackErr);&#xA;        }&#xA;        &#xA;        document.body.removeChild(textArea);&#xA;      }&#xA;    });&#xA;  }&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (collapseBtn &amp;&amp; content &amp;&amp; overlay) {&#xA;    const collapsedHeight =  200 ;&#xA;    &#xA;    function toggleCollapse() {&#xA;      const isCollapsed = content.dataset.state === &#39;collapsed&#39;;&#xA;      &#xA;      if (isCollapsed) {&#xA;        &#xA;        content.style.maxHeight = &#39;&#39;;&#xA;        content.style.overflow = &#39;&#39;;&#xA;        content.dataset.state = &#39;expanded&#39;;&#xA;        overlay.style.display = &#39;none&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Collapse&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;false&#39;;&#xA;      } else {&#xA;        &#xA;        content.style.maxHeight = collapsedHeight + &#39;px&#39;;&#xA;        content.style.overflow = &#39;hidden&#39;;&#xA;        content.dataset.state = &#39;collapsed&#39;;&#xA;        overlay.style.display = &#39;flex&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;      }&#xA;    }&#xA;&#xA;    &#xA;    if (&#39;expanded&#39; === &#39;collapsed&#39;) {&#xA;      content.dataset.state = &#39;collapsed&#39;;&#xA;      overlay.style.display = &#39;flex&#39;;&#xA;      collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;      collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;    }&#xA;&#xA;    collapseBtn.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    &#xA;    if (expandTrigger) {&#xA;      expandTrigger.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    }&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;style&gt;&#xA; &#xA;&#xA;.mb-codeblock-filename {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  color: var(--color-text);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 500;&#xA;  padding: 0.2rem 0.6rem;&#xA;  border-radius: 0.35rem;&#xA;  background: color-mix(in srgb, var(--color-bg) 40%, transparent);&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 60%, transparent);&#xA;}&#xA;&#xA;.mb-action-btn {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  background: transparent;&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent);&#xA;  color: var(--color-text-muted);&#xA;  cursor: pointer;&#xA;  font-size: 0.7rem;&#xA;  padding: 0.35rem 0.65rem;&#xA;  border-radius: 0.4rem;&#xA;  transition: all 0.15s ease-out;&#xA;  font-family: inherit;&#xA;}&#xA;&#xA;.mb-action-btn:hover {&#xA;  color: var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 12%, transparent);&#xA;  border-color: var(--color-accent);&#xA;  transform: translateY(-1px);&#xA;}&#xA;&#xA;.mb-action-btn:active {&#xA;  transform: translateY(0);&#xA;}&#xA;&#xA;.mb-action-btn i {&#xA;  font-size: 0.7rem;&#xA;}&#xA;&#xA;.mb-btn-success {&#xA;  color: #22c55e !important;&#xA;  border-color: #22c55e !important;&#xA;  background: color-mix(in srgb, #22c55e 12%, transparent) !important;&#xA;}&#xA;&#xA;.mb-collapse-overlay {&#xA;  display: none;&#xA;  position: absolute;&#xA;  inset: 0;&#xA;  background: linear-gradient(&#xA;    to bottom,&#xA;    transparent 0%,&#xA;    rgba(0, 0, 0, 0.3) 40%,&#xA;    rgba(0, 0, 0, 0.85) 100%&#xA;  );&#xA;  align-items: flex-end;&#xA;  justify-content: center;&#xA;  padding-bottom: 1rem;&#xA;  cursor: pointer;&#xA;  z-index: 10;&#xA;}&#xA;&#xA;.mb-expand-trigger {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.4rem;&#xA;  padding: 0.4rem 0.8rem;&#xA;  border-radius: 0.5rem;&#xA;  border: 1px solid var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 20%, transparent);&#xA;  color: var(--color-accent);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  cursor: pointer;&#xA;  transition: all 0.15s ease-out;&#xA;  backdrop-filter: blur(8px);&#xA;}&#xA;&#xA;.mb-expand-trigger:hover {&#xA;  background: color-mix(in srgb, var(--color-accent) 30%, transparent);&#xA;  transform: translateY(-2px);&#xA;  box-shadow: 0 4px 12px rgba(168, 85, 247, 0.3);&#xA;}&#xA;&#xA;.mb-expand-trigger i {&#xA;  font-size: 0.7rem;&#xA;  animation: bounce 1.5s infinite;&#xA;}&#xA;&#xA;@keyframes bounce {&#xA;  0%, 100% {&#xA;    transform: translateY(0);&#xA;  }&#xA;  50% {&#xA;    transform: translateY(3px);&#xA;  }&#xA;}&#xA;&#xA; &#xA;.mb-codeblock[data-lang=&#34;javascript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;js&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #f7df1e 25%, transparent);&#xA;  color: #f7df1e;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;typescript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;ts&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3178c6 25%, transparent);&#xA;  color: #3178c6;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;python&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;py&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3776ab 25%, transparent);&#xA;  color: #3776ab;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;go&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #00add8 25%, transparent);&#xA;  color: #00add8;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;rust&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;rs&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #ce422b 25%, transparent);&#xA;  color: #ce422b;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;html&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #e34c26 25%, transparent);&#xA;  color: #e34c26;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;css&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #264de4 25%, transparent);&#xA;  color: #264de4;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;bash&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;sh&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;shell&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #4eaa25 25%, transparent);&#xA;  color: #4eaa25;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;json&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #000000 25%, transparent);&#xA;  color: #dddddd;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;yaml&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;yml&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #cb171e 25%, transparent);&#xA;  color: #cb171e;&#xA;}&#xA;&lt;/style&gt;&lt;h3 id=&#34;this-is-code-for-the-challenge-we-see-here-that-we-need-to-sign-give_me_the_flag-and-then-verify-it-to-get-the-flag-but-the-code-will-not-accept-submitting-give_me_the_flag-directly-so-how-will-we-do-it-&#34;&gt;&#xA;  &lt;a href=&#34;#this-is-code-for-the-challenge-we-see-here-that-we-need-to-sign-give_me_the_flag-and-then-verify-it-to-get-the-flag-but-the-code-will-not-accept-submitting-give_me_the_flag-directly-so-how-will-we-do-it-&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    This is code for the challenge we see here that we need to sign &amp;lsquo;give_me_the_flag&amp;rsquo; and then verify it to get the flag but the code will not accept submitting &amp;lsquo;give_me_the_flag&amp;rsquo; directly so how will we do it ??&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;h3 id=&#34;the-approach-that-i-took-is-to-transform-the--give_me_the_flag--into-integer-then-factor-it-by-factor-db-then-sign-the-two-factors-then-sign-each-one-then-multiply-the-two-signed-factors-then-verify-them-to-get-the-flag-lets-try-this&#34;&gt;&#xA;  &lt;a href=&#34;#the-approach-that-i-took-is-to-transform-the--give_me_the_flag--into-integer-then-factor-it-by-factor-db-then-sign-the-two-factors-then-sign-each-one-then-multiply-the-two-signed-factors-then-verify-them-to-get-the-flag-lets-try-this&#34; class=&#34;md-heading-anchor&#34;&gt;&#xA;    The approach that I took is to transform the  &amp;lsquo;give_me_the_flag&amp;rsquo;  into integer then factor it by factor db then sign the two factors then sign each one then multiply the two signed factors then verify them to get the flag let&amp;rsquo;s try this.&#xA;  &lt;/a&gt;&#xA;&lt;/h3&gt;&#xA;&lt;div class=&#34;mb-codeblock&#34; id=&#34;cb-6b86b273&#34; data-lang=&#34;python&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;mb-codeblock-header&#34;&gt;&#xA;    &lt;div class=&#34;mb-codeblock-left&#34;&gt;&#xA;      &lt;span class=&#34;mb-codeblock-badge&#34;&gt;&#xA;        PYTHON&#xA;      &lt;/span&gt;&lt;/div&gt;&#xA;&#xA;    &lt;div class=&#34;mb-codeblock-actions&#34;&gt;&lt;button class=&#34;mb-action-btn mb-collapse-btn&#34; data-collapsed=&#34;false&#34; aria-label=&#34;Collapse code&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Collapse&lt;/span&gt;&#xA;        &lt;/button&gt;&lt;button class=&#34;mb-action-btn mb-copy-btn&#34; aria-label=&#34;Copy code&#34;&gt;&#xA;        &lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&#xA;        &lt;span&gt;Copy&lt;/span&gt;&#xA;      &lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &#xA;  &lt;div &#xA;    class=&#34;mb-codeblock-content&#34; &#xA;    data-state=&#34;expanded&#34;&#xA;  &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;messege&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;sa&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;give_me_the_flag&amp;#39;&lt;/span&gt;                                &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;from_bytes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;messege&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;mb-collapse-overlay&#34;&gt;&#xA;        &lt;button class=&#34;mb-expand-trigger&#34;&gt;&#xA;          &lt;i class=&#34;fas fa-chevron-down&#34;&gt;&lt;/i&gt;&#xA;          &lt;span&gt;Click to expand&lt;/span&gt;&#xA;        &lt;/button&gt;&#xA;      &lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;(function() {&#xA;  &#39;use strict&#39;;&#xA;  &#xA;  const codeblock = document.getElementById(&#39;cb-6b86b273&#39;);&#xA;  if (!codeblock) return;&#xA;&#xA;  const copyBtn = codeblock.querySelector(&#39;.mb-copy-btn&#39;);&#xA;  const collapseBtn = codeblock.querySelector(&#39;.mb-collapse-btn&#39;);&#xA;  const content = codeblock.querySelector(&#39;.mb-codeblock-content&#39;);&#xA;  const overlay = codeblock.querySelector(&#39;.mb-collapse-overlay&#39;);&#xA;  const expandTrigger = overlay?.querySelector(&#39;.mb-expand-trigger&#39;);&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (copyBtn) {&#xA;    copyBtn.addEventListener(&#39;click&#39;, async function() {&#xA;      let codeText = &#39;&#39;;&#xA;&#xA;      &#xA;      const codeCell = codeblock.querySelector(&#39;.lntd:last-child code&#39;);&#xA;      if (codeCell) {&#xA;        codeText = codeCell.textContent || codeCell.innerText || &#39;&#39;;&#xA;      } else {&#xA;        &#xA;        const codeEl = codeblock.querySelector(&#39;pre code&#39;);&#xA;        codeText = codeEl ? (codeEl.textContent || codeEl.innerText || &#39;&#39;) : &#39;&#39;;&#xA;      }&#xA;&#xA;      try {&#xA;        await navigator.clipboard.writeText(codeText.trim());&#xA;        &#xA;        &#xA;        const originalHTML = copyBtn.innerHTML;&#xA;        copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;        copyBtn.classList.add(&#39;mb-btn-success&#39;);&#xA;        &#xA;        setTimeout(() =&gt; {&#xA;          copyBtn.innerHTML = originalHTML;&#xA;          copyBtn.classList.remove(&#39;mb-btn-success&#39;);&#xA;        }, 2000);&#xA;      } catch (err) {&#xA;        console.error(&#39;Failed to copy code:&#39;, err);&#xA;        &#xA;        &#xA;        const textArea = document.createElement(&#39;textarea&#39;);&#xA;        textArea.value = codeText.trim();&#xA;        textArea.style.position = &#39;fixed&#39;;&#xA;        textArea.style.opacity = &#39;0&#39;;&#xA;        document.body.appendChild(textArea);&#xA;        textArea.select();&#xA;        &#xA;        try {&#xA;          document.execCommand(&#39;copy&#39;);&#xA;          copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-check&#34;&gt;&lt;/i&gt;&lt;span&gt;Copied!&lt;/span&gt;&#39;;&#xA;          setTimeout(() =&gt; {&#xA;            copyBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-copy&#34;&gt;&lt;/i&gt;&lt;span&gt;Copy&lt;/span&gt;&#39;;&#xA;          }, 2000);&#xA;        } catch (fallbackErr) {&#xA;          console.error(&#39;Fallback copy failed:&#39;, fallbackErr);&#xA;        }&#xA;        &#xA;        document.body.removeChild(textArea);&#xA;      }&#xA;    });&#xA;  }&#xA;&#xA;  &#xA;  &#xA;  &#xA;  if (collapseBtn &amp;&amp; content &amp;&amp; overlay) {&#xA;    const collapsedHeight =  200 ;&#xA;    &#xA;    function toggleCollapse() {&#xA;      const isCollapsed = content.dataset.state === &#39;collapsed&#39;;&#xA;      &#xA;      if (isCollapsed) {&#xA;        &#xA;        content.style.maxHeight = &#39;&#39;;&#xA;        content.style.overflow = &#39;&#39;;&#xA;        content.dataset.state = &#39;expanded&#39;;&#xA;        overlay.style.display = &#39;none&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-compress-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Collapse&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;false&#39;;&#xA;      } else {&#xA;        &#xA;        content.style.maxHeight = collapsedHeight + &#39;px&#39;;&#xA;        content.style.overflow = &#39;hidden&#39;;&#xA;        content.dataset.state = &#39;collapsed&#39;;&#xA;        overlay.style.display = &#39;flex&#39;;&#xA;        collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;        collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;      }&#xA;    }&#xA;&#xA;    &#xA;    if (&#39;expanded&#39; === &#39;collapsed&#39;) {&#xA;      content.dataset.state = &#39;collapsed&#39;;&#xA;      overlay.style.display = &#39;flex&#39;;&#xA;      collapseBtn.innerHTML = &#39;&lt;i class=&#34;fas fa-expand-alt&#34;&gt;&lt;/i&gt;&lt;span&gt;Expand&lt;/span&gt;&#39;;&#xA;      collapseBtn.dataset.collapsed = &#39;true&#39;;&#xA;    }&#xA;&#xA;    collapseBtn.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    &#xA;    if (expandTrigger) {&#xA;      expandTrigger.addEventListener(&#39;click&#39;, toggleCollapse);&#xA;    }&#xA;  }&#xA;})();&#xA;&lt;/script&gt;&#xA;&#xA;&lt;style&gt;&#xA; &#xA;&#xA;.mb-codeblock-filename {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  color: var(--color-text);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 500;&#xA;  padding: 0.2rem 0.6rem;&#xA;  border-radius: 0.35rem;&#xA;  background: color-mix(in srgb, var(--color-bg) 40%, transparent);&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 60%, transparent);&#xA;}&#xA;&#xA;.mb-action-btn {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.35rem;&#xA;  background: transparent;&#xA;  border: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent);&#xA;  color: var(--color-text-muted);&#xA;  cursor: pointer;&#xA;  font-size: 0.7rem;&#xA;  padding: 0.35rem 0.65rem;&#xA;  border-radius: 0.4rem;&#xA;  transition: all 0.15s ease-out;&#xA;  font-family: inherit;&#xA;}&#xA;&#xA;.mb-action-btn:hover {&#xA;  color: var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 12%, transparent);&#xA;  border-color: var(--color-accent);&#xA;  transform: translateY(-1px);&#xA;}&#xA;&#xA;.mb-action-btn:active {&#xA;  transform: translateY(0);&#xA;}&#xA;&#xA;.mb-action-btn i {&#xA;  font-size: 0.7rem;&#xA;}&#xA;&#xA;.mb-btn-success {&#xA;  color: #22c55e !important;&#xA;  border-color: #22c55e !important;&#xA;  background: color-mix(in srgb, #22c55e 12%, transparent) !important;&#xA;}&#xA;&#xA;.mb-collapse-overlay {&#xA;  display: none;&#xA;  position: absolute;&#xA;  inset: 0;&#xA;  background: linear-gradient(&#xA;    to bottom,&#xA;    transparent 0%,&#xA;    rgba(0, 0, 0, 0.3) 40%,&#xA;    rgba(0, 0, 0, 0.85) 100%&#xA;  );&#xA;  align-items: flex-end;&#xA;  justify-content: center;&#xA;  padding-bottom: 1rem;&#xA;  cursor: pointer;&#xA;  z-index: 10;&#xA;}&#xA;&#xA;.mb-expand-trigger {&#xA;  display: inline-flex;&#xA;  align-items: center;&#xA;  gap: 0.4rem;&#xA;  padding: 0.4rem 0.8rem;&#xA;  border-radius: 0.5rem;&#xA;  border: 1px solid var(--color-accent);&#xA;  background: color-mix(in srgb, var(--color-accent) 20%, transparent);&#xA;  color: var(--color-accent);&#xA;  font-size: 0.75rem;&#xA;  font-weight: 600;&#xA;  cursor: pointer;&#xA;  transition: all 0.15s ease-out;&#xA;  backdrop-filter: blur(8px);&#xA;}&#xA;&#xA;.mb-expand-trigger:hover {&#xA;  background: color-mix(in srgb, var(--color-accent) 30%, transparent);&#xA;  transform: translateY(-2px);&#xA;  box-shadow: 0 4px 12px rgba(168, 85, 247, 0.3);&#xA;}&#xA;&#xA;.mb-expand-trigger i {&#xA;  font-size: 0.7rem;&#xA;  animation: bounce 1.5s infinite;&#xA;}&#xA;&#xA;@keyframes bounce {&#xA;  0%, 100% {&#xA;    transform: translateY(0);&#xA;  }&#xA;  50% {&#xA;    transform: translateY(3px);&#xA;  }&#xA;}&#xA;&#xA; &#xA;.mb-codeblock[data-lang=&#34;javascript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;js&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #f7df1e 25%, transparent);&#xA;  color: #f7df1e;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;typescript&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;ts&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3178c6 25%, transparent);&#xA;  color: #3178c6;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;python&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;py&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #3776ab 25%, transparent);&#xA;  color: #3776ab;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;go&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #00add8 25%, transparent);&#xA;  color: #00add8;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;rust&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;rs&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #ce422b 25%, transparent);&#xA;  color: #ce422b;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;html&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #e34c26 25%, transparent);&#xA;  color: #e34c26;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;css&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #264de4 25%, transparent);&#xA;  color: #264de4;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;bash&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;sh&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;shell&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #4eaa25 25%, transparent);&#xA;  color: #4eaa25;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;json&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #000000 25%, transparent);&#xA;  color: #dddddd;&#xA;}&#xA;&#xA;.mb-codeblock[data-lang=&#34;yaml&#34;] .mb-codeblock-badge,&#xA;.mb-codeblock[data-lang=&#34;yml&#34;] .mb-codeblock-badge {&#xA;  background: color-mix(in srgb, #cb171e 25%, transparent);&#xA;  color: #cb171e;&#xA;}&#xA;&lt;/style&gt;&lt;p&gt;then I got an int &lt;code&gt;137458076091903464215105250758897721703&lt;/code&gt;&#xA;let&amp;rsquo;s find it&amp;rsquo;s factors by factor db&lt;/p&gt;</description>
    </item>
    <item>
      <title>Osint challenges in Aswan CTF finals</title>
      <link>https://t4qi.rocks/writeups/ctf/aswan_ctf/osint_challenges/</link>
      <pubDate>Sun, 27 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://t4qi.rocks/writeups/ctf/aswan_ctf/osint_challenges/</guid>
      <description>&lt;p&gt;&lt;figure class=&#34;md-image&#34;&gt;&#xA;  &lt;a href=&#34;leaderboard.png&#34; class=&#34;glightbox&#34;&gt;&#xA;    &lt;img&#xA;      src=&#34;leaderboard.png&#34;&#xA;      alt=&#34;&#34;&#xA;      loading=&#34;lazy&#34;&#xA;    /&gt;&#xA;  &lt;/a&gt;&#xA;  &#xA;&lt;/figure&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;Welcome to our write-up for the Aswan CTF 2025, where our team, &lt;strong&gt;0xD4wn&lt;/strong&gt;, battled it out among fierce competitors to secure a well-earned &lt;strong&gt;second place&lt;/strong&gt;! The competition was a thrilling test of skills, with challenges spanning various domains, but the OSINT (Open-Source Intelligence) category truly put our investigative prowess to the test. In this write-up, we’ll dive into the three gripping OSINT challenges that had us chasing digital breadcrumbs across blockchains and social platforms. From unmasking a notorious crypto whale to tracing their financial trails, here’s how we tackled&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
