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

SCY·2023년 1월 4일
0

dreamhack

목록 보기
2/12

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

문제

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

풀이

프로그램 실행

문제 유형을 파악하기 위해 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_7FF6DDFF13E0("Input : ", argv, envp);
  sub_7FF6DDFF1440("%256s", v4);
  if ( sub_7FF6DDFF1000(v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

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

_BOOL8 __fastcall sub_7FF6DDFF1000(_BYTE *a1)
{
  if ( *a1 != 67 )
    return 0i64;
  if ( a1[1] != 111 )
    return 0i64;
  if ( a1[2] != 109 )
    return 0i64;
  if ( a1[3] != 112 )
    return 0i64;
  if ( a1[4] != 97 )
    return 0i64;
  if ( a1[5] != 114 )
    return 0i64;
  if ( a1[6] != 51 )
    return 0i64;
  if ( a1[7] != 95 )
    return 0i64;
  if ( a1[8] != 116 )
    return 0i64;
  if ( a1[9] != 104 )
    return 0i64;
  if ( a1[10] != 101 )
    return 0i64;
  if ( a1[11] != 95 )
    return 0i64;
  if ( a1[12] != 99 )
    return 0i64;
  if ( a1[13] != 104 )
    return 0i64;
  if ( a1[14] != 52 )
    return 0i64;
  if ( a1[15] != 114 )
    return 0i64;
  if ( a1[16] != 97 )
    return 0i64;
  if ( a1[17] != 99 )
    return 0i64;
  if ( a1[18] != 116 )
    return 0i64;
  if ( a1[19] != 51 )
    return 0i64;
  if ( a1[20] == 114 )
    return a1[21] == 0;
  return 0i64;
}

해결 과정

구하고자 하는 a1은
각 if절마다 주어진 숫자를 문자로 변환한 것과 일치해야합니다.
그래야 1을 리턴하여 main 함수에서 'Correct'를 출력합니다.

두 가지 방법
a. IDA 에서 단축키 'r' 이용해 아스키코드 변환
b. python으로 숫자를 문자로 변환하는 코드 작성

방법 b를 사용하여 코드를 작성해보겠습니다.

nums = [67, 111, 109, 112, 97, 114, 51, 95, 116, 104, 101, 95, 99, 104, 52, 114, 97, 99, 116, 51, 114, 0]

for i in range(len(nums)) :
    print(chr(nums[i]), end='')

위 코드로 출력된 문자열이 정답입니다.

정답 : Compar3_the_ch4ract3r

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

0개의 댓글