From 583693ece068e2708acfa3cf80d82b1a21fc7e82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matteo=20=E2=84=B1an?= <SystemRage@protonmail.com> Date: Tue, 14 May 2019 22:00:18 +0200 Subject: [PATCH] Delete kmsRequestV5.py --- py2-kms/kmsRequestV5.py | 174 ---------------------------------------- 1 file changed, 174 deletions(-) delete mode 100644 py2-kms/kmsRequestV5.py diff --git a/py2-kms/kmsRequestV5.py b/py2-kms/kmsRequestV5.py deleted file mode 100644 index a6a14eb..0000000 --- a/py2-kms/kmsRequestV5.py +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env python - -import logging -import binascii -import hashlib -import random - -import aes -from kmsBase import kmsBase -from structure import Structure -from formatText import justify, shell_message - -logger = logging.getLogger('root') - -class kmsRequestV5(kmsBase): - class RequestV5(Structure): - class Message(Structure): - commonHdr = () - structure = ( - ('salt', '16s'), - ('encrypted', '240s'), # kmsBase.kmsRequestStruct - ('padding', ':'), - ) - - commonHdr = () - structure = ( - ('bodyLength1', '<I'), - ('bodyLength2', '<I'), - ('versionMinor', '<H'), - ('versionMajor', '<H'), - ('message', ':', Message), - ) - - class DecryptedRequest(Structure): - commonHdr = () - structure = ( - ('salt', '16s'), - ('request', ':', kmsBase.kmsRequestStruct), - ) - - class ResponseV5(Structure): - commonHdr = () - structure = ( - ('bodyLength1', '<I'), - ('unknown', '!I=0x00000200'), - ('bodyLength2', '<I'), - ('versionMinor', '<H'), - ('versionMajor', '<H'), - ('salt', '16s'), - ('encrypted', ':'), # DecryptedResponse - ('padding', ':'), - ) - - class DecryptedResponse(Structure): - commonHdr = () - structure = ( - ('response', ':', kmsBase.kmsResponseStruct), - ('keys', '16s'), - ('hash', '32s'), - ) - - key = bytearray([ 0xCD, 0x7E, 0x79, 0x6F, 0x2A, 0xB2, 0x5D, 0xCB, 0x55, 0xFF, 0xC8, 0xEF, 0x83, 0x64, 0xC4, 0x70 ]) - - v6 = False - - ver = 5 - - def executeRequestLogic(self): - requestData = self.RequestV5(self.data) - - decrypted = self.decryptRequest(requestData) - - responseBuffer = self.serverLogic(decrypted['request']) - - iv, encrypted = self.encryptResponse(requestData, decrypted, responseBuffer) - - responseData = self.generateResponse(iv, encrypted, requestData) - - return responseData - - def decryptRequest(self, request): - encrypted = bytearray(str(request['message'])) - iv = bytearray(request['message']['salt']) - - moo = aes.AESModeOfOperation() - moo.aes.v6 = self.v6 - decrypted = moo.decrypt(encrypted, 256, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], iv) - decrypted = aes.strip_PKCS7_padding(decrypted) - - return self.DecryptedRequest(decrypted) - - def encryptResponse(self, request, decrypted, response): - randomSalt = self.getRandomSalt() - result = hashlib.sha256(str(randomSalt)).digest() - iv = bytearray(request['message']['salt']) - - randomStuff = bytearray(16) - for i in range(0,16): - randomStuff[i] = (bytearray(decrypted['salt'])[i] ^ iv[i] ^ randomSalt[i]) & 0xff - - responsedata = self.DecryptedResponse() - responsedata['response'] = response - responsedata['keys'] = str(randomStuff) - responsedata['hash'] = result - - padded = aes.append_PKCS7_padding(str(responsedata)) - moo = aes.AESModeOfOperation() - moo.aes.v6 = self.v6 - mode, orig_len, crypted = moo.encrypt(padded, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], iv) - - return str(iv), str(bytearray(crypted)) - - def decryptResponse(self, response): - paddingLength = self.getPadding(response['bodyLength1']) - - iv = bytearray(response['salt']) - encrypted = bytearray(response['encrypted'][:-paddingLength]) - moo = aes.AESModeOfOperation() - moo.aes.v6 = self.v6 - decrypted = moo.decrypt(encrypted, 256, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], iv) - decrypted = aes.strip_PKCS7_padding(decrypted) - - return self.DecryptedResponse(decrypted) - - def getRandomSalt(self): - return bytearray(random.getrandbits(8) for i in range(16)) - - def generateResponse(self, iv, encryptedResponse, requestData): - response = self.ResponseV5() - bodyLength = 2 + 2 + len(iv) + len(encryptedResponse) - response['bodyLength1'] = bodyLength - response['bodyLength2'] = bodyLength - response['versionMinor'] = requestData['versionMinor'] - response['versionMajor'] = requestData['versionMajor'] - response['salt'] = iv - response['encrypted'] = encryptedResponse - response['padding'] = bytearray(self.getPadding(bodyLength)) - - shell_message(nshell = 16) - logger.info("KMS V%d Response: \n%s\n" % (self.ver, justify(response.dump(print_to_stdout = False)))) - logger.info("KMS V%d Structure Bytes: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(response))))) - - return str(response) - - def generateRequest(self, requestBase): - esalt = self.getRandomSalt() - - moo = aes.AESModeOfOperation() - moo.aes.v6 = self.v6 - dsalt = moo.decrypt(esalt, 16, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], esalt) - dsalt = bytearray(dsalt) - - decrypted = self.DecryptedRequest() - decrypted['salt'] = str(dsalt) - decrypted['request'] = requestBase - - padded = aes.append_PKCS7_padding(str(decrypted)) - mode, orig_len, crypted = moo.encrypt(padded, moo.modeOfOperation["CBC"], self.key, moo.aes.keySize["SIZE_128"], esalt) - - message = self.RequestV5.Message(str(bytearray(crypted))) - - request = self.RequestV5() - bodyLength = 2 + 2 + len(message) - request['bodyLength1'] = bodyLength - request['bodyLength2'] = bodyLength - request['versionMinor'] = requestBase['versionMinor'] - request['versionMajor'] = requestBase['versionMajor'] - request['message'] = message - - shell_message(nshell = 10) - logger.info("Request V%d Data: \n%s\n" % (self.ver, justify(request.dump(print_to_stdout = False)))) - logger.info("Request V%d: \n%s\n" % (self.ver, justify(binascii.b2a_hex(str(request))))) - - return request