Reversing.kr Ransomware

Reversing/리버싱 문제풀이

2015. 12. 8. 18:30



실행을 하면 전형적인 랜섬웨어 처럼 key값을 가지고 복호화를 하는 것처럼 생겼다.

차이점이라고 하면 원래 랜섬웨어는 모든 디렉토리를 순회하며 암호화를 하지만 이 문제의 경우에는 한개의 file만 암호화가 된 상태이다.



file은 암호화가 되어있으며 복호화를 시키면 exe형식이다.




올리디버거로 스트링을 보면 파일을 읽고쓰는 부분을 금방 찾을 수 있다.



ECX+5415B8에 파일을 읽어 한바이트씩 저장시킨다.




암호화를 시키는 핵심 부분이다.

간단하게 되어있는데,

파일에서 한바이트씩 가지고 와서 key값의 순서대로 xor시킨 후 ,

그 값을 다시 0xff와 xor연산 후 다시 덮어씌운다.

즉 file[i] = file[i] ^ key[i] ^ 0xff 대충 이런식이다.





암호화를 한 후 값을 다시 edx+5415b8(파일 포인터)에 저장을 시킨다.


일단 이 문제에서 먼저 찾아야 할 것은 key의 길이이다.

일단 exe파일이기 때문에 file을 Hxd로 열어 널패딩이 있을 만한 곳에 몇 바이트가 반복되는지 확인을 했다.




널 패딩이 있을 만한곳에 0xD만큼 특정 값이 반복되는 것을 볼 수 있었다.

따라서 키값은 0xD이다.

이를 토대로 헤더부분에 0xD만큼 비교해서 키값을 역연산 하였다.

 

우선 정확한 오프셋을 계산하였다.

나는 위의 오프셋 중에 0x4e ~ 0x5a를 기준으로 key값을 계산하였다.



정상적인 exe파일의 0x4e ~ 0x5a 부분


암호화된 파일의 0x4e ~ 0x5a 부분




파이썬으로 역연산하는 식을 간단하게 짯다.



위 파이썬코드를 실행시키면 key값이 나온다.



key값을 구하는 것과 복호화를 하는게 거의 같아서 그냥 file을 decrypt하는 코드도 짯다.




추출된 exe파일을 실행시키면 정답이 나온다.