문제 파일을 다운로드 받아 실행하면 아래와 같은 결과가 출력된다. 문제 설명을 보아하니, chall0.exe 파일을 리버싱하여, input값을 비교하는 부분을 찾아야한다. 비교되는 string 배열이 곧 flag 값이니깐..
파일을 x64Dbg로 실행하여 아래 사진과 같이 string 문자열 찾기 기능을 실행한다.
다음을 찾기 -> 모든 모듈 -> 문자열 참조
모든 String이 출력되는데, 이 때 우리가 찾고자 하는 correct를 입력하고 더블클릭하여 해당 주소로 이동하자.
찾아간 주소에서는 사용자가 입력한 값을 받는 input 부분(00007FF66F67112C)과, 사용자가 입력한 값과프로그램에 사전정의된 값을 비교하는 함수를 호출(00007FF66F67114E)하는 부분, 그리고 사용자의 값과 사전정의된 값이 일치할 때 출력되는 "correct" 값(00007FF66F671157)이 있는 것을 확인할 수 있다. 이를 통해 추측해본 원본 코드는 아마 아래와 같을 것이다.
00007FF66F67114E()
if 사용자가 입력한 것 == "flag 문자열" //00007FF66F67101A
print "correct" //00007FF66F671157
else
print "wrong"
해당 부분을 잘 보다보면, 사용자의 입력값을 비교검증하는 함수를 호출하는 부분이 있다. chall0.7FF66F671000 값을 더블클릭하여 해당 함수의 내부로 진입해보자.
해당 함수 안으로 진입하면 아래 사진과 같은 내용물이 기다리고 있었다.
사진에 짧은 지식으로 간결하게 정리해보긴 했는데.... 어셈블리어를 다루지 않은지 꽤나 오래됐는지.. 맞는지 정확히 모르겠다. 하지만, 확실한 것은 사용자의 값과 7FF66F672220 주소에 저장된 값을 비교하는 것은 확실해 보이고, 비교대상인 7FF66F672220 string 문자열은 분명히, correct를 출력해주는 flag일 것이다.
이 문자열이 정답인지 확인하는 방법은, chall0을 실행하여 입력해보면 된다.
위와 같이 출력된 것을 확인할 수 있었으며, flag 형식에 맞는 DH{} 형식으로 변환하면 최종적으로 flag값을 구할 수 있다.
'Security > Wargame & CTF' 카테고리의 다른 글
[CodeEngn] Malware L08 (0) | 2024.05.07 |
---|---|
[CodeEngn | DreamHack] Malware L07(악성코드 Flow 분석) 풀이 (0) | 2024.05.07 |
[DreamHack] Blue Whale 풀이 (0) | 2024.05.04 |
[Dreamhack] mongoboard 풀이 (0) | 2024.04.23 |