file, readme.txt, run.exe파일이 주어졌다.
readme.txt의 내용이다.
run.exe을 실행하면 Key값을 입력하게 되어있었고, 임의의 값인 abc를 입력하였더니 위와 같은 문구가 떴다.
PEiD를 통해 run.exe의 정보를 보았더니 UPX로 패킹이 되어있음을 알 수 있었다.
패킹되어있던 run.exe를 upx.exe를 통해 언패킹해주었다.
run.exe를 올리디버거를 통해 분석해보았다.
이 부분은 반복문을 돌면서 암호화된 파일을 읽어오는 부분이다.
이 부분은 입력 받은 key값을 이용해서 암호화된 파일을 복호화하는 부분이다.
복호화하는 방식을 정리하면 1. 파일에서 한 바이트 씩 가져온다. 2. key값과 XOR연산을 한다. 3. 0xFF와 다시 XOR한다.
key값을 구하기 위해 파이썬으로 XOR 역연산 코드를 짜기 위해서는 key의 길이를 알아야 하기 때문에 HxD을 통해 file의 반복되는 부분의 길이를 보았다.
93 9E 86 9C 97 9A CC 8C 93 9A 8B 8C 8F 총 13개가 반복되는 것을 알 수 있었다.
XOR역연산 코드를 짜기 위해서는 run.exe와 file에서 동일한 위치에 있는 13개 글자를 사용해야 하므로 file에서 DE C0 1B 8C 8C 93 9E 86 98 97 9A 8C 73을 사용하였다.
run.exe에서도 동일한 부분의 13글자인 4D 5A 90 00 03 00 00 00 04 00 00 00 FF를 사용하였다.
xor역연산을 하는 파이썬 코드를 완성하였다.
실행하였더니 letsplaychess값을 얻을 수 있었다.
위와 같이 run.exe에 key값을 입력해주었다.
file을 열어서 안의 값을 확인하기 위해 확장자를 exe로 변경해주었다.
file.exe를 열었더니 정답이 출력되었다.
'[CTF]Reversing.kr' 카테고리의 다른 글
Reversing.kr - Easy Keygen (0) | 2023.12.29 |
---|---|
Reversing.kr - Easy Unpack (0) | 2023.12.29 |