HACKCTF - Keygen
2020. 7. 25. 09:27ㆍCTF's Write-up
리버싱 문제인데 nc를 주는 문제네요
일단 실행시켜보면
보면 키를 입력하고 이 키가 올바른키면 flag를 뿌려주는 구조인 것 같습니다.
역시 14번째줄에서 flag를 읽어주는 함수가 있고, 이 부분에 들어갈 수 있도록 하면 되기에 12번째의 분기문을 맞춰주면 될 것 같습니다.
check_key 함수를 들어가보면 이렇게 "OO]oUU2U<sU2UsUsK" 와 비교하는 함수가 있는데 7번에서 인코딩을 해야하니
해당 부분을 더 자세히 보면 좋을 것 같네요.
여기서 그렇게 찾던 암호화 구간이네요.
역연산 해주기 위해 아래와 같이 코드를 작성합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
key = "OO]oUU2U<sU2UsUsK"
v2 = 72
result = ""
for i in range(0, len(key)) :
for j in range(33, 126) :
tmp = ((j + 12) * v2 + 17) % 70 + 48
if(chr(tmp) == key[i]) :
v2 = tmp
result += chr(j)
break
print(len(result), result)
|
cs |
range(33, 128)인 이유는 아래 아스키코드표를 보면
33에서부터 126까지가 우리가 입력할 수 있는 글자이기에 저렇게 설정하였습니다.
실행하면
이렇게 키를 얻을 수 있는데
"A,d<&$+$''.+$&.&&" 를 보면 17글자이면서 마지막에 &&입니다.
fgets는 "\n"까지 입력받으므로 마지막 문자 &를 제외하고 "A,d<&$+$''.+$&.&"를 보내주면
아래와 같이 flag가 획득 가능합니다.
리버싱도 점점 하다보니 익숙해지는 느낌이네요.
더욱 발전할 수 있길..
'CTF's Write-up' 카테고리의 다른 글
HACKCTF - Smooth CipherText (0) | 2020.07.26 |
---|---|
HACKCTF - Magic PNG (0) | 2020.07.25 |
HACKCTF - Reversing Me (0) | 2020.07.24 |
HACKCTF - Baseball Price (0) | 2020.07.24 |
HACKCTF - BOF_PIE (0) | 2020.07.23 |