안녕하세요. 해킹하는 개발자가 되고 싶은 컴공 대학생입니다.
정보 보안 분야에 관심이 많아 드림핵으로 리버싱 엔지니어링 학습 중입니다.
드림핵 사이트의 워게임 rev-basic-0 문제 풀이 진행하겠습니다.
https://dreamhack.io/wargame/challenges/14/
문제 유형을 파악하기 위해 Windows의 PowerShell을 이용하여 프로그램을 실행시켜줍니다. 아래와 같이 임의의 문자열을 입력하면 'Wrong'이 출력됩니다.
이를 통해 오답 시 'Wrong', 정답 시 'Correct'가 출력됨을 예측할 수 있습니다.
main 함수를 디컴파일합니다. (단축키 F5)
int __cdecl main(int argc, const char **argv, const char **envp)
{
char v4[256]; // [rsp+20h] [rbp-118h] BYREF
memset(v4, 0, sizeof(v4));
sub_140001190("Input : ", argv, envp);
sub_1400011F0("%256s", v4);
if ( sub_140001000(v4) )
puts("Correct");
else
puts("Wrong");
return 0;
}
sub_140001000 함수를 더블클릭하여 함수 내용을 확인합니다.
_BOOL8 __fastcall sub_140001000(const char *a1)
{
return strcmp(a1, "Compar3_the_str1ng") == 0;
}
문자열 "Compar3_the_str1ng"를 입력값과 비교하여 같으면 true를 반환하고 main 함수에서 'Correct'를 출력합니다.
따라서 입력값 a1은 "Compar3_the_str1ng"가 되어야 합니다.
Compar3_the_str1ng