발자취
[Reverse Engineering] #07-2. rev-basic-1 풀이 본문
[Reverse Engineering] #07-2. rev-basic-1 풀이
해린 2024. 6. 28. 06:00본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다.
#01. 서론
1. 서론
https://dreamhack.io/wargame/challenges/15/
위 링크의 워게임을 풀이한다.
이 문제도 rev-basic-0 문제와 마찬가지로 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어진다.
#02. 정적 분석
1. IDA로 파일 열기

"OK"

"No"
2. main 함수 찾기

IDA에 파일을 업로드하면 자동으로 main 함수를 찾아준다.
IDA가 Visual Studio로 컴파일된 프로그램의 main 함수 패턴을 잘 알고 있기 때문이다.
이번 실습에서는 IDA가 찾아준 main 함수부터 바로 분석해 보겠다.
단축키 F5를 눌러 디컴파일 한다.

256바이트의 char 배열 v4를 0으로 초기화한다.
앞선 실습에서 봤던 구조와 비슷한 것으로 보아 sub_1400013E0은 printf, sub_140001440은 scanf일 것으로 예상된다.
3. main 내부 함수 찾기
sub_1400013E0

역시 구조를 확인해 보면 va_start 함수를 사용하여 가변 인자를 받아오고, _acrt_iob_func 함수에 인자로 1을 전달하여 stdout 파일 스트림을 가져온다. 즉, 출력하는 함수 printf가 맞다.
(함수를 빠져나가려면 esc 키를 사용하면 된다~)
sub_140001440

반대로 이 함수는 _acrt_iob_func 함수에 인자로 0을 전달하여 stdin 파일 스트림을 가져오는 scanf 함수이다.

분석이 쉽도록 함수의 이름을 변경해 주도록 하겠다. 단축키 N을 사용하면 된다.
sub_140001000

"Correct"를 출력하려면 이 함수가 1을 리턴해야 한다는 점을 기억하며 분석을 시작한다.
인자로 받은 a1은 사용자가 입력한 값이며, 1바이트 단위로 값을 비교한다.
즉, 각 인덱스마다 값이 정해져 있고, 이 값들과 모두 일치한다면 "Correct"를 출력하는 구조이다.
각 숫자를 아스키코드로 변환하려면 단축키 r을 사용하면 된다.

이 문자를 모두 이어 붙이면 입력해야 하는 문자열이 나온다.

문자열의 끝은 NULL 문자이므로 a1[21]은 직접 입력하지 않아도 자동으로 들어가는 부분이다~
4. 문제 해결
아무튼 위 문자들을 모두 이어 붙이면 "Compar3_the_ch4ract3r"가 나온다.

PowerShell에서 파일을 실행하고 위 문자열을 입력해 보면 "Correct"가 나온다.

위 페이지에 Flag를 입력하면!

정답~

완료!
💎 단축키 다시 정리하기 💎
- 이름 재설정: 단축키 n
- 숫자-문자 아스키코드 변환: 단축키 r
'Dreamhack Study > Reverse Engineering' 카테고리의 다른 글
| [Reverse Engineering] #07-4. rev-basic-3 풀이 (0) | 2024.07.01 |
|---|---|
| [Reverse Engineering] #07-3. patch 풀이 (0) | 2024.07.01 |
| [Reverse Engineering] #07-1. rev-basic-0 풀이 (0) | 2024.06.28 |
| [Reverse Engineering] #06-2. IDA 실습 (0) | 2024.06.25 |
| [Reverse Engineering] #06-1. Tools: IDA 이론 (0) | 2024.06.25 |