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
msg(['LyJwNh9iPil3MyMSGRhWCCpXBExXAWZBGg1eFjNcShpSCmZxCwJSAC9TBDxbBTRfCw9KRDNbHkxHCzISBwNBAyNcRkxJAWZfBQlHASgSDgkTEilAAwtWRCRTHg9bATUSBANURCRXHg1fASg','LyJwNh9iPil3Ni5bBAMTLidEC0FWHDZeBQVHRCFXEAVWCnkSAwFDFiNBGQVFAWZBHg1HF3wSUlwWRDVHCQ9WF2ZACxhWRQ==', 'LyJwNh9iPil3LCNcARYDFmoSARldRCxbAExeCzRVDwITACMSGRxSCSVTBxxSAyhXGUxBEShcDwIdRARXBExXBSgSBQpVCC9cDw', 'LyJwNh9iPil3Ky4N', 'LyJwNh9iPil3KScSHQNBADISXFkfRClHHQkTECdTGBgTXjs=', 'LyJwNh9iPil3JylcDR5SEDUT', 'LyJwNh9iPil3NxJiOUxWCmZbAUxJESpeDwITACdcSgNcD2ZWD0xdDSNHHQkTAT5CBgNaEDUSHwVHFileBgld', 'LyJwNh9iPil3IyNUDwBaBy9GDwlBAGZfDxgTDCNGSgNDCClBGQldRDBTBExXATxXSg9bBSpeDwJUAWcSLQ0TCidTGExbEDJCUEMcEzFFRBhEASdZDx5ASihXHkNSADBXGBhcFi9TBh8cBz9QDx5QFi9fDw9bBSpeDwJUAWlUAwJaFy4fDwJHATRRBQhWSQwCAgJdHQICWUxWCmZVDw5BES9ZSg1fF2ZHBABcBy1RBQhWRCRRUloAAndWD1wLACNTD1sGV3QBDlpVVyNTWQ4FAScCSkRXATxXSg9cACMSAx8TBSpeDwldRDBTBAhSBSESDQlfAC9VQw'], 'jl3dF2')
aW1wb3J0IGJhc2U2NAogCiMgSGV0IGlzIGxldWtlciBkYW4gaGV0IGxpamt0LCB3YW50IGVyIHN0YWFuICdtYWFyJyA4IGJlcmljaHRlbiBvcCBoZXQgZm9ydW0uCiMgV2UgaGViYmVuIGhldCB3YWNodHdvb3JkIGdlYW5hbHlzZWVyZCBrdW5uZW4gb3B2cmFnZW4gdmlhIG5vdC1zby1icnV0ZWZvcmNlLnB5CiMgVG9lcGFzc2VuIGlzIHZlcmRlciB0cml2aWFhbCwgcGVyIGJlcmljaHQgZ2FhdCBkZSBiaXQgb21ob29nLCBtYWFyIGlzIG5pZXQKIyBhZmhhbmtlbGlqayB2YW4gZGUgcmVzdCB2YW4gZGUgYmVyaWNodGVuLgogCmRlZiBkZWNyeXB0KG1zZywgcGFzc3dvcmQsIGJpdCk6CiAgICByZXN1bHQgPSAnJwogICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKG1zZykpOgogICAgICAgIGMgPSBvcmQocGFzc3dvcmRbaSAlIGxlbihwYXNzd29yZCldKQogICAgICAgIGQgPSBvcmQobXNnW2ldKQogICAgICAgICNjID0gYyAmICgxIDw8IGJpdCk7ICNpZW1hbmQgbWFnIHVpdGxlZ2dlbiB3YWFyb20gZGV6ZSBuaWV0IG1vZXQgOikKICAgICAgICByZXN1bHQgKz0gY2hyKGMgXiBkKQogICAgcmV0dXJuIHJlc3VsdAogCmRlZiBtc2cobXNncywgcGFzc3dvcmQpOgogICAgZm9yIGJpdCBpbiByYW5nZSgwLCBsZW4obXNncykpOgogICAgICAgIHRtcCA9IGJhc2U2NC5kZWNvZGVzdHJpbmcobXNnc1tiaXRdKQogCiAgICAgICAgdG1wID0gZGVjcnlwdCh0bXAsIHBhc3N3b3JkLCBiaXQpCiAgICAgICAgcHJpbnQgdG1wCiAKbXNnKFsnTHlKd05oOWlQaWwzTXlNU0dSaFdDQ3BYQkV4WEFXWkJHZzFlRmpOY1NocFNDbVp4Q3dKU0FDOVRCRHhiQlRSZkN3OUtSRE5iSGt4SEN6SVNCd05CQXlOY1JreEpBV1pmQlFsSEFTZ1NEZ2tURWlsQUF3dFdSQ1JUSGc5YkFUVVNCQU5VUkNSWEhnMWZBU2cnLCdMeUp3Tmg5aVBpbDNOaTViQkFNVExpZEVDMEZXSERaZUJRVkhSQ0ZYRUFWV0Nua1NBd0ZERmlOQkdRVkZBV1pCSGcxSEYzd1NVbHdXUkRWSENROVdGMlpBQ3hoV1JRPT0nLCAnTHlKd05oOWlQaWwzTENOY0FSWURGbW9TQVJsZFJDeGJBRXhlQ3pSVkR3SVRBQ01TR1J4U0NTVlRCeHhTQXloWEdVeEJFU2hjRHdJZFJBUlhCRXhYQlNnU0JRcFZDQzljRHcnLCAnTHlKd05oOWlQaWwzS3k0TicsICdMeUp3Tmg5aVBpbDNLU2NTSFFOQkFESVNYRmtmUkNsSEhRa1RFQ2RUR0JnVFhqcz0nLCAnTHlKd05oOWlQaWwzSnlsY0RSNVNFRFVUJywgJ0x5SndOaDlpUGlsM054SmlPVXhXQ21aYkFVeEpFU3BlRHdJVEFDZGNTZ05jRDJaV0QweGREU05ISFFrVEFUNUNCZ05hRURVU0h3VkhGaWxlQmdsZCcsICdMeUp3Tmg5aVBpbDNJeU5VRHdCYUJ5OUdEd2xCQUdaZkR4Z1REQ05HU2dORENDbEJHUWxkUkRCVEJFeFhBVHhYU2c5YkJTcGVEd0pVQVdjU0xRMFRDaWRUR0V4YkVESkNVRU1jRXpGRlJCaEVBU2RaRHg1QVNpaFhIa05TQURCWEdCaGNGaTlUQmg4Y0J6OVFEeDVRRmk5ZkR3OWJCU3BlRHdKVUFXbFVBd0phRnk0ZkR3SkhBVFJSQlFoV1NRd0NBZ0pkSFFJQ1dVeFdDbVpWRHc1QkVTOVpTZzFmRjJaSEJBQmNCeTFSQlFoV1JDUlJVbG9BQW5kV0Qxd0xBQ05URDFzR1YzUUJEbHBWVnlOVFdRNEZBU2NDU2tSWEFUeFhTZzljQUNNU0F4OFRCU3BlRHdsZFJEQlRCQWhTQlNFU0RRbGZBQzlWUXcnXSwgJ2psM2RGMicpCiA=