두번째로 풀어볼 문제는 드림핵 rev basic #2 이다.

문제 풀어보는 방식은 https://beru-123.tistory.com/10 와 동일한 방식으로 풀어보도록 하자.

 

 

 

문제도 어느 값을 입력하면 출력으로 "Correct"를 나오게 하면 된다.

Main 함수

 

; __unwind { // __GSHandlerCheck

해당 코드에 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(v4) )
    puts("Correct");
  else
    puts("Wrong");
  return 0;
}

 

해당 코드를 보고 puts들어가보면 아무 반응도 안일어난다. 

 

 

리버싱을 하다보면 자주 보이는 sub_140001000 함수는 중요한 역할을 하니 기억해두면 좋다

 

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;
}

현재 코드에선 if ( *(_DWORD *)&aC[4 * i] != *(unsigned __int8 *)(a1 + i) ) 만 유일하게 반응한 코드이기에 더 들어가보면 

 

data:0000000140003000 aC              db 'C',0                ; DATA XREF: sub_140001000+28↑o
.data:0000000140003002                 align 4
.data:0000000140003004 aO              db 'o',0
.data:0000000140003006                 align 8
.data:0000000140003008 aM              db 'm',0
.data:000000014000300A                 align 4
.data:000000014000300C aP              db 'p',0
.data:000000014000300E                 align 10h
.data:0000000140003010 a4              db '4',0
.data:0000000140003012                 align 4
.data:0000000140003014 aR              db 'r',0
.data:0000000140003016                 align 8
.data:0000000140003018 aE              db 'e',0
.data:000000014000301A                 align 4
.data:000000014000301C                 db '_',0
.data:000000014000301E                 align 20h
.data:0000000140003020 aT              db 't',0
.data:0000000140003022                 align 4
.data:0000000140003024                 db 'h',0
.data:0000000140003026                 align 8
.data:0000000140003028 aE_0            db 'e',0
.data:000000014000302A                 align 4
.data:000000014000302C                 db '_',0
.data:000000014000302E                 align 10h
.data:0000000140003030 aA              db 'a',0
.data:0000000140003032                 align 4
.data:0000000140003034 aR_0            db 'r',0
.data:0000000140003036                 align 8
.data:0000000140003038 aR_1            db 'r',0
.data:000000014000303A                 align 4
.data:000000014000303C a4_0            db '4',0
.data:000000014000303E                 align 20h
.data:0000000140003040 aY              db 'y',0
.data:0000000140003042                 align 10h

세로로 익숙한 영단어와 숫자가 존재한다.  모두 종합해서 쓰자면 "Comp4re_the_arr4y"로 나온다. 

 

 

CMD에 답을 입력해보자

 정답이라 나왔다. 

 

+ Recent posts