diff --git a/crypto/MeetMeHalfway/Pipfile b/crypto/MeetMeHalfway/Pipfile new file mode 100644 index 0000000..d13b205 --- /dev/null +++ b/crypto/MeetMeHalfway/Pipfile @@ -0,0 +1,13 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +pycrypto = "*" +pycryptodome = "*" + +[dev-packages] + +[requires] +python_version = "3.9" diff --git a/crypto/MeetMeHalfway/Pipfile.lock b/crypto/MeetMeHalfway/Pipfile.lock new file mode 100644 index 0000000..0acbc3a --- /dev/null +++ b/crypto/MeetMeHalfway/Pipfile.lock @@ -0,0 +1,64 @@ +{ + "_meta": { + "hash": { + "sha256": "0bdc8614846cc8df82bdd2c6c7d6101b7c46618b788976089a1e49b6a31f3159" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.9" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "pycrypto": { + "hashes": [ + "sha256:f2ce1e989b272cfcb677616763e0a2e7ec659effa67a88aa92b3a65528f60a3c" + ], + "index": "pypi", + "version": "==2.6.1" + }, + "pycryptodome": { + "hashes": [ + "sha256:1181c90d1a6aee68a84826825548d0db1b58d8541101f908d779d601d1690586", + "sha256:12c7343aec5a3b3df5c47265281b12b611f26ec9367b6129199d67da54b768c1", + "sha256:212c7f7fe11cad9275fbcff50ca977f1c6643f13560d081e7b0f70596df447b8", + "sha256:32d15da81959faea6cbed95df2bb44f7f796211c110cf90b5ad3b2aeeb97fc8e", + "sha256:341c6bbf932c406b4f3ee2372e8589b67ac0cf4e99e7dc081440f43a3cde9f0f", + "sha256:3558616f45d8584aee3eba27559bc6fd0ba9be6c076610ed3cc62bd5229ffdc3", + "sha256:39da5807aa1ff820799c928f745f89432908bf6624b9e981d2d7f9e55d91b860", + "sha256:3f2f3dd596c6128d91314e60a6bcf4344610ef0e97f4ae4dd1770f86dd0748d8", + "sha256:4cded12e13785bbdf4ba1ff5fb9d261cd98162145f869e4fbc4a4b9083392f0b", + "sha256:5a8c24d39d4a237dbfe181ea6593792bf9b5582c7fcfa7b8e0e12fda5eec07af", + "sha256:5d4264039a2087977f50072aaff2346d1c1c101cb359f9444cf92e3d1f42b4cd", + "sha256:6bb0d340c93bcb674ea8899e2f6408ec64c6c21731a59481332b4b2a8143cc60", + "sha256:6f8f5b7b53516da7511951910ab458e799173722c91fea54e2ba2f56d102e4aa", + "sha256:90ad3381ccdc6a24cc2841e295706a168f32abefe64c679695712acac71fd5da", + "sha256:93acad54a72d81253242eb0a15064be559ec9d989e5173286dc21cad19f01765", + "sha256:9ea2f6674c803602a7c0437fccdc2ea036707e60456974fe26ca263bd501ec45", + "sha256:a6e1bcd9d5855f1a3c0f8d585f44c81b08f39a02754007f374fb8db9605ba29c", + "sha256:a78e4324e566b5fbc2b51e9240950d82fa9e1c7eb77acdf27f58712f65622c1d", + "sha256:aceb1d217c3a025fb963849071446cf3aca1353282fe1c3cb7bd7339a4d47947", + "sha256:aed7eb4b64c600fbc5e6d4238991ad1b4179a558401f203d1fcbd24883748982", + "sha256:b07a4238465eb8c65dd5df2ab8ba6df127e412293c0ed7656c003336f557a100", + "sha256:b91404611767a7485837a6f1fd20cf9a5ae0ad362040a022cd65827ecb1b0d00", + "sha256:d8083de50f6dec56c3c6f270fb193590999583a1b27c9c75bc0b5cac22d438cc", + "sha256:d845c587ceb82ac7cbac7d0bf8c62a1a0fe7190b028b322da5ca65f6e5a18b9e", + "sha256:db66ccda65d5d20c17b00768e462a86f6f540f9aea8419a7f76cc7d9effd82cd", + "sha256:dc88355c4b261ed259268e65705b28b44d99570337694d593f06e3b1698eaaf3", + "sha256:de0b711d673904dd6c65307ead36cb76622365a393569bf880895cba21195b7a", + "sha256:e05f994f30f1cda3cbe57441f41220d16731cf99d868bb02a8f6484c454c206b", + "sha256:e80f7469b0b3ea0f694230477d8501dc5a30a717e94fddd4821e6721f3053eae", + "sha256:f699360ae285fcae9c8f53ca6acf33796025a82bb0ccd7c1c551b04c1726def3" + ], + "index": "pypi", + "version": "==3.12.0" + } + }, + "develop": {} +} diff --git a/crypto/MeetMeHalfway/challenge.py b/crypto/MeetMeHalfway/challenge.py new file mode 100644 index 0000000..66c54fd --- /dev/null +++ b/crypto/MeetMeHalfway/challenge.py @@ -0,0 +1,53 @@ + +from random import randint +from Crypto.Cipher import AES +from Crypto.Util.Padding import pad +import json + +flag = b'HTB{dummyflag}' + +def gen_key(option=0): + alphabet = b'0123456789abcdef' + const = b'cyb3rXm45!@#' + key = b'' + for i in range(16-len(const)): + key += bytes([alphabet[randint(0,15)]]) + + if option: + return key + const + else: + return const + key + +def encrypt(data, key1, key2): + cipher = AES.new(key1, mode=AES.MODE_ECB) + ct = cipher.encrypt(pad(data, 16)) + cipher = AES.new(key2, mode=AES.MODE_ECB) + ct = cipher.encrypt(ct) + return ct.hex() + + +def challenge(): + k1 = gen_key() + k2 = gen_key(1) + + print(f'key1={k1}; key2={k2}') + + ct = encrypt(flag, k1, k2) + + + print('Super strong encryption service approved by the elves X-MAS spirit.\n'+\ + 'Message for all the elves:\n' +ct + '\nEncrypt your text:\n> ') + try: + + dt = json.loads(input().strip()) + pt = bytes.fromhex(dt['pt']) + res = encrypt(pt, k1, k2) + print(res + '\n') + exit(1) + except Exception as e: + print(e) + print('Invalid payload.\n') + exit(1) + +if __name__ == "__main__": + challenge()