본문 바로가기
Study/Reversing

crackme2

by Melpin 2015. 5. 25.

crackm2 를 켜보면 다음과 창을 볼 수 있다.



name과 serial을 입력하면 검사를 한 뒤 어떤 메세지박스를 띄울것인지 결정한다.




back to user 모드로 를 이용해 이 Wrong serial! 메세지박스의 위치를 찾아보자.



CALL DWORD PTR DS: [<&MSVBVM60._vbaVarTstNe>] 함수를 실행하고

TEST AX AX 뒤에 이 메세지박스를 출력할지 결정한다.

그리고 더 위로 올려보면 


Congratulations 메세지박스를 출력할지를 결정하는 분기문이 보인다.


00403329   .  FF15 58104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarTstEq>]

0040332F   .  66:85C0       TEST AX,AX

00403332   .  0F84 D0000000 JE Crackme_.00403408


이 부분의 분기문을 점프하지 않고 들어가야 성공한 메세지 박스를 띄울수 있다.

00403329   .  FF15 58104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarTstEq>]

이 부분의 결과로 내가 입력한 시리얼값과 프로그램 내부에서 만들어진 시리얼 값이 같다면 분기문의 결과로 EAX 가 FFFFFFFF

로 나오게 되고 TEST AX AX 하면 ZF 가 0으로 세트되어 점프하지 않게된다.

만약 시리얼값을 잘못 입력한다면 EAX 에 0이 세팅되고, ZF 가 1로 세트되어 점프하게된다.


분기분에서 좀더 위로 올라가면 시리얼키를 만드는 반복문을 볼 수 있다.

입력받은 키 4개를 이용하여 반복문을 돌려서 시리얼키를 만들어낸다.


JE Crackme_.004032A5 는 TEST EAX EAX를 이용해서 반복횟수를 몇회 햇는지 검사하는 부분이다.



CALL DWORD PTR DS:[<&MSVBVM60.#573>] 

여기서 내가입력한 키를 이용해 글자를 하나 만든다.


CALL DWORD PTR DS:[<&MSVBVM60.__vbaVarCat>] 

지금까지 만들어진 시리얼번호와 문장을 잇는다


내가 TEST 를 입력했을 때의 시리얼 키는

B8A9B7B8 인 것을 알 수 있다.




그리고 입력을 해보면 맞는것을 알 수 있다.



'Study > Reversing' 카테고리의 다른 글

crackme4  (0) 2015.05.27
crackme3  (0) 2015.05.26
nag 제거, PE 헤더  (0) 2015.05.21
KeyFile 체크 문제 풀이, 바이너리 수정  (0) 2015.05.19
키젠문제 풀이  (0) 2015.05.18

댓글