훈훈훈

abex' crackme #2 풀이 with Python script 본문

정보보안/리버스 엔지니어링

abex' crackme #2 풀이 with Python script

훈훈훈 2018. 11. 5. 01:40


1. 실습환경

- 운영체제 : Windows 7 32bit

- 실습도구 : Immunity Debugger


2. 실습과정

 1) 파일 실행

 : 분석하기 이전에 먼저 파일을 실행시켜 어떻게 동작하는지 확인한다.


<실행화면 - 1>


위 사진은 파일을 처음 실행시켰을때 출력되는 화면이다.

사진을 자세히 보면 "Name" 과 "Serial"을 입력받고 "Check" 하는 항목이 있는 것을 알 수 있다.


<실행화면 - 2>


<실행화면 - 2>를 살펴보면 "Name"과 "Serial"에 임의의 값을 입력 후 "Check"를 클릭했을때 

"Wrong 메세지"가 출력되는 것을 볼 수 있다.



 2) 파일 분석

 : "Immunity Debugger"로 해당파일을 분석해보았다.


<분석화면 - 1>


위 화면은 "Immunity Debugger"로 해당파일을 실행시켰을때 코드영역을 보여주고 있다.

위 코드를 자세히 보면 Visual Basic 코드로 작성된 것을 알 수 있다.

Visual Basic으로 작성된 코드는 이해하기 까다롭기 때문에 "Visual Basic decompiler"를 이용해서 

코드를 먼저 살펴보려고한다.


<VB Decompiler 화면>


위 화면을 살펴보면 "VB Decompiler"로 해당파일을 디컴파일 했을때 결과를 볼 수 있다.

빨간박스를 자세히 살펴보면 0x402ED0 주소 다음에 성공메시지들을 확인할 수 있다.

해당 디컴파일러는 "https://www.vb-decompiler.org/download.htm" 에서 다운 받을 수 있다.

이제 다시 "Immunity Debugger"로 넘어와서 분석을 하자.


<분석화면 - 2>


<분석화면 - 1>에서 0x402ED0 주소로 넘어가기 위해서 "ctrl + G" 키를 누른 후 해당 주소로 넘어왔다.

이제 어디서에서 조건문으로 검사 하고 점프를 하는지 확인해보자.


<그래프 화면>


위 화면은 "mmunity Debugger"에서 제공하는 그래프 화면이다.

이제 이 그래프 화면을 가지고 "0x402DE0"주소 부터 출발해서 어디에서 조건문이 있는지 살펴보자.


<분석화면 - 3>


"0x00402ED0" 주소부터 문제해결에 관련된 조건문을 찾아보면

"0x004032e9" 주소 이후에 조건문이 있는 것을 알 수 있다.

"Immunity Debugger"로 찾아보면"JE abexcrac.00403408"의 주소는 "0x0040332"인 것을 알 수 있다. 

이제 이 주소로 점프해서 실행시켜보자.


<분석화면 - 4>


"0x0040332" 주소에 있는 값을 JE -> JNE로 변경 후 실행시켜보자.

"BP(break point)"를 세팅 후 "F9(run)"을 눌러 실행시켜보았다. 


<분석화면 - 5>


"Name"과 "Serial"을 입력하는 창이 뜬 것을 볼 수 있다. 각각의 항목에 임의의 값을 입력 후 "Check"를 누르자.


<분석화면 - 6>


각각의 항목에 임의의 값을 입력 후 다시 F9를 눌러 실행시켜면 다음과 같이 성공 메시지가 출력된 것을 볼 수 있다.

하지만 문제가 아직 완벽하게 해결이 안된것을 다음 화면을 보고 알 수 있다.


<분석화면 - 7>


이전화면에서 "확인"을 누르면 다음과 같이 "wrong 메시지"가 출력되는 것을 확인할 수 있다.

따라서 값을 입력받고 비교한다음 다시 한번더 비교하는 작업을 수행하는 것을 짐작할 수 있다.

다시 그래프창을 켜서 "0x0040332" 주소 이후로 조건문이 있는지 확인해보자.


<분석화면 - 8>


"0x403424"주소에 "JE abexcrac.004034F1"이 있는 것을 알 수 있다.

이제 해당 주소로 넘어가서 다시 설정하자.


<분석화면 - 9>


"0x403424"주소에 있는 코드를 "JE -> JNE" 로 변경 후 다시 실행하자.


<분석화면 - 10>


성공적으로 실행되는 것을 확인할 수 있다.



3. 스크립트

 - python 코드를 이용하여 해당 문제를 해결하는 스크립트를 작성해보았다.


<Python script>


스크립트는 다음과 같이 작성할 수 있다.

각각 변경된 기계어 값들을 변경된 주소에 가서 변경 후 실행하는 코드이다.


위 코드를 실행하기 위해서 " Immunity INC\Immunity Debugger\PyCommands " 디렉토리에 저장 후 

"Immunity Debugger"의 최하단 입력하는 폼에 "![파일이름]"를 입력하면 해당 스크립트가 실행한다. 






Comments