본문 바로가기

2. Reversing (리버싱)/1) Write UP

[2020.05.14] Reversing.kr | AutoHotkey1 문제

http://reversing.kr의 AutoHotkey1 문제를 풀어보도록 하자.

문제를 클릭하면 AHK.zip 파일이 다운받아진다.

 

zip파일을 풀고 readme.txt 파일을 열면 다음과 같은 내용을 확인할 수 있다.

DecrytKey와 EXE's Key를 각각 md5로 복호화해서 AuthKey를 완성시켜야 한다.

AuthKey는 "visual studio"이다.

 

ahk.exe 파일을 열면 입력을 받는 창이 나오고 프로그램이 종료된다.

먼저 Exeinfo PE 툴로 ahn.exe파일을 확인한다.

UPX로 패킹된 파일임을 알 수 있다.

UPX 패킹을 풀어준다.

UPX 패킹을 풀고 프로그램을 실행하면 "EXE corrupted"라는 메세지 박스가 뜬다.

언패킹한 파일을 ollydbg로 열고 문자열을 확인해

EXE corrupted 문자열 위에 있는 함수 ahk.004508c7에 들어가 구조를 확인했다. 

해당 메세지가 호출되는 함수 내부를 보면 특정 함수 반환값을 조건으로 "EXE corrupted" 메세지 박스를 띄우고 종료하는 분기와 ">AUTOHOTKEY SCRIPT<" 문자열을 사용하는 함수를 호출하는 분기로 나뉘고 있다.

sub_004508c7는 CRC 체크를 진행하는 함수임을 알 수 있다.

CRC 체크를 하는데 언패킹한 파일을 사용하면 에러가 나기 때문에 패킹된 파일을 가지고 분석을 진행한다.

 

 

 

UPX로 패킹된 파일의 OEP를 찾아 패킹된 파일의 실제 프로그램 시작 부분으로 이동해야 한다.

*

 OEP : Original Entry Point - 패킹된 파일의 실제 프로그램 시작 부분이다.
  OEP 이전의 실행 부분은 패킹된 파일이 메모리에 로드되어 압축을 푸는 명령어가 있다.

*

*UPX 패킹의 특징은 PUSHAD ~ POPAD 명령어 내부에서 압축해제 코드가 실행 되고

POPAD 명령어 실행 후 JMP 명령어를 통해 OEP로 이동한다.

패킹된 파일을 열면 PUSHAD가 보인다.

그리고 밑으로 내리다 보면 POPAD도 나온다.

POPAD 명령어가 실행되고 JMP 명령어가 뒤따라 오는데
      JMP 명령어 뒤에 오는 주소가 바로 OEP이다.

이동한 후 Ctrl+a를 눌러보면 언패킹한 ahk.exe 파일에서 봤었던 실행코드를 확인 할 수 있다.

*

Ctrl+a : 코드 다시 읽기

메모리에 코드를 풀게 되면 주소창이 회색이 되는데 그때 Ctrl+a 를 하면 재분석해서 보여준다.

*

더보기

Ctrl+a : 코드 다시 읽기

메모리에 코드를 풀게 되면 주소창이 회색이 되는데 그때 Ctrl+a 를 하면 재분석해서 보여준다.

 Ctrl+a 후의 화면

마우스를 우클릭 하여 [Search for] > [All referenced text strings]를 눌러 문자열을 확인한다.

"EXE corrupted" 문자열을 확인할 수 있다.

더블클릭하여 "EXE corrupted"로 이동한다.

"EXE corrupted" 위에 있는 함수 004508C7에 들어가 내부를 확인해본다.

밑으로 내리다 보면 0x00450A7A에서 Registers 창의 DecrytKey를 찾을 수 있다.

그리고 0x00448298에서 Registers 창의 EXE's Key를 확인할 수 있다.

0x00448298의 Registers 창은 다음과 같다.

그런데 md5 해시 길이보다 pwd가 너무 짧게 나온다.

hex dump로 pwd를 확인한다.

이렇게 구한 DecrytKey와 EXE's Key를 각각 md5로 복호화해서 AuthKey를 완성시킨다.

 

clear!!