│ Category: Reverse Engineering
│ Author: Imattas aka Zemi
│ Flag: byuctf{uuuuuuu_uuuu_uuu_34845}
│ Source Path: rev/u
────────────────────────────────────────────────────────────────────────────────
--[ Challenge Description ]--
-- text --
u
[u.py]
────────────────────────────────────────────────────────────────────────────────
--[ Provided Materials ]--
- Repository folder https://github.com/BYU-CSA/BYUCTF-2025/tree/main/rev/u
- rev/u/README.md
https://github.com/BYU-CSA/BYUCTF-2025/blob/main/rev/u/README.md
- rev/u/solve.py https://github.com/BYU-CSA/BYUCTF-2025/blob/main/rev/u/solve.py
────────────────────────────────────────────────────────────────────────────────
--[ Recon / Initial Analysis ]--
This page imports the BYUCTF 2025 source material for the Reverse Engineering
challenge u. The prompt is kept separate from the solve notes, and upstream
artifacts are linked so the challenge can be replayed from the original
repository.
────────────────────────────────────────────────────────────────────────────────
--[ Vulnerability / Observation ]--
The useful observation comes from the imported solve notes below. I kept the
original technical path intact while normalizing the page metadata, challenge
grouping, and author attribution for the Volume 2 writeup archive.
────────────────────────────────────────────────────────────────────────────────
--[ Exploitation / Solution ]--
Source: rev/u/README.md
https://github.com/BYU-CSA/BYUCTF-2025/blob/main/rev/u/README.md
Just reverse it, it isn't actually that bad once you start renaming things. Just
checks it against precomputed values
This program checks the flag by first generating a list of values (powers of 3
mod 256) exactly the length of the flag, which is also the length of the list of
stored values. It takes user input, then checks that powerofthreelist[i] *
input[i] == stored[i]
Flag - byuctf{uuuuuuu_uuuu_uuu_34845}
────────────────────────────────────────────────────────────────────────────────
--[ Full Exploit Script ]--
Source: rev/u/solve.py
https://github.com/BYU-CSA/BYUCTF-2025/blob/main/rev/u/solve.py
-- python --
stored,ú,i,ü,ũ,ū,len,ů,ű,range,list,ṷ,ụ=chr,ord,abs,input,all,print,len,input,pow,range,list,dict,set
stored=[12838,1089,16029,13761,1276,14790,2091,17199,2223,2925,17901,3159,18135,18837,3135,19071,4095,19773,4797,4085,20007,5733,20709,17005,2601,9620,3192,9724,3127,8125]
three,_256=3,256
ṷ=input()
res=list(ụ([pow(three,i,_256) for i in(range(_256))]))[three:len(stored)+three]
zip=zip
ṷ=[ú(i) for i in(ṷ)]
assert(len(stored)==len(ṷ))
assert(ũ([i*j==k for i,j,k in(zip(res,ṷ,stored))]))
────────────────────────────────────────────────────────────────────────────────
--[ Key Takeaways ]--
- The BYUCTF 2025 challenge material is preserved with local archive formatting.
- The page author is normalized to Imattas aka Zemi.
- The source repository remains linked for handouts, services, and solve
artifacts.