워게임/CTFlearn

[CTFlearn] Riyadh - 리버싱 / IDA / Pwndbg

SecurityMan 2023. 4. 27. 11:00

 

CTFlearn 의 아흔번째 문제

 

이번엔 10점짜리 Easy 난이도 리버싱 문제인데

 

아무래도 배점이 잘못된것 같다.

 

막 어렵진 않지만 그래도 10점은 아닌듯..

 

반응형

 

 

일단 문제에서 주어지는 것은

 

readme, Riyadh, source.zip.enc 파일이다.

 

나머진 필요없고

 

문제풀때는 Riyadh 파일만 있으면 된다.

 

 

바로 IDA 로 열어서 F5를 눌러

 

main 함수의 수도코드를 살펴보았다.

 

일단 세가지 정도를 검증하고 있다.

 

argc 가 1인지, buffer 와 v4 가 같은지,

 

strlen 이 30 인지 세 가지를 비교하고

 

그거에 따라 각각 Msg2, Msg4, Msg5 가 실행된다.

 

 

Msg 함수는 1 부터 7 까지 있는데

 

 

각각의 Msg 함수들을 보면

 

이렇게 xormask 값과 어떤 값을 XOR 하는것으로 시작해서

 

여러번 XOR 한 값을 리턴하고 있다.

 

 

CyberChef(https://gchq.github.io/CyberChef) 에서

 

첫번째 줄을 한번 계산해봤다.

 

xormask 와 wmsg 를 xor한 값인데

 

Welcome 이 거꾸로 출력되서 나오고 있다.

 

바이너리 파일을 실행하면서 출력하는 각종 문구들을

 

저렇게 복잡한 XOR 연산을 해서 생성하는듯 했다.

 

다 한번씩 계산해봤는데

 

첫번째 줄만 저렇게 알아볼 수 있는 텍스트가 나오고

 

나머지 줄들은 알 수 없는 값들이 나왔다.

 

올바른 텍스트를 보려면 추가작업이 필요한듯 했다.

 

 

하지만 복잡해보이니

 

그냥 GDB 로 실행시키면서 바로 확인해보기로 했다.

 

gdb ./Riyadh 로 실행시키고

 

 

b Msg* 로 모든 Msg 함수에 브레이크 포인트를 걸어주었다.

 

 

그리고 나서 r 명령으로 실행을 시키는데

 

아까 argc 가 1 이고 strlen 이 30 이어야 한다는 것이 생각나서

 

일단 012345678901234567890123456789 로 30 글자를 채워넣어 같이 실행시켜줬다.

 

 

n 을 계속 입력해서 진행하다 보면

 

Msg1 함수가 끝나는 부분에서

 

Welcome to CTFlearn Riyadh Reversing Challenge!

 

라는 문자열을 확인할 수 있다.

 

아까 예상했던대로 XOR 연산을 통해 저런 텍스트를 만들어 출력시키는 것이다.

 

 

조금 더 넘기다 보면 

 

CTFlearn{Reversing_Is_Easy} 라는 문구가 출력된다.

 

처음엔 이게 플래그인줄 알았는데

 

 

검증해보니 false flag 라고 한다..

 

 

뭔가 이상해서

 

다시 한번 r 012345678901234567890123456789 를 넣어 실행시켜 봤더니

 

이번엔 Msg5 가 실행되면서 올바른 플래그가 출력되었다.

반응형