CTF/리버싱

[2020CCE] Easyransom - 리버싱 / IDA / HxD / XOR

SecurityMan 2022. 11. 4. 11:00

 

2020년에 진행되었던 국정원 주최 사이버공격방어대회

 

묵혀놨던 Write Up을 이제야 포스팅 해 본다.

 

반응형

 

제목에서 알 수 있듯이

 

이번 문제는 랜섬웨어와 관련된 문제이다.

 

랜섬웨어는 몸값을 뜻하는 Ransom과 Software(소프트웨어)가 더하여진 합성어로

 

컴퓨터에 저장된 문서파일이나 사진 등을 암호화하고,

 

복호화하는 대가로 몸값을 요구하는 악성코드를 말한다.

 

 

문제파일로 두개의 파일이 주어진다.

 

하나는 easyransome.exex.exe 파일이고

 

다른 하나는 flag.txt.easyransom 파일이다.

 

exe 파일이 랜섬웨어 역할을 하는 파일인것 같고,

 

flag.txt.easyransom 파일은 flag.txt 파일이 암호화되어서

 

easyransom 으로 확장자가 바뀐듯 하다.

 

 

암호화된 파일을 HxD로 열어보았다.

 

역시나 알아볼 수 없는 문자들로 이루어져 있다.

 

 

IDA 라는 디스어셈블러를 이용해 exe 파일을 분석해보았다.

 

가장 먼저 main 함수를 살펴봤다.

 

main 함수에서는 MessageBoxA 를 이용해 Welcometo easyransom! 이라는 문구를 출력시키고

 

해당 경로에 있는 파일명을 가져와 검사를 한다.

 

만약에 파일 이름(확장자)에 easyransom 이라는 단어가 없다면,

 

sub_401040 함수를 실행시킨다.

 

확장자가 easyransom 이 아닌 파일은 아직 암호화가 되지 않은 파일로 간주하고

 

암호화를 시키기 위해 sub_401040 함수를 실행하는듯 하다.

 

 

이 부분이 sub_401040 함수에서 암호화를 수행하는 부분이다.

 

먼저 v5 변수를 살펴보자

 

v5 = (Time ^ BYTE3(Time)) + (BYTE1(Time) ^ BYTE2(Time));

 

시간정보를 가져와서 뭔가 연산한 뒤 v5 변수에 집어넣는것을 볼 수 있다.

 

BYTE1, BYTE2, BYTE3 라는 함수가 보이는데

 

이건 쉽게 생각해서 0xaabbccdd 를 기준으로 생각해 봤을때

 

  • HIBYTE = 0xaa
  • BYTE3 = 0xaa
  • BYTE2 = 0xbb
  • BYTE1 = 0xcc
  • LOBYTE = 0xdd

 

이렇게 생각하면 된다.

 

결국 시간정보를 가져오고, 그 시간정보를 쪼갠 뒤,

 

쪼갠 값과 원래 시간정보를 XOR( ^ ) 연산해서 어떤 값을 만드는 것이다.

 

그리고 나서 파일을 앞에서부터 읽으면서 만들어낸 v5와 XOR 한 뒤

 

.easyransom 확장자를 붙혀 새로운 파일을 생성하고 있다.

 

복호하를 하려면 Key 값을 알아야 하는데

 

Key 값이 시간정보이고, flag.txt.easyransom 파일이 언제 생성되었는지 정확히 모르니

 

Key 값을 알아낼 수 가 없었다.

 

 

sub_401040 함수 위쪽에 

 

변수를 정의한 부분에서 힌트를 좀 얻었는데

 

Key 값을 저장하는 변수인 v5 가 char (문자형) 형태의 변수였다.

 

해당 변수에 문자가 저장되려면

 

0x00 ~ 0xff 사이의 값이 오지 않을까 라고 생각했고

(ASCII 코드 범위)

 

 

CyberChef(https://gchq.github.io/CyberChef)에서 flag.txt.easyransom 파일을

 

XOR Brute Force 해본 결과

 

Key 값이 0x01 일때 플래그 값이 나오는 것을 확인했다.

반응형