드림핵 Reversing Basic Challenge #1

satoshichingu·2024년 11월 24일

해킹 문제 풀이

목록 보기
6/18

문제 설명
Reversing Basic Challenge #1
이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다.

해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요.

획득한 입력값은 DH{} 포맷에 넣어서 인증해주세요.


.exe 파일 분석
main 함수 분석
최대 256문자열을 입력하여 비교하는 것 같습니다.
f5로 디컴파일을 하여 자세하게 분석합니다.

int __fastcall main(int argc, const char **argv, const char **envp)
{
  char v4[256]; // [rsp+20h] [rbp-118h] BYREF

  memset(v4, 0, sizeof(v4));
  sub_1400013E0("Input : ", argv, envp);
  sub_140001440("%256s", v4);
  if ( (unsigned int)sub_140001000(v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

sub_1400013E0 - 입력
sub_140001440 - 입력한 문자열 처리
입력 검증하는 if문을 보면 return 값이 0이면 Wrong을 아니면 Correct를 출력하게 짜여있음.
검증 로직이 포함된 sub_140001000 함수를 분석하면 플래그를 얻을 수 있을 듯.


아스키코드가 나오는데 문자로 변환하면 플래그를 획득할 수 있음.

그냥 sub_140001000 함수를 View로 봐도 나오네요.(일부만 캡처함)

0개의 댓글