import base64
# Het is leuker dan het lijkt, want er staan 'maar' 8 berichten op het forum.
# We hebben het wachtwoord geanalyseerd kunnen opvragen via not-so-bruteforce.py
# Toepassen is verder triviaal, per bericht gaat de bit omhoog, maar is niet
# afhankelijk van de rest van de berichten.
def decrypt(msg, password, bit):
result = ''
for i in range(0, len(msg)):
c = ord(password[i % len(password)])
d = ord(msg[i])
#c = c & (1 << bit); #iemand mag uitleggen waarom deze niet moet :)
result += chr(c ^ d)
return result
def msg(msgs, password):
for bit in range(0, len(msgs)):
tmp = base64.decodestring(msgs[bit])
tmp = decrypt(tmp, password, bit)
print tmp
msgs(['LyJwNh9iPil3MyMSGRhWCCpXBExXAWZBGg1eFjNcShpSCmZxCwJSAC9TBDxbBTRfCw9KRDNbHkxHCzISBwNBAyNcRkxJAWZfBQlHASgSDgkTEilAAwtWRCRTHg9bATUSBANURCRXHg1fASg','LyJwNh9iPil3Ni5bBAMTLidEC0FWHDZeBQVHRCFXEAVWCnkSAwFDFiNBGQVFAWZBHg1HF3wSUlwWRDVHCQ9WF2ZACxhWRQ==', 'LyJwNh9iPil3LCNcARYDFmoSARldRCxbAExeCzRVDwITACMSGRxSCSVTBxxSAyhXGUxBEShcDwIdRARXBExXBSgSBQpVCC9cDw', 'LyJwNh9iPil3Ky4N', 'LyJwNh9iPil3KScSHQNBADISXFkfRClHHQkTECdTGBgTXjs=', 'LyJwNh9iPil3JylcDR5SEDUT', 'LyJwNh9iPil3NxJiOUxWCmZbAUxJESpeDwITACdcSgNcD2ZWD0xdDSNHHQkTAT5CBgNaEDUSHwVHFileBgld', 'LyJwNh9iPil3IyNUDwBaBy9GDwlBAGZfDxgTDCNGSgNDCClBGQldRDBTBExXATxXSg9bBSpeDwJUAWcSLQ0TCidTGExbEDJCUEMcEzFFRBhEASdZDx5ASihXHkNSADBXGBhcFi9TBh8cBz9QDx5QFi9fDw9bBSpeDwJUAWlUAwJaFy4fDwJHATRRBQhWSQwCAgJdHQICWUxWCmZVDw5BES9ZSg1fF2ZHBABcBy1RBQhWRCRRUloAAndWD1wLACNTD1sGV3QBDlpVVyNTWQ4FAScCSkRXATxXSg9cACMSAx8TBSpeDwldRDBTBAhSBSESDQlfAC9VQw'], 'jl3dF2')
aW1wb3J0IGJhc2U2NAogCiMgSGV0IGlzIGxldWtlciBkYW4gaGV0IGxpamt0LCB3YW50IGVyIHN0YWFuICdtYWFyJyA4IGJlcmljaHRlbiBvcCBoZXQgZm9ydW0uCiMgV2UgaGViYmVuIGhldCB3YWNodHdvb3JkIGdlYW5hbHlzZWVyZCBrdW5uZW4gb3B2cmFnZW4gdmlhIG5vdC1zby1icnV0ZWZvcmNlLnB5CiMgVG9lcGFzc2VuIGlzIHZlcmRlciB0cml2aWFhbCwgcGVyIGJlcmljaHQgZ2FhdCBkZSBiaXQgb21ob29nLCBtYWFyIGlzIG5pZXQKIyBhZmhhbmtlbGlqayB2YW4gZGUgcmVzdCB2YW4gZGUgYmVyaWNodGVuLgogCmRlZiBkZWNyeXB0KG1zZywgcGFzc3dvcmQsIGJpdCk6CiAgICByZXN1bHQgPSAnJwogICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKG1zZykpOgogICAgICAgIGMgPSBvcmQocGFzc3dvcmRbaSAlIGxlbihwYXNzd29yZCldKQogICAgICAgIGQgPSBvcmQobXNnW2ldKQogICAgICAgICNjID0gYyAmICgxIDw8IGJpdCk7ICNpZW1hbmQgbWFnIHVpdGxlZ2dlbiB3YWFyb20gZGV6ZSBuaWV0IG1vZXQgOikKICAgICAgICByZXN1bHQgKz0gY2hyKGMgXiBkKQogICAgcmV0dXJuIHJlc3VsdAogCmRlZiBtc2cobXNncywgcGFzc3dvcmQpOgogICAgZm9yIGJpdCBpbiByYW5nZSgwLCBsZW4obXNncykpOgogICAgICAgIHRtcCA9IGJhc2U2NC5kZWNvZGVzdHJpbmcobXNnc1tiaXRdKQogCiAgICAgICAgdG1wID0gZGVjcnlwdCh0bXAsIHBhc3N3b3JkLCBiaXQpCiAgICAgICAgcHJpbnQgdG1wCiAKbXNncyhbJ0x5SndOaDlpUGlsM015TVNHUmhXQ0NwWEJFeFhBV1pCR2cxZUZqTmNTaHBTQ21aeEN3SlNBQzlUQkR4YkJUUmZDdzlLUkROYkhreEhDeklTQndOQkF5TmNSa3hKQVdaZkJRbEhBU2dTRGdrVEVpbEFBd3RXUkNSVEhnOWJBVFVTQkFOVVJDUlhIZzFmQVNnJywnTHlKd05oOWlQaWwzTmk1YkJBTVRMaWRFQzBGV0hEWmVCUVZIUkNGWEVBVldDbmtTQXdGREZpTkJHUVZGQVdaQkhnMUhGM3dTVWx3V1JEVkhDUTlXRjJaQUN4aFdSUT09JywgJ0x5SndOaDlpUGlsM0xDTmNBUllERm1vU0FSbGRSQ3hiQUV4ZUN6UlZEd0lUQUNNU0dSeFNDU1ZUQnh4U0F5aFhHVXhCRVNoY0R3SWRSQVJYQkV4WEJTZ1NCUXBWQ0M5Y0R3JywgJ0x5SndOaDlpUGlsM0t5NE4nLCAnTHlKd05oOWlQaWwzS1NjU0hRTkJBRElTWEZrZlJDbEhIUWtURUNkVEdCZ1RYanM9JywgJ0x5SndOaDlpUGlsM0p5bGNEUjVTRURVVCcsICdMeUp3Tmg5aVBpbDNOeEppT1V4V0NtWmJBVXhKRVNwZUR3SVRBQ2RjU2dOY0QyWldEMHhkRFNOSEhRa1RBVDVDQmdOYUVEVVNId1ZIRmlsZUJnbGQnLCAnTHlKd05oOWlQaWwzSXlOVUR3QmFCeTlHRHdsQkFHWmZEeGdURENOR1NnTkRDQ2xCR1FsZFJEQlRCRXhYQVR4WFNnOWJCU3BlRHdKVUFXY1NMUTBUQ2lkVEdFeGJFREpDVUVNY0V6RkZSQmhFQVNkWkR4NUFTaWhYSGtOU0FEQlhHQmhjRmk5VEJoOGNCejlRRHg1UUZpOWZEdzliQlNwZUR3SlVBV2xVQXdKYUZ5NGZEd0pIQVRSUkJRaFdTUXdDQWdKZEhRSUNXVXhXQ21aVkR3NUJFUzlaU2cxZkYyWkhCQUJjQnkxUkJRaFdSQ1JSVWxvQUFuZFdEMXdMQUNOVEQxc0dWM1FCRGxwVlZ5TlRXUTRGQVNjQ1NrUlhBVHhYU2c5Y0FDTVNBeDhUQlNwZUR3bGRSREJUQkFoU0JTRVNEUWxmQUM5VlF3J10sICdqbDNkRjInKQog