abex crackme 8

check 외에도 about, exit버튼도 있지만 딱히 중요하진 않다.

여기서 윈도우 핸들을 받아 GetDlgItemTextA를 통해 내가 입력한 값을 받는 것을 알 수 있다.
https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-getdlgitemtexta

받고 난 이후에는 총 3개의 경우가 있다.
- 시리얼을 입력했는데 틀린 경우
- 시리얼을 입력하고 맞은 경우
- 시리얼을 아예 입력 안한 경우
correct가 뜨기 위해선 00401199에 있는 JNZ를 그냥 통과하고 004011CE에 있는 JMP까지 무사히 가야 한다.
00401199에 있는 JNZ는 시리얼을 아예 안 입력한 경우이므로 시리얼만 입력하면 된다.
0040118F~004011CC에 있는 JNZ는 아마 내가 입력한 문자를 AND연산 후 비교하는 것 같다.
각각
1byte and AD == 0?
1byte and 9A == 0?
1byte and 97 == 0?
1byte and BF == 0?
2byte and 00005FC5 == 0?
2byte and 000000D6 == 0?
ecx == 6? (글자수 == 6인가?)
이다.
물론 아스키 0번 문자를 넣으면 무조건 0이 되어 통과하겠지만,
꼼수 방지로 null입력시 다른 케이스로 가기 & 글자수 검사가 있다.
따라서 그냥 각각의 비트를 NOT으로 뒤집으면 된다
AD(1010 1101) -> 52(0101 0010)
9A(1001 1010) -> 65(0110 0101)
97(1001 0111) -> 68(0110 1000)
5FC5(0101 1111 1100 0101) -> A03A(1010 0000 0011 1010)
00D6(0000 0000 1101 0110) -> FF29(1111 1111 0010 1001)
아스키로 바꾸면 Reh@:)이다.
입력하면 correct가 뜬다.
'리버싱 입문' 카테고리의 다른 글
[리버싱 입문](13)[abex crackme 11] (0) | 2025.02.25 |
---|---|
[리버싱 입문](12)[abex crackme 10] (0) | 2025.02.24 |
[리버싱 입문](10)[abex crackme 7] (0) | 2025.02.20 |
[리버싱 입문](9)[abex crackme 6] (0) | 2025.02.19 |
[리버싱 입문](8)[abex crackme 5] (0) | 2025.02.18 |