[ReversingKr] Easy_CrackMe
by jennysgap분석
입력값이 틀렸을 때 나타나는 메세지 박스 문자열(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