cgy12306

[reversing.kr] Ransomware 본문

Reversing

[reversing.kr] Ransomware

cgy12306 2019. 7. 15. 22:36

reversing.kr에서 ransomware파일을 다운 받았다.

run.exe 파일을 실행시켜 보자.

 

 

올바른 key를 입력하면 해독이 되고, 다른 key를 입력하게 되면 파일의 내용이 더 손상된다는 내용이다.

파일을 ollydbg로 분석해봤더니 메인 함수를 찾기가 어려워서 인터넷에 검색을 했다.

모든 파일을 분석할 때에는 그 파일이 패킹이 돼있는지 확인을 하는 것이 기본이라고 한다.

패킹이란 파일코드에다가 압축을 거는 기법이다. 압축된 파일 그 자체도 실행 파일이다.

Peid 툴이나 Exeinfope 툴을 이용해서 파일이 패킹이 되어있는지 확인할 수 있다.

 

 

upx로 패킹이 되어있는 것을 확인할 수 있고, 언패킹 하는 방법은 upx.exe를 설치하고 -d 옵션으로 언패킹 할 수 있다.

 

언패킹이 완료되었다.

다시 확인해보면

 

패킹이 안되어 있다는 걸 확인할 수 있다.

다시 ollydbg로 확인해보자.

 

파일을 위 아래로 잘 살펴보면 메인 함수로 추정되는 부분을 확인할 수 있다.

 

여기 getc 부분을 보면 파일을 한 글자씩 얻어오는것을 볼 수 있다.

엄청 많이 반복되기 때문에 아래에 브레이크 포인트를 걸어줘서 브레이크 포인트까지 실행시켜서 빠져나온다.

 

이 부분이 이 랜섬웨어 파일의 핵심 부분인 것 같다.

파일을 한 바이트씩 읽어와서 입력한 키 값을 XOR 연산해주고, 그 연산한 값을 다시 0xFF XOR연산하는 방식이다.

 

첫번째 XOR 연산하기 전에 ECX값이 FFFFFFDE이다.

 

XOR 연산후에 ECX 값이 FFFFFFEF로 바뀐 것을 확인할 수 있다.

 

 

 

 

두번째 XOR 연산 하기 전의 모습이다.

EDXFFFFFFEF가 들어가 있다.

 

 

 

 

두번째 XOR 연산을 한 후에 EDXFFFFFF10이 들어가 있는 것을 볼 수 있다.

 

 

 

 

 

 

암호화된 파일의 맨 왼쪽 텍스트를 보면 hex값이 계속 반복되는 걸 볼 수 있다. ‘.’을 기준으로 길이를 재보면 13바이트가 계속 반복된다. 그러면 키의 길이는 13글자가 된다.

 

readme.txt를 보면 복호화된 파일은 실행 파일이라고 한다.

정리해보자면 암호화되기전 파일이 암호화가 되었고, 복호화 시키려면

암호화된 파일과 키값을 XOR 연산시키고, 그 값을 0XFFXOR연산하면 복호화가 된다고한다.

그러면 우리는 XOR 연산의 특성을 이용하면 될 것 같다.

  • XOR은 두개의 값이 같으면 0, 다르면 1을 연산한다. XOR을 연산하면 다시 원래 값이 나오게 된다.
  • A XOR B = C  =>  C XOR B = A, C XOR A = B

이 점을 이용해보면 암호화된 파일을 0xFF와 다시 연산을 취해주고, 암호화가 되기 전 파일과 XOR 연산을 해주게 되면 키 값을 얻을 수 있게 된다.

 

암호화되기 전의 파일 내용은 알 수 없지만 복호화된 파일은 실행 파일이라고 한다.

 

각각의 파일들은 고유의 포맷형식을 가지고 있는데 이 포맷형식을 시그니처라 한다. 실행파일은 헤더에 MZ가 붙는다. 이것을 이용해 복호화 해보자.

 

키 길이가 13바이트이므로 run.exe의 맨 앞부터 13바이트를 뽑고, 암호화된 파일도 run.exe와 같은 위치부터 13바이트를 뽑아낸다.

 

python 코드로 키 값을 알아내는 코드를 작성하자.

 

키 값은 letsplaychess이다.

 

file.exe로 확장자로 바꿔서 실행시키면 이런 오류가 뜬다.

MSVCR100D.dll 파일을 system32syswow64에 넣으니 해결됐다.

 

키 값은 Colle System이다.

뿌-듯

'Reversing' 카테고리의 다른 글

Direct3D  (0) 2019.07.30
ImagePrc  (0) 2019.07.30
Easy Unpack  (0) 2019.07.30
Easy Keygen  (0) 2019.07.30
Easy CrackMe  (0) 2019.07.30
Comments