crackme 1
최근 관심이 생겨 입문하게된 리버싱 입니다. 리버싱 핵심원리 책을 공부하면서 기초를
쌓기로 결심하였고, 우선 크랙미를 통해 공부해 볼 생각입니다.
제 풀이가 틀렸거나, 조언해주시고 싶으신 분들은 자신의 생각을 공유해주시면 감사하겠습니다.^^
크랙미 1 파일 입니다.
처음 실행 해 보시면....
Make me think your HD is a CD-Rom 이라고 나옵니다. 번역을 하면 하드디스크가 CD-ROM이라 생각하게
만들어라 입니다. 확인을 누르면
Nah... This is not a CD-ROM Drive!라고 나옵니다. 번역하면 이것은 CD-ROM 드라이브가 아니다 하면서
error를 띄웁니다. 확인을 누르면 프로그램 종료됩니다.
그럼 올리디버거를 이용하여 확인해 보겠습니다.
401000주소 부터 시작하네요. ^^
F8키를 이용하여 내려오면 40100E에서 첫 메세지 박스가 실행되고, 계속 내려오면 c드라이브를 바꾸려
하는 게 아닌 가라는 추측을 해봅니다.
그리고 ESI증가, EAX감소, jmp가 있는데 왜있는지 모르겠....., ESI증가, ESI증가, EAX감소, EAX ESI 비교를해서
성공 실패를 출력하는 거 같습니다.
PUSH |
스택에 값 입력 |
CALL |
지정된 주소 함수 호출 |
INC |
값을 1증가 |
DEC |
값을 1감소 |
JMP |
지정된 주소로 점프 |
CMP |
주어진 두개의 오퍼랜드 비교 |
JE |
조건분기 |
해결책은 많겠지만, 저는 401024에서 비교를 했을때 ZP를 1로 만들면 조건분기를 해서 40103D로
보내면 해결이 된다. 그런대 JE로 비교 하지 않고도 JMP로 강제로 보낼 수 있기에 JE를 JMP로 바꾸어
해결했습니다.