훈훈훈

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

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

abex' crackme #4 풀이 with Python script

훈훈훈 2018. 11. 9. 13:53


1. 실습환경

- 운영체제 : Windows 7 32bit

- 실습도구 : Immunity Debugger



2. 실습과정

 1) 파일 실행

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


<실행화면 - 1>


위 그림은 파일을 실행시켰을때 출력되는 화면이다.

Serial 키를 입력하고 해당 키가 올바르게 입력되었을때 Registered 블록을 클릭할 수 있는 것을 확인할 수 있다.

이제 이 Serial 키를 찾기 위해 해당 파일을 리버싱 해보자.



 2) 분석 과정

 : Immunity Debugger를 이용하여 해당  파일을 분석해보았다.


<분석화면 - 1>


위 화면을 보았을때 Visual Basic으로 작성된 것을 알 수 있다.

이제 문제를 풀기위해서 어떤 VB 함수가 쓰였는지 확인해보자.


<분석화면 - 2>


"Search for -> All intermodular calls" 를 클릭하면 위 화면같이 어떤 함수들이 쓰였는지 확인 할 수 있다.

빨간 박스를 보면 "vbaStrMove" 함수를 볼 수 있다. 

이 함수는 문자열을 복사하는 함수이다.


<분석화면 - 3>


이제 이 함수르의 주소로 이동해서 그 함수가 호출되기전 주소에 BP를 걸어보자.


<분석화면 - 4>


BP를 걸고 run(F9)를 실행하면 다음과 같이 레지스터 영역에서 의문의  숫자들을 확인할 수 있다.


<분석화면 - 5>


EDX에 저장된 주소에 저장된 문자열을 확인하기 위해 해당 주소로 이동했다.

그 결과 해당 문자열이 저장되있는 것을 알 수 있다.


<분석화면 - 6>


최종적으로 다시 run(F9)를 했을때 문자열을 입력하는 창이 출력된 것을 볼 수 있다.

그런 다음 "2038180"을 입력했을때 "Registered" 창이 활성화 된 것을 확인할 수 있다.




3. 스크립트

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


<Python script>


위 Python Script는 우리가 분석했던 과정을 스크립트화 시킨것이다.

코드 내용을 간단히 요약을 해보면 우리가 문제를 풀때 BP(Break point)를 걸었던 "vbrStrMove" 함수 주소부분을

똑같이 BP를 걸고 실행한다음 eax에 저장된 숫자를 로그에 남기고 다시 BP를 해제하는 동작을 수행한다.

따라서 스크립트를 실행하고 로그를 보면 "Serial"이 있는 것을 확인할 수 있다. 




Comments