문제 파일을 보면 다음과 같이 암호화된 파일이 제공된다.




해당 파일이 암호화되는 로직을 보면 다음과 같다.



암호화 하는 로직이 상당히 심플해보이는데 rand 함수가 custom rand 함수였다. srand 함수 인자인 0x3039값으로 초기 값을 세팅한 후 아래 rand함수에서 다음과 같은 연산을 통해 랜덤 값을 추출해 낸다.



해당 rand함수를 파이썬에서 동일하게 적용해 준 뒤 아래와 같이 복호화 코드를 짜서 파일을 복호화 했다.


import os


def rand(data):

    result_1 = ((214013 * data & 0xffffffff) + 2531011) & 0xffffffff

    result_2 = result_1>>16&0x7fff

    return [result_1,result_2]



for (path, dir, files) in os.walk("C:\\root_ransomware"):

    for filename in files:

        filePath =  path+"\\"+filename

        result = ""

        xor_value = 0x7f

        data = 0x3039

        f1 = open(filePath, "rb")

        fileContents = f1.read()

        f1.close()

        for i in range(0, len(fileContents)):

            tmp = rand(data)

            data = tmp[0]

            tmp1 = ord(fileContents[i])

            Content = chr(ord(fileContents[i]) ^ xor_value)

            Content = chr((ord(Content) - tmp[1] % 0xff - 1) & (2 ** 32 - 1) & 0xff)

            xor_value = xor_value ^ tmp1

            result += Content

        createPath = filePath+".ext"

        f = open(createPath, 'wb')

        f.write(result)

        f.close()



복호화된 파일을 보면 각 폴더별로 png,py,exe,jpeg 파일형태로 존재하는데 각 파일별로 한글자씩 플래그를 뿌려준다.


각 값들을 순서대로 조합하면 다음과 같이 플래그가 나온다.


Flag = FLAG{Danger_encrypt}


'CTF > Writeup' 카테고리의 다른 글

INSOMNIHACK CTF TEASER 2019 Phuck2 :(  (0) 2019.01.22
Insomnihack CTF Teaser 2019 l33t-hoster  (0) 2019.01.21
ROOT CTF 2018 CrackMe  (0) 2019.01.01
ROOT CTF 2018 ROOT_Process_2  (0) 2018.12.30
ROOT CTF 2018 ROOT_Process_1  (0) 2018.12.30
블로그 이미지

JeonYoungSin

메모 기록용 공간

,