리버싱 입문

[리버싱 입문](11)[abex crackme 8]

황올뱀 2025. 2. 21. 18:52

 

abex crackme 8

 

이번에는 시리얼을 입력 후 check를 눌러 맞다면 correct가 뜬다.

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

불필요한 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가 뜬다.

 

728x90
반응형