cgy12306
[reversing.kr] Ransomware 본문
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 연산 하기 전의 모습이다.
EDX에 FFFFFFEF가 들어가 있다.
두번째 XOR 연산을 한 후에 EDX에 FFFFFF10이 들어가 있는 것을 볼 수 있다.
암호화된 파일의 맨 왼쪽 텍스트를 보면 hex값이 계속 반복되는 걸 볼 수 있다. ‘.’을 기준으로 길이를 재보면 13바이트가 계속 반복된다. 그러면 키의 길이는 13글자가 된다.
readme.txt를 보면 복호화된 파일은 실행 파일이라고 한다.
정리해보자면 암호화되기전 파일이 암호화가 되었고, 복호화 시키려면
암호화된 파일과 키값을 XOR 연산시키고, 그 값을 0XFF와 XOR연산하면 복호화가 된다고한다.
그러면 우리는 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 파일을 system32와 syswow64에 넣으니 해결됐다.
키 값은 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 |