딩굴댕굴

[ReversingKr] Easy_CrackMe

by jennysgap

BOX

분석

입력값이 틀렸을 때 나타나는 메세지 박스 문자열(Incorrect Password)을 검색하면 sub_401080 함수를 찾을 수 있다.

해당 함수에서 자세히 봐야할 부분은 if문이다.

int __cdecl sub_401080(HWND hDlg)
{
  CHAR String; // [esp+4h] [ebp-64h]
  char v3; // [esp+5h] [ebp-63h]
  char v4; // [esp+6h] [ebp-62h]
  char v5; // [esp+8h] [ebp-60h]
  __int16 v6; // [esp+65h] [ebp-3h]
  char v7; // [esp+67h] [ebp-1h]

  String = 0;
  memset(&v3, 0, 0x60u);
  v6 = 0;
  v7 = 0;
  GetDlgItemTextA(hDlg, 1000, &String, 100);

  // 이 부분만 분석하면 정답을 알 수 있다!
  if ( v3 != 'a' || strncmp(&v4, a5y, 2u) || strcmp(&v5, aR3versing) || String != 'E' )
    return MessageBoxA(hDlg, aIncorrectPassw, Caption, 0x10u);
  MessageBoxA(hDlg, Text, Caption, 0x40u);
  return EndDialog(hDlg, 0);
}

if 문의 조건은 아래 4가지가 해당 됐을 때 정답 메세지 박스를 출력한다.

v3 != 'a' 
strncmp(&v4, a5y, 2u)
strcmp(&v5, aR3versing) 
String != 'E' 

그렇다면 각 변수의 주소를 살펴보자.

String 주소는 ebp-64h, v3 주소는 ebp-63h이다.

즉, v3의 위치는 입력값의 2번째 문자라는 거다!

v4는 3번째 문자 위치

v5는 5번째 문자 위치

CHAR String;    // [esp+4h] [ebp-64h]
char v3;        // [esp+5h] [ebp-63h]
char v4;        // [esp+6h] [ebp-62h]
char v5;        // [esp+8h] [ebp-60h]

그럼 다시 조건으로 돌아와서 해석해보면 다음과 같다.

v3 != 'a'                   // 2번째 입력 문자는 a
strncmp(&v4, a5y, 2u)       // 3번째 입력 문자는 5y
strcmp(&v5, aR3versing)     // 5번째 입력 문자는 R3versing
String != 'E'               // 1번째 입력 문자는 E

이것을 순서대 조합하면 Ea5yR3versing 문자열이 된다.

반응형

블로그의 정보

jennysgap

jennysgap

활동하기