본문 바로가기

Reversing/Simples Creckme

Simples Crackme 1

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 위치로 들어가 보면 위 함수들을 확인할 수 있으며 동작과정을 확인할 수 있다.
  · 진행순서
  ◦ : 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