워게임/CTFlearn

[CTFlearn] Reykjavik - 리버싱 / IDA

SecurityMan 2023. 2. 9. 11:00

 

CTFlearn 의 예순 여섯번째 문제

 

이번엔 쉬운 난이도의 리버싱 문제이다.

 

문제 설명을 보면 gdb 를 이용해보라고 하는데

 

더 쉬운 IDA 를 이용해 풀것이다.

 

반응형

 

문제 제목인 Reykjavik 는 아이슬란드의 수도라고 한다.

 

문제 출제자가 아이슬란드 사람인가 보다.

 

 

문제에서 주어지는 것은 Reykjavik 바이너리 파일이다.

 

 

한번 실행시켜 봤는데

 

인자로 플래그를 입력받는듯 했다.

 

 

바로 IDA 라는 디스어셈블러를 이용해 바이너리를 열어보았다.

 

main 함수의 수도 코드를 살펴보니

 

v3 변수에 사용자가 입력한 인수를 저장하고

 

아래쪽에 strcmp 함수로 v3 와 CTFlearn{Is_This_A_False_Flag?} 가 같은지 비교하고 있다.

 

같으면 아래쪽 printf 가 실행되는데

 

이건 가짜 플래그라고 한다.

 

그냥 분석하는 사람 헷갈리게 하려고 만든 함정이다.

 

 

아래쪽에 진짜 플래그가 숨어있다.

 

data, qword_4020, qword_4018, byte_4028, byte_4029, byte_402A 에 들어있는 값들을

 

0xABABABABABABABAB 또는 0xAB 와 XOR 한 뒤 그 값을 v3 와 비교하고 있다.

 

두 값이 같으면 Congratulations 라는 문구가 출력된다.

 

 

data ~ byte_402A 에는 이런 값들이 들어가 있다.

 

저 값들을 하나씩 XOR 해주면 된다.

 

 

CyberChef(https://gchq.github.io/CyberChef) 에서 data에 들어있는 값 부터 계산해줬다.

 

From Hex, XOR 순으로 레시피를 구성해서 계산해주면 된다.

 

결과값을 보면 CTFlearn 이 거꾸로 써있는걸 볼 수 있다.

 

 

똑바로 보고싶다면

 

중간에 Reverse (Byte) 를 추가해주면 된다.

 

 

나머지 변수들도 같은 과정을 반복하면

 

전체 플래그를 획득할 수 있다.

반응형