본문 바로가기

Reversing/Reversing.kr

[Reversing.Kr] ransomware 풀이

http://reversing.kr/challenge.php

 

Reversing.Kr

Copyright © 2012-2021 Gogil All Right Reserved.

reversing.kr


< x32Dbg + IDA >

 

파일이 패킹되어 있어서 upx를 이용하여 unpack부터 해주었다.

 

함께 압축되어 있는 readme.txt 파일은 아래와 같다. FILE 파일을 복호화하라는 뜻 같다.

 

unpack 한 run.exe파일을 실행시켜서 아무 키나 입력해보니 아래와 같고, 아주 나쁜놈이란다.

Key 값을 찾아야 하는 것 같다.

 

 

X32dbg와 IDA를 이용하여 분석해보았다.

IDA는 위에 더미 노드 부분이 너무 커서 안 열린다고 하는데, 그래도 x32보다 노드의 진행 방향 보기가 쉬워서 참고했다.

(글을 쓰면서 다시 실행해보니, 안 보여주는 부분을 더블클리하니까 억지로라도 보이긴 한다!)

문자열 찾기를 통해 “KEY”부분으로 이동하였고, 첫 번째 노드를 보니, KEY로 입력한 부분이 44D370에 저장되는 것으로 예측할 수 있다.

 

이어서 보다 보니

아래에 반복문 2개가 있는데 그 부분이 중요한 것 같아서 해당 부분만 가져와서 하나씩 보았다.

 

feof는 주어진 stream(FILE)에 대해 파일의 끝 플래그가 설정되었는지 여부를 표시한다고 하는데, 찾아보니 파일의 끝 위치를 확인하는 함수라고 생각하면 될 것 같다.

Fgetc는 파일에서 글자를 하나씩 읽는 함수라고 한다.

 

간단하게 보면(오른쪽 아래 노드), stream을 eax에 저장하고, eax에 저장된 stream을 5415B8이라는 위치에 저장하고 있다.

 

 

 

다음 반복문을 보겠다.(오른쪽 중간 노드)

 

5414B8에는 STREAM이 저장되어 있고, 위에서 본 것과 같이 44D370에는 KEY가 저장되어 있다. 정리해서 보면, FILE의 한 바이트와 KEY의 한 바이트를 가져와서 XOR 하고 또다시 0XFF와 XOR연산 후 다시 5414B8에 저장하는 형태를 취하고 있으며, 정리하면

(FILE ^ KEY) ^ 0XFF 이다.

 

여기까지 하고 생각해보니, readme.txt 파일에서 file의 확장자가 exe 임을 힌트로 알려준 것 같아서, Hdx로 열어보니 아래와 같았다.

 

 pe 파일의 특성상 앞의 MZ 부분이 동일할 것이라고 생각해서 파이썬 코드를 활용하였다.

 

 

위와 같이 letsplaychessl 이 나오는데 계산해보니 letsplatchess 까지가 답인 것 같았다.

 

run.exe 파일을 실행시킨 후 letsplaychess를  입력하면 파일을 복호화했다고 뜬다.

 

찾아보니 file도 upx를 통해 언패킹을 해줘야 한다고 해서 언패킹을 하고 HxD로 열어서 그냥 key 문자열을 찾아보았다.

잘 unpack 된 것이 보이고, key도 아주 잘 보인다.

 

 

아주 찾기 쉽게 그냥 대놓고 나와있어서 flag를 성공적으로 찾았다!

'Reversing > Reversing.kr' 카테고리의 다른 글

[Reversing.Kr] Auto Hot Key1 풀이  (0) 2021.07.31
[Reversing.Kr] C SHOP 풀이  (0) 2021.07.31
[Reversing.Kr] Easy Unpack 풀이  (0) 2021.07.31
[Reversing.Kr] Easy ELF 풀이  (0) 2021.07.26
[Reversing.Kr] Easy Crack 풀이  (0) 2021.07.26