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 |
댓글