Reconstruction of des.exe/undes.exe

This commit is contained in:
2026-09-09 23:28:46 +02:00
parent b90136f137
commit 5aa37bf374
64 changed files with 13344 additions and 2 deletions
+215
View File
@@ -0,0 +1,215 @@
' A warning to parents that this programming language is unsuited for small
' children
Option Explicit
'****************************************************************************
'* *
'* Encryption Algorithm Types/Modes *
'* *
'****************************************************************************
' The encryption algorithms we can use
Global Const CRYPT_ALGO_NONE = 0 ' No encryption
Global Const CRYPT_ALGO_MDCSHS = 1 ' MDC/SHS
Global Const CRYPT_ALGO_DES = 2 ' DES
Global Const CRYPT_ALGO_3DES = 3 ' Two-key triple DES
Global Const CRYPT_ALGO_IDEA = 4 ' IDEA
Global Const CRYPT_ALGO_RC4 = 5 ' RC4
Global Const CRYPT_ALGO_SAFER = 6 ' SAFER and SAFER-SK
Global Const CRYPT_ALGO_LAST = 7 ' Last possible crypt algo value
' The encryption modes we can use
Global Const CRYPT_MODE_NONE = 0 ' No encryption
Global Const CRYPT_MODE_STREAM = 1 ' Stream cipher
Global Const CRYPT_MODE_ECB = 2 ' ECB
Global Const CRYPT_MODE_CBC = 3 ' CBC
Global Const CRYPT_MODE_CFB = 4 ' CFB
Global Const CRYPT_MODE_OFB = 5 ' OFB
Global Const CRYPT_MODE_PCBC = 6 ' PCBC
Global Const CRYPT_MODE_LAST = 6 ' Last possible crypt algo value
'****************************************************************************
'* *
'* Library-Wide Constants and Definitions *
'* *
'****************************************************************************
' The maximum user key size - 2048 bits
Global Const CRYPT_MAX_KEYSIZE = 256
' The maximum IV size - 256 bits
Global Const CRYPT_MAX_IVSIZE = 64
' The maximum speed ratio for an encryption algorithm
Global Const CRYPT_MAX_SPEED = 1000
'****************************************************************************
'* *
'* Data Structures *
'* *
'****************************************************************************
' An encryption context. Note the order of the BYTE[] fields in this
' structure, which ensures they're aligned to the machine word size
Type CRYPT_INFO
' Basic information on the encryption we're using (a pointer to an
' internal data structure)
capabilityInfo As Long ' The encryption capability data
' User keying information. The user key is the key as entered by the
' user, the transformed user key is (for those algoriths which do this)
' the user key transformed by whatever key preprocessing method is used,
' stored in canonical form. The IV is the initial IV stored in canonical
' form
userKey As String * MAX_KEYSIZE ' User encryption key
transUserKey As String * MAX_KEYSIZE ' Transformed user key
iv As String * MAX_IVSIZE ' Initial IV
userKeyLength As Integer ' User encryption key length in bytes
ivLength As Integer ' IV length in bytes
keySet As Integer ' Whether the key is set up
ivSet As Integer ' Whether the IV is set up
' Keying information. The key is the raw encryption key stored in
' whatever form is required by the algorithm. This may be simply an
' endianness-adjusted form of the transformed key (in the case of
' algorithms like MDC/SHS) or a processed form of the user key (in the
' case of algorithms like DES or IDEA). The IV is the current working
' IV stored in an endianness-adjusted form. The ivCount is the number
' of bytes of IV in use, and may be used for various chaining modes.
' These fields may be unused if the algorithm is implemented in hardware
key As Long ' Pointer to internal working key
currentIV As String * MAX_IVSIZE ' Internal working IV
keyLength As Integer ' Internal key length in bytes
ivCount As Integer ' Internal IV count for chaining modes
' Private data needed by the algorithm
privateData As Long ' For private use
End Type
' Extra algorithm-specific information stored within a crypt context
Type CRYPT_INFO_MDCSHS
keySetupIterations As Integer ' No.iterations for user key setup
End Type
Type CRYPT_INFO_SAFER
rounds As Integer ' Number of encryption rounds
currentRounds As Integer ' Internal number of rounds for this key
useSaferSK As Integer ' Whether to use strengthened-key version
End Type
' Results returned from the encryption capability query
Type CRYPT_QUERY_INFO
' The algorithm, encryption mode, and algorithm name. Note that the
' algorithm name is a pointer to a C string, which current versions of
' Visual Basic can't handle when they're inside a structure. To use it,
' you need to extract it into a String in the VB program
cryptAlgo As Integer ' The encryption algorithm
cryptMode As Integer ' The encryption mode
algoName As Long ' The algorithm name
' The algorithm parameters
blockSize As Integer ' The basic block size of the algorithm
minKeySize As Integer ' Minimum key size in bytes
keySize As Integer ' Recommended key size in bytes
maxKeySize As Integer ' Maximum key size in bytes
minIVsize As Integer ' Minimum IV size in bytes
ivSize As Integer ' Recommended IV size in bytes
maxIVsize As Integer ' Maximum IV size in bytes
' Various algorithm characteristics
speed As Integer ' Speed relative to block copy
End Type
'****************************************************************************
'* *
'* Status Codes *
'* *
'****************************************************************************
' No error in function call
Global Const CRYPT_OK = 0 ' No error
' Generic internal error
Global Const CRYPT_ERROR = -1 ' Nonspecific error
' Failed self-test in encryption code
Global Const CRYPT_SELFTEST = -2 ' Failed self-test
' Error in parameters passed to function
Global Const CRYPT_BADPARM = -3 ' Generic bad argument to function
Global Const CRYPT_BADPARM1 = -4 ' Bad argument, parameter 1
Global Const CRYPT_BADPARM2 = -5 ' Bad argument, parameter 2
Global Const CRYPT_BADPARM3 = -6 ' Bad argument, parameter 3
Global Const CRYPT_BADPARM4 = -7 ' Bad argument, parameter 4
Global Const CRYPT_BADPARM5 = -8 ' Bad argument, parameter 5
Global Const CRYPT_BADPARM6 = -9 ' Bad argument, parameter 6
Global Const CRYPT_BADPARM7 = -10 ' Bad argument, parameter 7
Global Const CRYPT_BADPARM8 = -11 ' Bad argument, parameter 8
Global Const CRYPT_BADPARM9 = -12 ' Bad argument, parameter 9
Global Const CRYPT_BADPARM10 = -13 ' Bad argument, parameter 10
Global Const CRYPT_BADPARM11 = -14 ' Bad argument, parameter 11
Global Const CRYPT_BADPARM12 = -15 ' Bad argument, parameter 12
Global Const CRYPT_BADPARM13 = -16 ' Bad argument, parameter 13
Global Const CRYPT_BADPARM14 = -17 ' Bad argument, parameter 14
Global Const CRYPT_BADPARM15 = -18 ' Bad argument, parameter 15
' Errors due to insufficient resources
Global Const CRYPT_NOMEM = -19 ' Out of memory
Global Const CRYPT_NOTINITED = -20 ' Data has not been initialised
Global Const CRYPT_INITED = -21 ' Data has already been initialised
Global Const CRYPT_NOALGO = -22 ' Algorithm unavailable
Global Const CRYPT_NOMODE = -23 ' Encryption mode unavailable
Global Const CRYPT_NOKEY = -24 ' Key not initialised
Global Const CRYPT_NOIV = -25 ' IV not initialised
'****************************************************************************
'* *
'* Public Functions *
'* *
'****************************************************************************
' Initialise and shut down the encryption library
Declare Function initLibrary Lib "Crypt.Dll" () As Integer
Declare Function endLibrary Lib "Crypt.Dll" () As Integer
' Query the capabilities of the encryption library
Declare Function queryModeAvailability Lib "Crypt.Dll" (ByVal cryptAlgo As Integer, ByVal cryptMode As Integer) As Integer
Declare Function queryAlgoAvailability Lib "Crypt.Dll" (ByVal cryptAlgo As Integer) As Integer
Declare Function queryAlgoModeInformation Lib "Crypt.Dll" (ByVal cryptAlgo As Integer, ByVal cryptMode As Integer, cryptQueryInfo As CRYPT_QUERY_INFO) As Integer
Declare Function queryContextInformation Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, cryptQueryInfo As CRYPT_QUERY_INFO) As Integer
' Initialise and destroy an encryption context
Declare Function initCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal cryptAlgo As Integer, ByVal cryptMode As Integer) As Integer
Declare Function initCryptContextEx Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal cryptAlgo As Integer, ByVal cryptMode As Integer, cryptInfoEx As Any) As Integer
Declare Function destroyCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO) As Integer
' Load a user key into a crypt context
Declare Function loadCryptContext Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal key As String, ByVal keyLength As Integer) As Integer
' Load/retreive an IV into/from a crypt context
Declare Function loadIV Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal iv As String, ByVal length As Integer) As Integer
Declare Function retrieveIV Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal iv As String) As Integer
' Encrypt/decrypt a block of memory
Declare Function encryptBuffer Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal buffer As String, ByVal length As Integer) As Integer
Declare Function decryptBuffer Lib "Crypt.Dll" (cryptInfo As CRYPT_INFO, ByVal buffer As String, ByVal length As Integer) As Integer