http://reversing.kr의 AutoHotkey2 문제를 풀어보도록 하자.
문제를 클릭하면 AHK2.zip 파일이 다운받아진다.
zip파일을 풀고 readme.txt 파일을 열면 다음과 같은 내용을 확인할 수 있다.
ahk2.exe파일을 그냥 실행시키면 "EXE corrupted"라는 메세지 박스가 뜬다.
AutoHotkey1 문제처럼 OEP로 이동한 후
마우스를 우클릭 하여 [Search for] > [All referenced text strings]를 눌러 문자열을 확인한다.
"EXE corrupted" 문자열을 확인할 수 있다. 더블클릭하여 "EXE corrupted"로 이동한다.
프로그램을 실행하면 함수 004508C7 내에서 crc체크에 걸려서 exe corrupted이라는 문자열을 출력하게 된다.
따라서 "EXE corrupted" 위에 있는 함수 004508C7에 들어가 내부를 확인해본다.
이 부분이 CRC 체크를 진행하는 함수의 반복문이다.
해당 코드를 분석해보면
CALL AHK2.00458C2D 함수를 통해 파일의 처음부터 1바이트씩 값을 가져와
이 값을 토대로 CALL AHK2.00450F95 함수에서 CRC 체크섬값을 만든다.
이 때 반복문을 탈출하는 값은 00032A1F이다.
HxD로 00032A1F를 찾아보려고 했지만 마지막 4바이트 값은 00032A1F가 아니었다.
그래서 다음 로직을 분석해보았다.
반복문을 빠져나오면 구해진 체크섬값과 AAAAAAAA를 XOR한 값을 EBP-10의 값과 비교를 한다.
EBP-10값을 보면 39A464194라는 값이 있는데
ahk2.exe 파일의 마지막 4바이트 값이라는 것을 확인할 수 있다.
그리고 명령에서는 EAX와 522D85D4를 비교한다는 것을 알 수 있다.
따라서 다음과 같이 바꿔준다.
이렇게 하면 문제가 풀릴 줄 알았는데 똑같이 "EXE corrupted" 메시지 박스가 뜬다.
그래서 Autohotkey 1 문제와 hxd로 비교해봤더니 4바이트가 추가로 더 달랐다.
Autohotkey 1 : 00 28 03 00 F9 34 87 43
Autohotkey 2 : 90 83 9A DC D4 85 2D 52
따라서 ahk2.exe파일에 00 28 03 00도 체크섬해주면 된다.
그런데 또 "EXE corrupted" 메시지 박스가 뜬다.
ollydbg로 다시 확인해보니 체크썸이 바뀌었다.
따라서 마지막 4바이트를 다시 33 C6 2B 36으로 바꿔준다.
파일을 저장하고 실행시키면 파일이 제대로 실행된다.
플래그가 안나오고 문장이 나온다.
구글에 검색하면 단어가 보인다.
이것을 인증하면 문제가 풀린다.
clear!!
'2. Reversing (리버싱) > 1) Write UP' 카테고리의 다른 글
[2020.06.02] Reversing.kr | Replace 문제 (0) | 2020.06.02 |
---|---|
[2020.06.02] CSAW 365 | CSAW Reversing 1 (0) | 2020.06.02 |
[2020.05.14] CSAW365 | Gametime (0) | 2020.05.14 |
[2020.05.14] CSAW365 | Gametime (0) | 2020.05.14 |
[2020.04.14] Reversing.kr | ImagePrc 문제 (0) | 2020.04.26 |