728x90
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'
사실 아이다만으로도 충분히 유추가능하다. 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 |
위 비교문이 첫번째 조건이다. 두번째 인덱스와 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"
두번째로 y와 edi-1 즉 입력한 3번째 인덱스 문자를 비교한다.
쭉 보다면 또 그다음 인덱스 문자를 비교하는걸 알수 있다
3. 풀이
4. 몰랐던 개념
728x90
'워게임 > reversing.kr' 카테고리의 다른 글
[reversing.kr] ImagePrc (0) | 2020.12.15 |
---|---|
[reversing.kr] Replace (0) | 2020.12.14 |
[reversing.kr] Music Player.exe (0) | 2020.12.11 |
[reversing.kr] easy elf (0) | 2020.12.10 |
[reversing.kr] easy keygen (0) | 2020.12.08 |
Uploaded by Notion2Tistory v1.1.0