[드림핵] 워게임 rev-basic-2 풀이

SCY·2023년 1월 4일
0

dreamhack

목록 보기
3/12

드림핵 사이트의 워게임 rev-basic-2 문제 풀이 진행하겠습니다.

문제

https://dreamhack.io/wargame/challenges/16/

풀이

프로그램 실행

문제 유형을 파악하기 위해 Windows의 PowerShell을 이용하여 프로그램을 실행시켜줍니다. 아래와 같이 임의의 문자열을 입력하면 'Wrong'이 출력됩니다.
이를 통해 오답 시 'Wrong', 정답 시 'Correct'가 출력됨을 예측할 수 있습니다.
image

IDA 실행

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_1400011B0("Input : ", argv, envp);
  sub_140001210("%256s", v4);
  if ( (unsigned int)sub_140001000((__int64)v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

sub_140001000 함수를 더블클릭하여 함수 내용을 확인합니다.

__int64 __fastcall sub_140001000(__int64 a1)
{
  int i; // [rsp+0h] [rbp-18h]

  for ( i = 0; (unsigned __int64)i < 0x12; ++i )
  {
    if ( *(_DWORD *)&aC[4 * i] != *(unsigned __int8 *)(a1 + i) )
      return 0i64;
  }
  return 1i64;
}

해결 과정

배열 aC는 한 번에 4바이트를 건너뛰어 접근합니다.
우리가 알고자 하는 배열 a1 중 한 글자라도 aC와 같지 않으면 0을 리턴하여 함수를 끝내버립니다. 따라서 a1은 aC와 동일해야 1을 리턴하여 main 함수에서 'Correct'를 출력할 수 있습니다.

배열 aC를 더블클릭하여 메모리 주소를 확인한 후
Hex View에서 해당 주소에 저장되어있는 문자들을 확인합니다.

정답

Comp4re_the_arr4y

profile
성장 중독 | 서버, 데이터, 정보 보안을 공부합니다.

0개의 댓글