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 가 실행되면서 올바른 플래그가 출력되었다.
'워게임 > CTFlearn' 카테고리의 다른 글
[CTFlearn] The Keymaker - 포렌식 / JPEG / HxD (70) | 2023.07.10 |
---|---|
[CTFlearn] Bite-code - 리버싱 / Python (65) | 2023.05.10 |
[CTFlearn] Brute Force is Fun! - 포렌식 / HxD / Python (62) | 2023.04.23 |
[CTFlearn] Skynet Is (Almost) Taking Over - 암호학 / RsaCtfTool (74) | 2023.04.20 |
[CTFlearn] Music To My Ears - 포렌식 / faad (62) | 2023.04.15 |