먼저 crackme3 프로그램을 실행시켜보면 다음과같은 메세지박스를 볼 수 있다.
그리고 실행시켜보면 두번째 메세지박스 가 뜬다
back to user mode로 이 메세지박스의 위치로 보면 다음과 같은 화면을 볼 수 있다.
보면 Well done 이라는 메세지 박스를 출력하면 성공하는것 같다.
저 메세지박스를 출력하기위해선 우선
JNZ SHORT Crackme_.00401060
을 점프하지 않아야된다.
분기문 위의 조건을 보면
먼저 CreateFileA 함수의 결과에따라 분기문이 하나 있는대 조건을 보면
CMP EAX, -1의 결과가 같을시 점프를 한다고한다.
EAX의 값은 CALL CreateFileA에 의해 변조되는대
이 함수의 기능들을 위에서 살펴보면
OPEN_EXISTING
FileName = "abex.l2c"
를 찾는다고한다.
그럼 crackme3 파일의 위치에 임의로 abex.l2c 파일을 만들어주면
파일을 찾기는 찾았는대 값어치가 없는 키파일이라고 한다.
그다음 분기문을 넘어서 성공했다는 표시가 나오지 않는것이다.
다음 분기문의 조건검사때 CMP EAX 12
결과가 같을시 ZF 를 1로 세트해
JNZ SHORT Crackme_.00401060
분기문을 넘지않고 원하는 결과값을 볼 수 있다.
EAX의 값은 바로위에 있는 함수 GetFileSize 함수에 의해서 설정되는대
FileSize 라는 말을 보아 text의 크기를 수정해보자.
EAX 의 값이 4로 바뀌어 있는것을 볼 수 있다.
그렇다면 12(16진수) 만큼 입력해주면 원하는 값을볼 수 있다.
'Study > Reversing' 카테고리의 다른 글
crackme5 (0) | 2015.05.28 |
---|---|
crackme4 (0) | 2015.05.27 |
crackme2 (0) | 2015.05.25 |
nag 제거, PE 헤더 (0) | 2015.05.21 |
KeyFile 체크 문제 풀이, 바이너리 수정 (0) | 2015.05.19 |
댓글