-->

[reversing.kr] AutoHotkey1 풀이

이번 문제는 오토핫키 실행파일에서 key값들을 찾아내는 문제로, CRC 체크하는 부분을 하나하나 우회해주어야 되는 문제인 줄 알고 하루 온종일 삽질했던 문제이다. 

 

 

reversing.kr AutoHotkey1 풀이

주어진 오토핫키 실행 파일을 실행시켜보면, 아래와 같이 무언가 입력값을 받고 있다.

 

 

 

먼저 오토핫키에 대해 아주 간단히 살펴보면, 오토핫키는 매크로 프로그램 중 하나이다. 오토핫키 스크립트 확장자는 .ahk이고 오토핫키 프로그램을 설치하면 Compiler 폴더의 Ahk2Exe를 사용해서 ahk를 exe로 컴파일하게 된다.

 

 

 

그리고 컴파일된 exe파일은 원래라면 아래와 같이 RCdata 부분에서 평문 스크립트를 확인할 수 있다. 이때, 디컴파일을 막기 위해 패스워드를 따로 지정해서 컴파일을 하는 경우도 있는데 이번 AutoHotkey1 문제에서 묻고있는 것이 바로 이 패스워드(복호화 키)를 알아내는 것이다. 

 

 

 

upx 패킹이 되어있기 때문에 언팩을 해준 후 살펴보면, 아래와 같이 'EXE corrupted'라고 메시지 박스가 뜨게 된다.

 

 

 

해당 메시지가 호출되는 함수 내부를 보면 특정 함수 반환값을 조건으로 "EXE corrupted" 메시지 창을 띄우고 종료하는 분기와 ">AUTOHOTKEY SCRIPT<" 문자열을 사용하는 함수를 호출하는 분기(EXE에서 오토핫키 스크립트를 추출)로 나뉘고 있다. sub_4508C70이 CRC 체크를 진행하는 함수인 것을 알 수 있다.

 

 

 

그래서 아래와 같이 해당 함수를 분석하면서 하나하나 우회하고 있었는데 계속 마지막 부분에서 Access Violation이 발생했다. 생각해보니 애초에 CRC 체크를 하는데 언팩한 파일이기 때문에 에러가 발생할 수밖에 없었다. 

 

 

 

그냥 정상 실행되는 패킹된 파일로 분석하면 되는 거였다. 그러면 "EXE corrupted"는 발생하지 않고 중간에 메모리 관련 에러도 발생하지 않고 sub_4508C70 함수 내부 끝부분 코드 ebx에서 복호화 키를 확인할 수 있다. (파일 검증 함수 ~ >AUTO~ 문자열 사이에 복호화키가 나와야 한다고 생각했고 엄청 키처럼 생겼기 때문에 복호화 키라고 판단했다)

 

 

 

그리고 450C9F 함수 호출 후에 추출된 스크립트 코드를 확인할 수 있고 코드에서 EXE's key를 확인할 수 있다.

 

 

'리버싱 > reversing.kr' 카테고리의 다른 글

[reversing.kr] PEPassword 풀이  (0) 2020.03.19
[reversing.kr] CSHOP 풀이  (0) 2020.03.19
[reversing.kr] WindowsKernel 풀이  (0) 2020.03.15
[reversing.kr] Easy ELF 풀이  (0) 2020.03.15
[reversing.kr] Twist1 풀이  (0) 2020.03.13

댓글

Designed by JB FACTORY