Search

[reversing.kr] easy crack

Tags
reversing
Category
reversing.kr
Last edited time
2022/01/07 12:50
Visibility
Public

1. 문제

1) 문제 확인
제대로된 비번을 맞추면 될것같다
3) 코드흐름 파악
int __cdecl sub_401080(HWND hDlg) { CHAR String[4]; // [esp+4h] [ebp-64h] char v3; // [esp+8h] [ebp-60h] __int16 v4; // [esp+65h] [ebp-3h] char v5; // [esp+67h] [ebp-1h] String[0] = 0; memset(&String[1], 0, 0x60u); v4 = 0; v5 = 0; GetDlgItemTextA(hDlg, 1000, String, 100); if ( String[1] != 'a' || strncmp(&String[2], a5y, 2u) || strcmp(&v3, aR3versing) || String[0] != 'E' ) return MessageBoxA(hDlg, aIncorrectPassw, Caption, 0x10u); MessageBoxA(hDlg, Text, Caption, 0x40u); return EndDialog(hDlg, 0); } ------------ // a5y -> '5y' // aR3versing -> 'R3versing'
C
복사
사실 아이다만으로도 충분히 유추가능하다. GetDlgItemTextA 라는 함수를 이용해 메시지박스에 입력한 값을 string 변수에 저장한다. 그리고 입력한 문자열의 각 문자들을 특정 값과 비교를 한다. 아마 정답은 Ea5yR3versing 이다.

2. 접근방법

x64dbg로도 간단히 봐보자
004010A3 | 50 | push eax | 004010A4 | 68 E8030000 | push 3E8 | 004010A9 | 57 | push edi | 004010AA | FF15 9C504000 | call dword ptr ds:[<&GetDlgItemTextA>] | 004010B0 | 807C24 05 61 | cmp byte ptr ss:[esp+5],61 | 61:'a' 004010B5 | 75 7E | jne easy_crackme.401135 |
Bash
복사
위 비교문이 첫번째 조건이다. 두번째 인덱스와 61 즉 'a'랑 비교한다
00401164 | F2:AE | repne scasb | 00401166 | F7D9 | neg ecx | 00401168 | 03CB | add ecx,ebx | 0040116A | 8BFE | mov edi,esi | edi:"R3versing" 0040116C | 8B75 0C | mov esi,dword ptr ss:[ebp+C] | [ebp+C]:"5y" 0040116F | F3:A6 | repe cmpsb | 00401171 | 8A46 FF | mov al,byte ptr ds:[esi-1] | 00401174 | 33C9 | xor ecx,ecx | 00401176 | 3A47 FF | cmp al,byte ptr ds:[edi-1] | edi-1:"yR3versing"
Bash
복사
두번째로 y와 edi-1 즉 입력한 3번째 인덱스 문자를 비교한다.
쭉 보다면 또 그다음 인덱스 문자를 비교하는걸 알수 있다

3. 풀이

4. 몰랐던 개념