1. 문제 정보
1.1 문제 이름
rev-basic-1 (dreamhack)
1.2 문제 설명
문제를 실행하면 문자열을 받도록 되어있다. 문자열을 넣었을 때 프로그램 내부에서 검증을 거쳐 검증이 통과하면 Correct 통과하지 못하면 Worng을 출력한다.
1.3 문제 분야
◼️ 리버싱
2. 풀이
2.1 정적 분석
Shift + f12를 눌러 문자열을 검색하였다.
'Input :', 'Correct', 'Wrong' 등 다양한 문자열이 존재를 한다. 검증부분이 통과할 때 Correct 부분이 출력될 것이므로 이 부분을 분석하겠다. 더블클릭으로 Correct 부분에 접근하고 x를 통해 문자열이 호출하는 함수로 접근을 하였다.
먼저 sub_1400013E0와 sub_140001440 함수를 먼저 분석해 보겠다.
_acrt_iob_func의 인자가 1이므로 stdout 스트림을 가져오고 stdout 스트림을 sub_1400012B0 함수로 전달을 한다.
sub_1400012B0 함수의 내부를 보면 _stdio_common_vfprintf를 리턴을 한다. 따라서 sub_1400013E0 함수는 printf 함수임을 유추할 수 있다.
단축키 n을 눌러 함수의 이름을 printf로 변환을 한다.
_acrt_iob_func의 인자가 0이므로 stdin스트림을 가져오고 stdin 스트림을 sub_140001300 함수로 전달을 한다.
sub_140001300 함수의 내부를 살펴보면 _stdio_common_vfscanf를 리턴을 한다. 따라서 sub_140001440 함수는 scanf 함수임을 유추할 수 있다.
이 함수 또한 scanf로 변환을 한다.
그림 6은 함수이름을 변경한 main함수의 모습이다. 나머지 함수를 보면 sub_140001000 함수가 입력값을 검증하는 함수임을 예측할 수 있다.
a1은 우리가 입력한 값이고 입력한 값 1바이트마다 검증하고 있다.
마지막에는 숫자 0을 넣어주고 리턴을 한다. 단축키 r을 사용하여 숫자를 아스키코드에 대응하는 문자로 바꿀 수 있다.
이 소스코드를 보면 a1은 Compar3_the_ch4ract3r이 되어야지 Correct를 출력한다는 것을 알 수 있다.
따라서 답은 Compar3_the_ch4ract3r이다.
'Reversing > 드림핵(dreamhack)' 카테고리의 다른 글
rev-basic-0 LEVEL 1 (0) | 2022.10.20 |
---|---|
HelloWorld 분석 (0) | 2022.10.17 |