ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [리버싱 핵심원리 study] 6장 abex' crackme #1 분석
    Reverse Engineering 2020. 11. 25. 02:59

    이번 포스팅에서는 crackme라는 프로그램을 실행하고 분석하여 최종적으로 crack 하는 것이 목적이다.

     

    1. 프로그램 실행

    우선 프로그램을 실행하여 어떠한 프로그램인지 알아보자.

     

    프로그램 실행1

    이후 확인 버튼을 눌러보자.

    프로그램 실행2

    확인 버튼을 다시 누르면 프로그램은 종료가 된다. 첫 번째 캡처 화면에서 보이듯이 HD를 CD-Rom으로 인식하게끔 크랙을 진행해야 함을 유추해 볼 수 있다.

     

     

    2. Debugging (with Ollydbg)

    Ollydbg로 이제 본격적으로 디버깅을 해보자. 프로그램을 Ollydbg로 열면 다음과 같은 코드를 볼 수 있다.

    프로그램의 어셈블리 코드

    어떠한 '조건'을 만족시켜야 원하는 대로 크랙을 할 수 있고, 그 '조건'을 만족시키지 못하기 때문에 프로그램이 그대로 종료되는 것 같다. 즉, '조건'과 관련된 명령인 분기문 위주로 코드를 살펴보되, message box에서 나왔던 문자열의 위치 주변으로 코드를 살펴보면 된다. 00401024에서 EAX와 ESI의 비교가 이뤄지는 것을 볼 수 있고, 이에 따라 다음 명령어인 JE가 실행되어 0040103D가 실행(your hd is a cd-rom!), 00401028이 실행(this is not a cd-rom drive)된다. 크랙을 위해서는 0040103D로 분기할 수 있도록 코드를 수정하면 될 것 같다.

     

    (1) JE SHORT 0040103D를 수정

    가장 간단한 방법은 그냥 조건 없이 JMP SHORT 0040103D로 코드를 수정하여 원하는 코드를 실행하도록 만들 수 있다.

     

    JE를 JMP로 수정(조건 없애기)

    이후 F9를 통해 프로그램을 실행시킨 후, 확인 버튼을 눌러보자.

    YEAH!

    정상적으로 크랙이 이뤄졌음을 확인할 수 있다.

     

     

    (2) CMP EAX, ESI를 수정

    분기하는 조건을 수정하는 방법도 있다. 이후 나오는 명령어인 JE SHORT 0040103D는 ZF(zero flag)가 1인 경우 분기하게 된다. 따라서 ZF가 1이 되도록 CMP EAX, ESI를 CMP EAX, EAX로 변경해주는 방법도 고려해볼 수 있다.

     

    CMP EAX, ESI를 CMP EAX, EAX로 수정

    이후 F9를 통해 프로그램을 실행시킨 후, 확인 버튼을 눌러보자.

    YEAH!

    정상적으로 크랙이 이뤄졌음을 확인할 수 있다.

     

    반응형

    댓글

Designed by Tistory.