HACKCTF - Keygen

2020. 7. 25. 09:27CTF's Write-up

문제 화면

 

리버싱 문제인데 nc를 주는 문제네요

 

일단 실행시켜보면

 

 

./keygen

 

 

보면 키를 입력하고 이 키가 올바른키면 flag를 뿌려주는 구조인 것 같습니다.

 

 

ida main

 

 

역시 14번째줄에서 flag를 읽어주는 함수가 있고, 이 부분에 들어갈 수 있도록 하면 되기에 12번째의 분기문을 맞춰주면 될 것 같습니다.

 

ida check_key

 

 

check_key 함수를 들어가보면 이렇게 "OO]oUU2U<sU2UsUsK" 와 비교하는 함수가 있는데 7번에서 인코딩을 해야하니

해당 부분을 더 자세히 보면 좋을 것 같네요.

 

ida encoding

 

여기서 그렇게 찾던 암호화 구간이네요.

역연산 해주기 위해 아래와 같이 코드를 작성합니다.

 

 

 

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(0len(key)) :
    for j in range(33126) :
        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가 획득 가능합니다.

 

 

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