class XORCryptor:
def __init__(self, key):
self.key = key
def decrypt(self, encrypted_buffer):
return [byte ^ ord(self.key[i % len(self.key)]) for i, byte in enumerate(encrypted_buffer)]
def decrypt(encrypted_buffer, borrowed_string):
# Key for decryption
key = "CSUCKS"
# Editing our borrowed value
borrowed_string += "PARTY FOUL! Here is your flag: "
# Create decryption object
xor_cryptor = XORCryptor(key)
# Decrypt the encrypted buffer
decrypted_buffer = xor_cryptor.decrypt(encrypted_buffer)
# Print the raw decrypted bytes for inspection
print("Decrypted bytes:", decrypted_buffer)
# Convert the decrypted buffer to a string (handling possible invalid UTF-8)
decrypted_str = ''.join(chr(byte) for byte in decrypted_buffer if 32 <= byte <= 126)
# Append the decrypted string to the borrowed string
borrowed_string += decrypted_str
# Print the final message
print(borrowed_string)
def main():
# Encrypted flag values (in hexadecimal)
hex_values = [
"41", "30", "20", "63", "4a", "45", "54", "76", "12", "90", "7e", "53", "63", "e1",
"01", "35", "7e", "59", "60", "f6", "03", "86", "7f", "56", "41", "29", "30", "6f", "08",
"c3", "61", "f9", "35"
]
Y2xhc3MgWE9SQ3J5cHRvcjoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBrZXkpOgogICAgICAgIHNlbGYua2V5ID0ga2V5CgogICAgZGVmIGRlY3J5cHQoc2VsZiwgZW5jcnlwdGVkX2J1ZmZlcik6CiAgICAgICAgcmV0dXJuIFtieXRlIF4gb3JkKHNlbGYua2V5W2kgJSBsZW4oc2VsZi5rZXkpXSkgZm9yIGksIGJ5dGUgaW4gZW51bWVyYXRlKGVuY3J5cHRlZF9idWZmZXIpXQoKZGVmIGRlY3J5cHQoZW5jcnlwdGVkX2J1ZmZlciwgYm9ycm93ZWRfc3RyaW5nKToKICAgICMgS2V5IGZvciBkZWNyeXB0aW9uCiAgICBrZXkgPSAiQ1NVQ0tTIgoKICAgICMgRWRpdGluZyBvdXIgYm9ycm93ZWQgdmFsdWUKICAgIGJvcnJvd2VkX3N0cmluZyArPSAiUEFSVFkgRk9VTCEgSGVyZSBpcyB5b3VyIGZsYWc6ICIKCiAgICAjIENyZWF0ZSBkZWNyeXB0aW9uIG9iamVjdAogICAgeG9yX2NyeXB0b3IgPSBYT1JDcnlwdG9yKGtleSkKCiAgICAjIERlY3J5cHQgdGhlIGVuY3J5cHRlZCBidWZmZXIKICAgIGRlY3J5cHRlZF9idWZmZXIgPSB4b3JfY3J5cHRvci5kZWNyeXB0KGVuY3J5cHRlZF9idWZmZXIpCgogICAgIyBQcmludCB0aGUgcmF3IGRlY3J5cHRlZCBieXRlcyBmb3IgaW5zcGVjdGlvbgogICAgcHJpbnQoIkRlY3J5cHRlZCBieXRlczoiLCBkZWNyeXB0ZWRfYnVmZmVyKQoKICAgICMgQ29udmVydCB0aGUgZGVjcnlwdGVkIGJ1ZmZlciB0byBhIHN0cmluZyAoaGFuZGxpbmcgcG9zc2libGUgaW52YWxpZCBVVEYtOCkKICAgIGRlY3J5cHRlZF9zdHIgPSAnJy5qb2luKGNocihieXRlKSBmb3IgYnl0ZSBpbiBkZWNyeXB0ZWRfYnVmZmVyIGlmIDMyIDw9IGJ5dGUgPD0gMTI2KQoKICAgICMgQXBwZW5kIHRoZSBkZWNyeXB0ZWQgc3RyaW5nIHRvIHRoZSBib3Jyb3dlZCBzdHJpbmcKICAgIGJvcnJvd2VkX3N0cmluZyArPSBkZWNyeXB0ZWRfc3RyCgogICAgIyBQcmludCB0aGUgZmluYWwgbWVzc2FnZQogICAgcHJpbnQoYm9ycm93ZWRfc3RyaW5nKQoKZGVmIG1haW4oKToKICAgICMgRW5jcnlwdGVkIGZsYWcgdmFsdWVzIChpbiBoZXhhZGVjaW1hbCkKICAgIGhleF92YWx1ZXMgPSBbCiAgICAgICAgIjQxIiwgIjMwIiwgIjIwIiwgIjYzIiwgIjRhIiwgIjQ1IiwgIjU0IiwgIjc2IiwgIjEyIiwgIjkwIiwgIjdlIiwgIjUzIiwgIjYzIiwgImUxIiwKICAgICAgICAiMDEiLCAiMzUiLCAiN2UiLCAiNTkiLCAiNjAiLCAiZjYiLCAiMDMiLCAiODYiLCAiN2YiLCAiNTYiLCAiNDEiLCAiMjkiLCAiMzAiLCAiNmYiLCAiMDgiLAogICAgICAgICJjMyIsICI2MSIsICJmOSIsICIzNSIKICAgIF0K