⭐Revers(ibl)e Engineering [1/2]
404CTF{e9d749db81e9f8caf745a5547da13579}
Challenge
Préparation
import socket
import os
from io import BytesIO
from zipfile import ZipFile
HOST = 'challenges.404ctf.fr'
PORT_BINARY = 31998
PORT_SOLVE = 31999
class Binary:
FOLDER = 'out'
@staticmethod
def fetch() -> 'Binary':
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((HOST, PORT_BINARY))
archive = b''
while True:
data = client.recv(4096)
if len(data) == 0:
break
archive += data
archive = ZipFile(BytesIO(archive))
crackme = archive.read('crackme.bin')
token = archive.read('token.txt').decode()
return Binary(crackme, token)
@staticmethod
def open(filename):
token = filename.split('_')[1][:-4]
with open(os.path.join(Binary.FOLDER, filename), 'rb') as f:
crackme = f.read()
return Binary(crackme, token)
def __init__(self, crackme: bytes, token: str) -> None:
self.crackme = crackme
self.token = token
self.filename = f'crackme_{self.token}.bin'
self.filepath = os.path.join(self.FOLDER, self.filename)
def save(self):
if not os.path.exists(self.FOLDER):
os.mkdir(self.FOLDER)
with open(self.filepath, 'wb') as f:
f.write(self.crackme)
os.system(f'chmod +x {self.filepath}')
def solve(self) -> str:
# A compléter
pass
def main() -> None:
binary = Binary.fetch()
print(f'Token: {binary.token}')
if __name__ == '__main__':
main()Analyse des binaires reçus
Automatisation de GDB
Résolution
Mis à jour