WriteUp BroncoCTF 2025 : All My Solve Challenges Cryptography
By WanZKey
WriteUp BroncoCTF 2025 : Challenges Cryptography
By WanZKey
1. Accross the Tracks

Deskripsi Soal
Summary:
Pada tantangan Cryptography kali ini, saya diberikan sebuah attachment yang berisikan sebuah cipher Rail Fence, yang dimana isi ciphertext ini merupakan flag yang telah dienkripsi menggunakan cipher tersebut.
Attachment :
Samddre··ath·dhf@_oesoere·ebun·yhot·no··oso·i·a·lr1rcm·iS·aruf·toibadhn·nadpikudynea{l_oeee·ch·oide·f·n·aoe·sae·aonbdhgo_so·rr.i·tYnl·s·tdot·xs·hdtyy'·.t·cfrlca·epeo·iufiyi.t·yaaf·.a.·ts··tn33}i·tvhr·.tooho···rlmwuI·h·e·iHshonppsoleaseecrtudIdet.·n·BtIpdheiorcihr·or·ovl·c··i·acn·t·su··ootr·:b3cesslyedheIath·e·_
*Langkah-Langkah Penyelesaian:
- identifikasi Jenis Cipher & Key Cipher
- Cari decoder online
- Ganti Key menjadi 10
- Decode Cipher.*
Solution:
1. Idenfikasi Jenis Cipher & Key Cipher
Bisa kita analisa berdasarkan deskripsi pada tantangan ini:

Break Down Isi Deskripsi Soal
Penjelasan:
# Mengetahui Jenis Cipher
Pada kalimat "a deer just ran onto the tracks in a zig-zag pattern" dengan
clue "zig-zag" ini saja kita dapat mengetahui bahwa ini merupakan Cipher "Rail Fence"
karena ini yang menjadi ciri khas pada cipher tersebut.
# Mengetahui Key Cipher
Pada kalimat "After crossing my tenth track tracing the deer" ini merupakan
clue besar mengenai Kunci/Key untuk mendecode cipher tersebut, karena
ada kalimat "Tenth track" jika diartikan ke Bahasa Indonesia artinya adalah
"Laju kesepuluh" bisa kita asumsikan keynya adalah 10.
# Ringkasan
Berdasarkan analisis sebelumnnya bisa diketahui jenis cipher beserta key pada
isi deskripsi tantangan tersebut adalah "Rail Fence Cipher" dan key nya adalah
"10".
2. Decode Cipher
Berikut hasil decode saya mengenai cipher pada tantangan ini, disini saya menggunakan tools decoder online yakni **Cryptii**.

Decode Cipher
Flag: bronco{r@1l_f3nc3_cip3rs_r_cool}
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —-
2. Rahhh-SA

Deskripsi Soal
Summary:
Pada tantangan Cryptogprahy ini mengimplementasikan classic RSA sederhana dengan modular aritmetic, akan tetapi jika kita tidak teliti membaca attachment yang diberikan soal maka kita akan kebingungan kenapa nilai “faktor p = -811" ini maksudnya adalah red herring artinya tetap 811, author soal sengaja mengelabui peserta agar kebingungan mengenai tantangan ini.
Attachment :
e = 65537
n = 3429719
c = [-53102, -3390264, -2864697, -3111409, -2002688, -2864697, -1695722, -1957072, -1821648, -1268305, -3362005, -712024, -1957072, -1821648, -1268305, -732380, -2002688, -967579, -271768, -3390264, -712024, -1821648, -3069724, -732380, -892709, -271768, -732380, -2062187, -271768, -292609, -1599740, -732380, -1268305, -712024, -271768, -1957072, -1821648, -3418677, -732380, -2002688, -1821648, -3069724, -271768, -3390264, -1847282, -2267004, -3362005, -1764589, -293906, -1607693]
p = -811
Langkah-Langkah Menyelesaikan Tantangan Ini: 1. Asumsikan $p = 811$. 2. Hitung $q = n / p = 3429719 / 811 = 4229$. 3. Periksa bahwa $p$ dan $q$ adalah bilangan prima. 4. Hitung totient function: 5. Cari private key $d$ dengan menggunakan modular inverse: 6. Dekripsi ciphertext dengan rumus klasik RSA: 7. Ubah hasil dekripsi ke bentuk karakter ASCII untuk mendapatkan flag.
Solution:
Berikut script untuk menyelesaikan tantangan ini:
Script Solve:
//WanZKey
from Crypto.Util.number import long_to_bytes
from sympy import mod_inverse
e = 65537
n = 3429719
c = [-53102, -3390264, -2864697, -3111409, -2002688, -2864697, -1695722, -1957072, -1821648, -1268305, -3362005, -712024, -1957072, -1821648, -1268305, -732380, -2002688, -967579, -271768, -3390264, -712024, -1821648, -3069724, -732380, -892709, -271768, -732380, -2062187, -271768, -292609, -1599740, -732380, -1268305, -712024, -271768, -1957072, -1821648, -3418677, -732380, -2002688, -1821648, -3069724, -271768, -3390264, -1847282, -2267004, -3362005, -1764589, -293906, -1607693]
p = 811
q = n // p
assert p * q == n
phi = (p - 1) * (q - 1)
d = mod_inverse(e, phi)
flag = ""
for i in c:
if i < 0:
i = n + i
m = pow(i, d, n)
flag += long_to_bytes(m).decode(errors='ignore')
print(f"Flag: {flag}")

Hasil Script Solve
Flag: bronco{m4th3m4t1c5_r34l1y_1s_qu1t3_m4g1c4l_raAhH!}
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —-
3. Mid PRNG (Up Solve)

Deskripsi Soal
Summary:
Pada tantangan Cryptography ini mengimplementasi metode “PRNG(Psudorandom Number Generator) dan Xor Cipher” akan tetapi pada metode PRNG yang digunakan ini sangat lemah, hanya mengandalkan metode LGC (Linear Congruential Generator) sederhana yakni Perkalian dan Modulo saja, sehingga kita hanya memerlukan nilai awal untuk menebak seluruh outputnya.
Attachment:
import bad_prng
import random
flag = ""
output = []
random = bad_prng.generate_seed()
for c in flag:
random = bad_prng.rand_word()
output.append(random ^ ord(c))
print(bytes(output).hex())
Penjelasan Isi File Attachment:
**bad_prng.generate_seed()** menghasilkan seed awal untuk PRNG.- Setiap karakter flag dienkripsi dengan
**bad_prng.rand_word() ^ ord(c)**. - Ciphertext dikonversi jadi hex dan ditampilkan.
Solution:
Berikut skrip untuk menyelesaikan tantangan ini:
Script Solve :
//WanZKey
from pwn import *
r = remote('bad-prng.nc.broncoctf.xyz', 8000)
c = bytes.fromhex(r.recvall().strip().decode())
r.close()
next = c[0] ^ ord("b")
flag = "b"
for el in c[1:]:
next = (next*3)%256
flag += chr(next ^ el)
print(flag)
Hasil :

Hasil Script Solve
Flag: bronco{0k_1ts_n0t_gr34t}
메타데이터
- post_id
- e361efc06f9b
- slug
- writeup-broncoctf-2025-all-my-solve-challenges-cryptography-e361efc06f9b
- url
- https://medium.com/@wanzkey/writeup-broncoctf-2025-all-my-solve-challenges-cryptography-e361efc06f9b
- canonical_url
- https://medium.com/@wanzkey/writeup-broncoctf-2025-all-my-solve-challenges-cryptography-e361efc06f9b
- author_url
- https://medium.com/@wanzkey
- status
- ok
- fetched_at
- 2026-06-28 04:42:08