コード例 #1
0
    def __init__(self, key_str):
        k = str_to_key56(key_str)
        k = key56_to_key64(k)

        key_str = b''
        for i in k:
            key_str += six.int2byte(i & 0xFF)

        self.des_c_obj = des_c.DES(key_str)
コード例 #2
0
ファイル: des_c.py プロジェクト: osedok/ArcREST
    def decrypt(self, str):
        # block - UChar[]
        block = []

        for i in six.iterbytes(str):
            block.append(i)

        # print block
        block = des_ecb_encrypt(block, self.KeySched, 0)

        res = b''
        for i in block:
            res = res + six.int2byte(i)

        return res
コード例 #3
0
ファイル: des_c.py プロジェクト: osedok/ArcREST
    def encrypt(self, plaintext):
        # block - UChar[]

        block = []
        for i in plaintext:
            block.append(i)

        block = des_ecb_encrypt(block, self.KeySched, 1)

        res = b''

        for i in block:
            res += six.int2byte(i)

        return res
コード例 #4
0
ファイル: ntlm.py プロジェクト: osedok/ArcREST
def create_NTLM_AUTHENTICATE_MESSAGE(nonce, user, domain, password, NegotiateFlags):

    is_unicode = NegotiateFlags & NTLM_NegotiateUnicode
    is_NegotiateExtendedSecurity = NegotiateFlags & NTLM_NegotiateExtendedSecurity

    flags = struct.pack('<I', NTLM_TYPE2_FLAGS)

    BODY_LENGTH = 72
    Payload_start = BODY_LENGTH  # in bytes

    Workstation = gethostname().upper().encode('ascii')
    DomainName = domain.upper().encode('ascii')
    UserName = user.encode('ascii')
    EncryptedRandomSessionKey = b""
    if is_unicode:
        Workstation = gethostname().upper().encode('utf-16-le')
        DomainName = domain.upper().encode('utf-16-le')
        UserName = user.encode('utf-16-le')
        EncryptedRandomSessionKey = "".encode('utf-16-le')
    LmChallengeResponse = calc_resp(create_LM_hashed_password_v1(password), nonce)
    NtChallengeResponse = calc_resp(create_NT_hashed_password_v1(password), nonce)

    if is_NegotiateExtendedSecurity:
        pwhash = create_NT_hashed_password_v1(password, UserName, DomainName)
        ClientChallenge = b""
        for i in range(8):
            ClientChallenge += six.int2byte(random.getrandbits(8))

        (NtChallengeResponse, LmChallengeResponse) = ntlm2sr_calc_resp(pwhash, nonce,
                                                                       ClientChallenge)  # ='\x39 e3 f4 cd 59 c5 d8 60')
    Signature = b'NTLMSSP\0'
    MessageType = struct.pack('<I', 3)  # type 3

    DomainNameLen = struct.pack('<H', len(DomainName))
    DomainNameMaxLen = struct.pack('<H', len(DomainName))
    DomainNameOffset = struct.pack('<I', Payload_start)
    Payload_start += len(DomainName)

    UserNameLen = struct.pack('<H', len(UserName))
    UserNameMaxLen = struct.pack('<H', len(UserName))
    UserNameOffset = struct.pack('<I', Payload_start)
    Payload_start += len(UserName)

    WorkstationLen = struct.pack('<H', len(Workstation))
    WorkstationMaxLen = struct.pack('<H', len(Workstation))
    WorkstationOffset = struct.pack('<I', Payload_start)
    Payload_start += len(Workstation)

    LmChallengeResponseLen = struct.pack('<H', len(LmChallengeResponse))
    LmChallengeResponseMaxLen = struct.pack('<H', len(LmChallengeResponse))
    LmChallengeResponseOffset = struct.pack('<I', Payload_start)
    Payload_start += len(LmChallengeResponse)

    NtChallengeResponseLen = struct.pack('<H', len(NtChallengeResponse))
    NtChallengeResponseMaxLen = struct.pack('<H', len(NtChallengeResponse))
    NtChallengeResponseOffset = struct.pack('<I', Payload_start)
    Payload_start += len(NtChallengeResponse)

    EncryptedRandomSessionKeyLen = struct.pack('<H', len(EncryptedRandomSessionKey))
    EncryptedRandomSessionKeyMaxLen = struct.pack('<H', len(EncryptedRandomSessionKey))
    EncryptedRandomSessionKeyOffset = struct.pack('<I', Payload_start)
    Payload_start += len(EncryptedRandomSessionKey)
    NegotiateFlags = flags

    ProductMajorVersion = struct.pack('<B', 5)
    ProductMinorVersion = struct.pack('<B', 1)
    ProductBuild = struct.pack('<H', 2600)
    VersionReserved1 = struct.pack('<B', 0)
    VersionReserved2 = struct.pack('<B', 0)
    VersionReserved3 = struct.pack('<B', 0)
    NTLMRevisionCurrent = struct.pack('<B', 15)

    # TODO - This variable isn't used
    MIC = struct.pack('<IIII', 0, 0, 0, 0)  # noqa

    msg3 = Signature + MessageType + \
        LmChallengeResponseLen + LmChallengeResponseMaxLen + LmChallengeResponseOffset + \
        NtChallengeResponseLen + NtChallengeResponseMaxLen + NtChallengeResponseOffset + \
        DomainNameLen + DomainNameMaxLen + DomainNameOffset + \
        UserNameLen + UserNameMaxLen + UserNameOffset + \
        WorkstationLen + WorkstationMaxLen + WorkstationOffset + \
        EncryptedRandomSessionKeyLen + EncryptedRandomSessionKeyMaxLen + EncryptedRandomSessionKeyOffset + \
        NegotiateFlags + \
        ProductMajorVersion + ProductMinorVersion + ProductBuild + \
        VersionReserved1 + VersionReserved2 + VersionReserved3 + NTLMRevisionCurrent

    assert BODY_LENGTH == len(msg3), "BODY_LENGTH: %d != msg3: %d" % (BODY_LENGTH, len(msg3))

    Payload = DomainName + UserName + Workstation + LmChallengeResponse + NtChallengeResponse + EncryptedRandomSessionKey
    msg3 += Payload
    msg3 = base64.b64encode(msg3)
    return msg3