Simples Crackme 1
- Question
· Make me think your HD is a CD-ROM(내가 너의 HD를 CD-ROM으로 생각하게 만들어라)
· 첫 번째 MessageBox를 닫으면 위의 Message가 나오는데 실패를 알리는 Message를 볼 수 있다.
· 즉, 현재 이 Program은 사용자의 HD를 CD-ROM으로 인식하고 있지 않으므로 Tool을 이용해 Patch해야 한다.
- Solve
· OllyDbg로 실행 시 위와 같은 화면으로 출력된다.
· 'Name(label) in current module'을 선택해 현재 Process내의 함수를 확인한다.
· 사용된 함수
◦ MessageBoxA : Message Box 출력 함수
◦ GetDriveTypeA : 현재 사용되고 있는 Main Hard Drive의 Type에 따라 반환 값을 반환한다.
◦ ExitProcess : 호출한 Process와 모든 Thread를 종료한다.
· 현재 Process 위치로 들어가 보면 위 함수들을 확인할 수 있으며 동작과정을 확인할 수 있다.
· 진행순서
◦ 1 : MessageBox 출력
◦ 2 : 현재 사용 중인 Main Hard Drive의 Type을 알아낸다.
◦ 3 : 알아낸 Type을 연산해 비교
◦ 4 : 비교한 값이 CD-ROM 값과 일치하지 않을 경우의 MessageBox(Fail)
◦ 5 : 비교한 값이 CD-ROM 값과 일치할 경우의 MessageBox(Success)
· 연산내용
◦ INC ESI : ESI 1 증가
◦ DEC EAX : GetDriveTypeA의 반환 값으로 받은 값을 1감소
◦ JMP SHORT Abex_Cra.00401021
◦ INC ESI : ESI 1 증가
◦ INC ESI : ESI 1 증가
◦ DEC EAX : EAX 값 증가
◦ CMP EAX,ESI : EAX와 ESI 비교
· 연산 과정
◦ 처음 반환 값으로 EAX에 3을 받고 1을 2번 감소시켜 1를 만든다.
◦ ESI 값은 처음 0이고 1씩 3번 증가시켜 3을 만든다.
◦ EAX와 ESI를 비교 시 ZF가 0이 되어 같지 않다는 결과를 반환한다.
· Patch 방법
◦ 00401026의 JMP 명령어 조작
◦ 연산내용을 수정해 EAX 값을 3으로 만들어 성공 지점으로 이동하도록 수정
- Patch
· Patch 1(JMP 명령어 조작)
◦ 'JE SHORT Abex_Cra.0040103D'를 'JMP 0040103D(Success Message 시작 시점)'로 수정한다.
· Patch 2(연산내용 수정)
◦ 수정전의 EAX와 ESI의 최종 연산 결과는 각각 1, 3이므로 EAX를 1감소시키는 내용을 NOP(No Operation)으로 수정하면 Success Message 지점으로 이동하게 된다.
◦ 위 연산내용은 예시로 연산내용은 다른 내용으로 바꿀 수 있다.
'Reversing > Simples Creckme' 카테고리의 다른 글
Simples Crackme 6 (0) | 2015.08.16 |
---|---|
Simples Crackme 5 (0) | 2015.08.16 |
Simples Crackme 4 (0) | 2015.08.16 |
Simples Crackme 3 (0) | 2015.08.16 |
Simples Crackme 2 (0) | 2015.08.16 |