CTF/ImaginaryCTF 2024
(Reversing) unoriginal
grinidia
2024. 8. 1. 16:34
문제
ELF 란?
리눅스에서 실행 가능(Executable)하고 링크 가능(Linkable)한 File의 Format을 ELF(Executable and Linkable Format) 라고 한다.
고로, 리눅스에서 사용하는 윈도우즈의 exe 파일이라고 생각하면 된다.
풀이
unoriginal 파일을 다운받아 Kali 에 넣어놓은 상태로 진행한다.
필자는 unoriginal 파일을 /Desktop/CTF/unori 파일에 넣어놓은 상태이다.
우선 unoriginal 파일이 어떤 파일인지 실행을 진행한다.
unoriginal 파일을 실행시키면 flag 값을 입력하도록 설정되어 있으며, 실패 시 Incorrect 문구가 출력되는 것을 확인할 수 있다.
strings 를 사용하여 unoriginal 파일에서 읽을 수 있는 모든 문자열을 탐색한다.
실행 시 발생하는 Enter your flag here : 문구를 확인할 수 있다.
이제 내부 코드를 확인하기 위해 cutter 를 사용하여 코드 분석을 시행한다.
문구를 찾아 따라가면 위와 같은 소스코드를 확인할 수 있다.
코드코드에 대한 분석은 아래와 같다.
- Enter your flag here : 문구를 출력시킨다.
- s1변수를 가져온다.
- for 문에서 XOR 연산을 진행한다. for 문을 변환한 것은 아래의 코드블럭에 작성했다.
- strcmp를 통해 변환한 문자열과 lfqc~opvqZdkjqm`wZcidbZfm`fn`wZd6130a0`0``761gdx 가 같을 시, Correct 가 출력된다.
for (int i = 0; i < 0x30; i++)
s1[i] = s1[i] ^ 0x05;
이제 발견한 lfqc~opvqZdkjqm`wZcidbZfm`fn`wZd6130a0`0``761gdx 를 XOR 연산으로 확인해본다.
위의 그림과 같이 flag 값을 얻을 수 있다.