훈훈훈
abex' crackme #2 풀이 with Python script 본문
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"의 최하단 입력하는 폼에 "![파일이름]"를 입력하면 해당 스크립트가 실행한다.
'정보보안 > 리버스 엔지니어링' 카테고리의 다른 글
abex' crackme #4 풀이 with Python script (0) | 2018.11.09 |
---|---|
abex' crackme #3 풀이 with Python script (0) | 2018.11.05 |
abex' crackme #1 풀이 with Python script (0) | 2018.11.05 |