Ransomware

Given

Flag

File Content Note
Upload.zip
-> flag.enc Encrypted PNG
-> task.pyc Compiled python code

Analysis

Using uncompyle6 to decompile task.pyc gives you the following file:

(lambda data, key, iv: if len(data) != 0:
(lambda key, iv, data, AES: open('flag.enc', 'wb').write(AES.new(key, AES.MODE_CBC, iv).encrypt(lambda x: x + b'\x00' * (16 - len(x) % 16)(data))))(data[key:key + 16], data[iv:iv + 16], open('flag.png', 'rb').read(), __import__('Crypto.Cipher.AES').Cipher.AES) # Avoid dead code: lambda fn: __import__('os').remove(fn)('task.py'))(__import__('requests').get('https://ctf.bamboofox.tw/rules').text.encode(), 99, 153)

Implementation

Reimplementing it in python code with the inFile swapped for the outFile and the encrypt swapped with the decrypt:

outerdata = requests.get('https://ctf.bamboofox.tw/rules').text.encode()
outerkey = 99
outerIV = 153

innerkey = outerdata[outerkey:outerkey + 16]
innerIV = outerdata[outerIV:outerIV + 16]

inFile = open('flag.enc', 'rb').read()
realInFile = lambda x: x + b'\x00' * (16 - len(x) % 16)
outFile = open('flag.png', 'wb')
outFile.write(AES.new(innerkey, AES.MODE_CBC, innerIV).decrypt(inFile))

Looking at the decrypted flag.png:

Flag

Opening the File in HXD and looking for the PNG ending tag IEND we see that it appears twice, first at 0xC566A, then again at 0x125611. Copying the bytes from after the first IEND til after the second IEND and saving as a new file give us:

Flag

Flag found! flag{345y_l4_h4iy44444444}