반응형
문제) Reversing Basic Challenge #0
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여
correct 또는 wrong을 출력하는 프로그램이 주어집니다.
해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요!
획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.
예시) 입력 값이 Apple_Banana일 경우 flag는 DH{Apple_Banana}
chall0.exe 파일을 제공한다.
input을 받고 input 값과 chall0.exe 에 저장된 값이 같다면 FLAG를 확인할 수 있다.
리버스 엔지니어링을 위해 IDA를 사용하였다.
먼저 main 함수를 보게되면, 전형적인 strcmp 형식 프로그램이며,
비교할 값이 sub_140001000 함수에 있음을 확인할 수 있다.
sub_140001000 함수의 로직을 확인하면, lea로 Str2에 있는 내용을 rdx에 load하여 비교 후
그 비교값이 True면 '"Correct", False면 "Wrong"를 반환한다.
_BOOL8 __fastcall sub_140001000(const char *a1)
{
return strcmp(a1, "Compar3_the_str1ng") == 0;
}
sub_140001000 함수의 call부분을 code 로 확인하면, FLAG를 획득할 수 있다.
반응형