-->

[reversing.kr] ransomware 풀이

반응형

PE 구조를 생각하고 풀면 좋은 문제이다.

 

 

 

reversing.kr ransomware 풀이

이번문제는 랜섬웨어 문제이다. 설마 뭐 진짜 내파일을 암호화할꺼라고 생각하진 않았지만 혹시 모르기 때문에 그냥 가상환경에서 진행했다. run 파일을 실행시키면 아래와 같이 zip파일에 들어있던 파일 file을 암호화했다고 협박(?) 메시지가 나온다. 

 

 

 

처음에 key 문자열이 쓰인 함수를 찾아서I 보는데 함수 시작 부분에 아래 반복 코드가 엄청 크게 있다. 뭔가 했는데 그냥 파일 크기를 키우고 혼선?을 주기 위함인 것 같으니 딱히 신경쓰지 않아도 문제 풀이에는 지장이 없다.

 

 

 

위 코드를 빼면 함수 자체는 별로 크지 않다. 반복문이 계속 나오게 되는데 첫번째 반목문에서는 암호화된 file 데이터를 1바이트씩 가져와서 0x5415B8에 쓴다. 그리고 feof 로 파일 끝인지 확인하고 끝이면 반복문을 탈출한다.

 

 

 

실제로 0x5415B8을 확인해보면 파일 데이터가 그대로 쓰인 것을 볼 수 있다.

 

 

 

그리고 두번째 반복문에서는 읽은 암호화된 file 데이터를 한바이트씩 가져와서 (file[i] ^ key[i]) ^ 0xFF 로 복호화하고 다시 0x5415B8에 쓴다.

 

 

 

 

여까지 진행하고 나서 그래...  de_file[i] = en_file[i] ^ key[i] ^ 0xFF  -> key[i] = en_file[i] ^ de_file[i] ^ 0xff 인건 알겠는데, 근데 원본 파일을 모르는데 맞는 키값을 어떻게알지..?

 

여기서 뇌정지가 오고 더이상 회로가 돌지 않아 한참 안풀다가 다시 보는데 Readme를 다시 보다가 알았다. file이 exe래서 별 대수롭지 않게 여겼는데 exe 파일이면 똑같이 같고 있는 고정 데이터를 이용하는 것이었다. Dos Stub 같은...? 먼저 키 길이를 알아야 하는데 만약에 원본 데이터가 0xaa 0xaa 0xaa ... 반복이라면 key값만 달라지기 때문에 key의 길이만큼 동일 데이터가 반복될 것이다. 정상 exe 파일에 null 패딩이 있는 위치쯤에서 0xD 길이만큼 반복되는 데이터가 있었다.

 

 

 

key 길이는 0xD라 가정하고 Dos stub 부분과 같은 위치의 암호화된 데이터를 사용해 key 값을 계산해주었다.

 

 

 

아래와 같이 key값이 구해진다.

 

 

 

근데 이게 정답값이 아니다. 키값을 주고 파일을 복호화시킨 후 exe 확장자를 주고 실행시켜봤는데 ~~.dll 파일이 없다고 하는데 다운받기 귀찮아서 upx 패킹 풀고 IDA에서 문자열로 확인해주었다.

 

 

'리버싱 > reversing.kr' 카테고리의 다른 글

[reversing.kr] Easy ELF 풀이  (0) 2020.03.15
[reversing.kr] Twist1 풀이  (0) 2020.03.13
[reversing.kr] Direct3D FPS 풀이  (0) 2020.03.11
[reversing.kr] Position 풀이  (0) 2020.03.10
[reversing.kr] ImagePrc 풀이  (0) 2020.03.10

댓글

Designed by JB FACTORY