http://reversing.kr/challenge.php
미리 말하자면,,, 이 문제 푸는데 죽을 뻔 했다,,, 아침 10시부터 새벽 3시까지 이 문제만 보고 있었다,,
아 문제만 본 게 아니라 있는 풀이는 다 봤는데도 이해하기 너무 어려웠다
나의 실력으로는 버거웠지만 그래도 그만큼 얻은 것도 많은 문제,,, 그렇다고 다시 보고 싶지는 않다,,,
Auto Hot Key 2 도 당분간은 보고싶지 않다,,,
문제를 다운로드하면 ahk.exe파일과 readme.txt 파일이 존재한다.
일단 두 파일 모두 실행시켜 보았다.
텍스트 파일을 보니, 인증키를 얻으려면 decrypt key와 exe’s key를 원문으로 바꿔서 이어주면 되는 것 같다.
여기까지는 평화로웠다,,
일단 ahk.exe 파일의 정보를 확인해보았더니, upx 패킹이 된 상태인 것 같았다.
cmd 창을 열어서 언패킹을 진행해주었다.
언패킹을 잘했는데,, exe 파일을 실행시켰더니 출력되는 화면이 바뀌었다.
“EXE corrupted”를 찾아보니 exe 파일이 손상되었거나 열 수 없는 것이라고 하는데, 내가 한 짓은 upx 언패킹밖에 없었다,,,,
언패킹 하면 파일이 달라진다고 생각하였다.
그래서 일단 해당 에러와 흐름을 보기 위해서 언패킹 되지 않은, 다운로드했을 때의 순수한 그 자체의 파일을 가지고 디버거로 열어보았다.
디버거는 x32디버거를 사용하였다.
(나는 리버싱 왕왕왕왕왕왕 초보라서 디버거 사용법을 적당히만 알고 있었다,, 브레이크 포인트랑 디버깅,,, 그냥 대충만 알고 있었더니 이 부분에서 내 디버거만 안 되는 줄 알고 하루 종일 구글을 뒤졌다)
내가 너무 많이 헤매었기 때문에,, 정리해보려고 한다.
< 알아야 할 점 >
1. 패킹된 파일을 디버거로 열면 패킹되어 있는 상태이기 때문에 문자열이나 함수나 제대로 알아볼 수가 없다. 디버깅을 시작하면, 그제야 필요한 문자열들을 볼 수 있다.
2. 그럼 파일을 제대로 분석하기 위해서는 이미 디버깅 상태여야 하는데, 조금 찾아보니 디버깅 상태에서 브레이크포인트를 또 걸어서 F7, F8을 이용하여 분석해야 한다고 한다. 그.런.데. 이게 안된다,,, 키도 안눌리고 아무것도 안되었다,,, 여기에서 진짜 하루 종일 맴돌았는데, 디버깅 중인데 브레이크포인트를 걸고 재실행한다. 여기까지는 오케이,, 그런데 F2로 브레이크 포인트를 걸고 다시 실행해보니, 내 브레이크포인트가 사라지고 다시 패킹된 상태의 화면만 보임,, 여기서 대혼란이었는데, 한번만 더 해보자고 검색을 하던 도중,,, Hardware Breakpoint를 발견하였다,,, 이걸로 브레이크포인트를 걸었더니 F7, F8 모두 아주 잘 되었다,,ㅎ,,, 리버싱도 어렵지만 디버거도 어렵다,,,
위에서 정리한 것처럼 패킹된 파일을 가지고 x36 디버거로 파일을 열었고, 일단 내가 원하는 exe corrupted라는 문자열을 찾기 위해 실행(R)을 눌러서 문자열 찾기를 진행하였다.
생각해보니까 그냥 아래에 입력하면 되었는데, 나는 아주 성실하게 직접 찾았다,, ㅎ :)
해당 부분으로 이동해보았다.
그림 6에서는 점프 진행도가 잘렸는데 그래프 모드로 보면 아래와 같다.
우리가 원하는 대로 진행하기 위해서는 오른쪽 >AUTOHOTKEY SCRIPT<로 진행해야 한다.
결국 맨 위 노드에서 점프를 해야 하고, 이는 4508C7 함수에서 정해질 것 같다.
< 지나가던 상식>
오토핫키 스크립트는 오토핫키의 소스코드가 보관되어 있는 곳이라고 한다.
즉, 프로그램이 실행될 때 이 스크립트를 열어서 소스코드를 확인하면서 돌아가는 것이고,
결국 이 스크립트를 열 수 있으면 필요한 정보를 얻을 수 있다고 한다.
(여기까지 알고 나서, 그럼 AUTOHOTKEY SCRIPT안에 있는 값이 EXE’S KEY가 될 것이라고 예측하였다.)
결국 우리가 확인해야 할 것은 4508C7 함수와 AUTOHOTKEY SCRIPT가 된다
나는 AUTOHOTKEY SCRIPT를 먼저 확인하였다.
(이제 이어서, 여기부터 하드웨어 브레이크포인트를 써야 할 때가 왔다.
디버거를 다시 시작하고 진행하여도 그 자리로 돌아오고 싶다면,,, 기억하자,, “하드웨어 브레이크포인트,,”)
일단 AUTOHOTKEY SCRIPT아래에 있는 함수를 출력하는 부분에 하드웨어 브레이크 포인트를 걸고, 왼쪽 위의 진행(R)을 눌러주었다.
가운데의 박스에 브레이크 포인트를 걸었고, F8을 눌러서 하나씩 진행하였더니, 그 바로 아랫줄에서 오른쪽 위의 ECX값이 갑자기 바뀐다.
덤프로 따라가기로 따라가 보았더니 해시 값 같은 문제들이 담겨있는 것을 알 수 있었다.
해당 값이 EXE’S KEY라는 것을 예측할 수 있었고, 이제 DECRYPT KEY만 찾으면 된다.
EXE’S KEY : 54593f6b9413fc4ff2b4dec2da337806
이제 4508C7 함수 내부를 확인해보자.
위의 빨간 박스 부분에 이번에도 하드웨어 브레이크 포인트를 걸고 실행(R)을 눌렀고, 해당 위치에서 멈추는 것을 확인할 수 있다.
이제 F7을 눌러서 해당 함수 안으로 들어가 보았다.
한 줄씩 F8을 이용하여 진행하려고 10번은 넘게 시도해보았는데, 일단 반복문이 어마어마하고, F8을 쭉 누르고 있으면 갑자기 걸려서 진행이 안된다,,
그래서 해당 함수를 쭉 보다가 아래쪽에 cmp가 있는 부분과, 그 조금 위에 ecx에 esi 값을 옮기는 곳에 각각 일반 브레이크포인트를 걸고 F4를 눌러서 바로 이동하였다. (아래 그림)
그리고 다시 F8을 이용하여 하나씩 진행하던 중, 옆의 EBX 레지스터에 아주 해시값 같은 값들이 들어있는 것을 확인할 수 있었다.
여기에서 이게 DECRYPT KEY라고 확신을 하였다.
DECRYPT KEY : 220226394582d7117410e3c021748c2a
그럼 결국
Exe’s key = 54593f6b9413fc4ff2b4dec2da337806
decrypt key = 220226394582d7117410e3c021748c2a
을 구할 수 있고, 이를 https://www.md5online.org/md5-decrypt.html 사이트를 통해 각각 복호화하면
exe’s key = pawn
decrypt key = isolated
가 되고, readme.txt 파일에 따라 가운데를 비워 두고 isolated pawn라는 flag를 얻을 수 있다.
실행파일에 그대로 입력해보니 아무 일도 일어나지는 않았고, 사이트에서는 문제 풀이 인증이 된다.
한 문제가,,, 왜 이렇게 힘든가,,,
'Reversing > Reversing.kr' 카테고리의 다른 글
[Reversing.Kr] C SHOP 풀이 (0) | 2021.07.31 |
---|---|
[Reversing.Kr] Easy Unpack 풀이 (0) | 2021.07.31 |
[Reversing.Kr] ransomware 풀이 (0) | 2021.07.26 |
[Reversing.Kr] Easy ELF 풀이 (0) | 2021.07.26 |
[Reversing.Kr] Easy Crack 풀이 (0) | 2021.07.26 |