1. 개요
제곱수 검사 문제
2. 분석
그냥 거꾸로 돌리면 되겠지 싶었는데 shuffle로 순서를 바꾸어 놓았습니다.
그럼 어떻게 맞출까 생각하다가 제곱수 여부를 검사해서 넣기로 결정했습니다
from random import shuffle
flag = b"ctf4b{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}"
cipher = []
for i in range(len(flag)):
f = flag[i]
c = (f + i)**2 + i
cipher.append(c)
shuffle(cipher)
print("cipher =", cipher)
3. exploit
# 1. init
cipher = [12147, 20481, 7073, 10408, 26615, 19066, 19363, 10852, 11705, 17445, 3028, 10640, 10623, 13243, 5789, 17436, 12348, 10818, 15891, 2818, 13690, 11671, 6410, 16649, 15905, 22240, 7096, 9801, 6090, 9624, 16660, 18531, 22533, 24381, 14909, 17705, 16389, 21346, 19626, 29977, 23452, 14895, 17452, 17733, 22235, 24687, 15649, 21941, 11472]
n = len(cipher)
res = [0 for _ in range(n)]
# 2. loop
for c in cipher:
# 2중 for 문으로 제곱수 여부를 검사합니다.
for i in range(n):
v = (c - i) ** 0.5
if v == int(v):
r = chr(int(v - i))
res[i] = r
print("".join(res))
# ctf4b{Hey,Fox?YouCanNotTearThatHouseDown,CanYou?}
'CTF' 카테고리의 다른 글
[EZCTF] I made a blog! (0) | 2022.06.05 |
---|---|
[SECCON Beginners CTF 2022] BeginnersBof (0) | 2022.06.05 |
[SECCON Beginners CTF 2022] Quiz (0) | 2022.06.05 |
[SECCON Beginners CTF 2022] Util (0) | 2022.06.05 |
[BSidesSF CTF] Sequels: A New Bug (0) | 2022.06.05 |