딩굴댕굴

[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

활동하기