본문 바로가기

Reversing/Simples Creckme

Simples Crackme 18

Simples Crackme 18
 - Question

 

  · 실행 후 확인해보면 숫자가 하나씩 올라가는 MessageBox를 확인할 수 있다.
  · 여기서 마지막 MessageBox의 숫자를 확인해 MD5 Hash 값으로 변환해야하는 문제이다.


 - Solve
  · Solve Sequence
  ◦ MessageBox의 숫자에 따라 종료가 결정되므로 MessageBox에 PUSH 명령어로 추가되는 영역의 주소를 찾는다.
  ◦ 숫자 값과 비교(CMP)하는 영역을 찾는다.
  ◦ 찾은 값이 맞는 값인지 PUSH 명령어로 추가되는 값을 비교대상 숫자와 일치시켜 확인해본다.
  · Solve Process

  ◦ OllyDbg를 통해 실행해보면 Packing되어 있다는 것을 확인할 수 있다.
  ◦ UPX를 통해 Packing을 해제시킨다.

  ◦ Packing을 해제하고 실행시켜보면 'IsDebuggerPresent'를 이용해 Debugging을 할 수 없게 만들었다는 것을 확인할 수 있다.

  ◦ 'Search for → All referenced text strings'를 통해 'IsDebuggerPresent'가 존재하는 구간을 찾아 JE 명령어를 JMP 명령어로 수정해 'IsDebuggerPresent'가 실행되지 않도록 해준다.

  ◦ MessageBox가 실행되는 구간을 찾기 위해 'Search for → Name (lable) in current module'를 이용해 모두 BP를 설정한다.

  ◦ MessageBox가 실행되기 전을 확인해보면 숫자 값이 PUSH 명령어로 넣어지는 것을 확인할 수 있으며 'ESP(89F738)+20'에 있다는 것도 확인할 수 있다.

  ◦ 이후에 진행되는 Code의 CMP 영역을 모두 살펴보면 '0041365B'의 CMP 명령어가 MessageBox에 넣어지는 값과 비교 값을 비교하는 것을 확인할 수 있다.
    ※ 주의 : 쉽게 찾을 수 없으며 꾸준히 찾아야한다.(필자는 CMP 명령어를 일일이 확인해봤다.)

  ◦ CMP 명령어가 실행되기 전 EAX Register 값을 비교 값인 EDI 값(00063B8E)과 일치 시켜준다.
  ◦ 하지만 이 상태에서 MessageBox를 다시 실행시켜준다고 해서 Process가 종료되지 않는다는 것을 확인할 수 있다.

  ◦ CMP 명령어 실행 전 EAX 값을 수정(00063B8E)해주고 SETL 명령 실행 직후에도 EAX 값을 수정(00063B8E)해주면 'ExitProcess' 명령어를 만나 Process가 정상적으로 종료되는 것을 확인할 수 있다.


 - Answer

  · 16진수 : 63B8E → 10진수 408462
  · 408462의 MD5 Hash 변환 값 6903eef5902839b661840d64a04dd81d
 

'Reversing > Simples Creckme' 카테고리의 다른 글

Simples Crackme 17  (0) 2015.08.16
Simples Crackme 16  (0) 2015.08.16
Simples Crackme 15  (0) 2015.08.16
Simples Crackme 14  (0) 2015.08.16
Simples Crackme 13  (0) 2015.08.16