Reversing.kr Ransomware
by St1tch실행을 하면 전형적인 랜섬웨어 처럼 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파일을 실행시키면 정답이 나온다.
블로그의 정보
튜기's blogg(st1tch)
St1tch