문제가 주어졌다.
3개의 파일이 있다.
먼저 run.exe 파일 패킹 정보를 확인했다.
upx로 패킹되어 있는 것을 알 수 있다.
run.exe 파일을 언패킹 했다.
왼 : 언 패킹 전
오 : 언패킹 후
미묘한 차이가 있다.
그냥 file이 있길래 먼저 에디터로 열어봤다.
왠지 암호화가 되어있는 것 같다.
전에 풀었던 문제가 이런 비슷한 문제가 있었는데, 정상 파일 시그니처에 리소스를 바꾸는 게 생각났다.
exe 파일을 복호화 하라고 했으니 exe 파일인 것 같다.
파일을 exe로 바꾸고 pe 정보를 봤는데 나오지 않았다.
아무래도 시그니처가 암호화 되어있어서 그런 듯
복호화를 해보자
upx 로 run.exe가 패킹되어있었으니 얘도 upx일까 싶다.
우선 세부 함수를 보자.
문자열은 이렇게 필터링 되어있다.
file이 수상해서 세부 내용을 봤더니 파일을 rb, wb를 수정하고 있는 것을 알 수 있었다.
파일을 오픈해서 작업을 수행하고 저장한다.
뭔가 직접 실행해봐야 감이 더 잘 잡힐 것 같아서 실행해봤다.
뭔가 내부 데이터가 바뀐것 같다.
아까는 De 어쩌고로 시작했는데 값이 바뀐것을 알 수 있다.
뭔가 ... 헤더 시그니처가 제대로 나오는 키 값이 있는 것 같다.
키 값으로 인해 내부 데이터가 변환되는 것을 보니 run.exe , file 과 키 값이 동시에 연산되는 구조인 것 같다.
주요 알고리즘 함수를 찾은 것 같다.
입력한 키 값인 12345가 들어갔고, xor 연산을 2번 하고 있다.
file ^ Key ^ ff 인 것으로 추정된다.
이 연산을 위해 코드를 짜봤다
exe='4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00'
en_exe='DE C0 1B 8C 8C 93 9E 86 98 97 9A 8C 73 6C 9A 8B 34 8F 93 9E 86 9C 97 9A CC 8C 93 9A 8B 8C 8F 93'
key =''
exe = exe.split(' ')
en_exe=en_exe.split(' ')
for i in range(len(exe)):
key += chr((int(en_exe[i], 16) ^ 0xff) ^ int(exe[i], 16))
print(key)
모든 값을 다 해보기엔 무리가 있고, 헤더 부분만 봐도 될 것 같아서 헤더 데이터만 가져왔다.
letsplaychess가 반복되는 것을 봐서는 이게 키 값인 것 같다.
file 이 잘 복호화 되었다.
예상대로 exe 파일이었다.
파일명 뒤에 .exe를 입력하고 저장하여 실행해보자.
실행했더니 위와 같은 오류가 났다.
msvcr100d.dll 파일이 없어서 일어난 오류이다.
https://www.dll-files.com/msvcr100d.dll.html
위 링크에서 다운받고, C:\Windows\SysWOW64\ 경로에 저장하면 해결된다.
이게 최종 값인 것 같다.
Colle System
'Reversing' 카테고리의 다른 글
[Reversing.kr] PEPassword (0) | 2023.05.28 |
---|---|
[Reversing.kr] HateIntel (0) | 2023.05.28 |
[Reversing.kr] Easy ELF (0) | 2023.05.28 |
[Reversing.kr] Replace (0) | 2023.05.28 |
[Reversing.kr] Music player (0) | 2023.05.26 |