티스토리 뷰
Reversing.kr의 문제 Ransomware입니다.
문제 파일을 다운로드 받아보면,
run.exe, readme.txt, file이라는 이름의 파일들이 있습니다.
readme.txt 파일을 열어보니..
"복호화 한 file은 EXE 형식의 파일이다."라고 써있는 것 같습니다.
run.exe를 실행시켜보겠습니다.
어떤 나쁜 사람이 파일을 암호화했다네요.
먼저 PEID로 run.exe 파일의 정보를 보겠습니다.
UPX로 패킹이 되어있네요.
올리디버거로 열어서 직접 진짜 코드가 있는 곳으로 가서 분석해보겠습니다.
윗부분은 반복문을 돌며 암호화된 파일을 읽어오는 부분입니다.
윗부분은 입력 받은 key값을 이용해서 암호화된 파일을 복호화하는 부분입니다.
복호화하는 방식을 정리하면 파일에서 한 바이트씩 가져와서 key값과 XOR 연산을 시키고, 다시 0xFF와 XOR 시키는 방식입니다.
위 연산을 이용해서 key값을 구하면 될 것 같습니다.
먼저 key값의 길이를 구하기 위해서 HxD로 file 파일에서 반복되는 부분의 길이를 구하겠습니다.
file 파일을 확인해보니 일정하게 13개씩 계속 반복되는 것을 확인했습니다.
그렇다면 key값의 길이는 13글자겠네요.
파이썬으로 file 파일과 run.exe 파일에서 동일한 위치에 있는 각각의 13글자를 이용해서 XOR 역연산 코드를 짜보았습니다.
filefile = [0xDE, 0xC0, 0x1B, 0x8C, 0x8C, 0x93, 0x9E, 0x86, 0x98, 0x97, 0x9A, 0x8C, 0x73]
run = [0x4D, 0x5A, 0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF]
for i in range(0, 13):
xor1 = filefile[i] ^ 0xFF
xor2 = run[i] ^ xor1
print chr(xor2),
실행시켜보면..
key값이 나옵니다.
run.exe 파일에 구한 key값을 입력해보겠습니다.
파일을 복구했다네요.
하지만 제가 입력한 key값이 옳지 않다면 file이 더 복잡해지게 복호화된다고 합니다.
그럼 이제 file의 확장자를 exe로 바꿔준 뒤 실행시켜보겠습니다.
정답이 출력되었습니다!!
'Reversing > Reversing.kr' 카테고리의 다른 글
[Reversing.kr] AutoHotkey1 풀이 (0) | 2018.01.05 |
---|---|
[Reversing.kr] Direct3D FPS 풀이 (1) | 2018.01.05 |
[Reversing.kr] CSHOP 풀이 (0) | 2017.12.27 |
[Reversing.kr] 2017-12-27 진행 현황 (0) | 2017.12.27 |
[Reversing.kr] Flash Encrypt 풀이 (0) | 2017.12.25 |
- Total
- Today
- Yesterday
- Level 06
- CodeEngn
- Basic RCE
- Level 03
- 안드로이드
- wargame
- C#
- Write-up
- unity2d
- Advance RCE
- xcz.kr
- reversing.kr
- 안드로이드 멘토링
- Programming
- Reversing
- Level 05
- pwnable
- 유니티
- HackingCamp
- 멘토링
- Level 04
- ftz
- hackerschool
- Level 02
- Unity
- c++
- 17th HackingCamp CTF
- 풀이
- Level 01
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |