Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Karcrack en 19 Septiembre 2009, 14:29 pm



Título: [VB+ASM]Encriptacion, Rotacion de Bits [ROR/ROL]
Publicado por: Karcrack en 19 Septiembre 2009, 14:29 pm
Código
  1. Option Explicit
  2. 'USER32
  3. Private Declare Function CallWindowProcA Lib "USER32" (ByVal lPtr As Long, Optional ByVal Param1 As Long = 0, Optional ByVal Param2 As Long = 0, Optional ByVal Param3 As Long = 0, Optional ByVal Param4 As Long = 0) As Long
  4.  
  5. Private Const sThunk        As String = "8B7C24048B4C24088B54240CE8000000005D83ED118A1A885D1EC0<OPCODE>39FFFF42803A007404E2EEEB068B54240CEBF6C3"
  6.  
  7. '---------------------------------------------------------------------------------------
  8. ' Procedure : CryptIt
  9. ' Author    : Karcrack
  10. ' Date      : 19/09/2009
  11. ' Purpose   : Encrypt Using ROL/ROR operands...
  12. ' NOTES     : Now FULL ASM, to make it QUICKEST possible!
  13. '             Now PASSWORD compatible
  14. '             Fixed FULL rotation...
  15. '---------------------------------------------------------------------------------------
  16. '
  17. Public Sub CryptIt(ByRef bvData() As Byte, ByRef bvPass() As Byte, Optional ByVal bDecrypt As Boolean = False, Optional ByVal bPreventFULL As Boolean = True)
  18.    Dim i                   As Long
  19.    Dim sASM                As String
  20.    Dim bvASM(&HFF)         As Byte
  21.  
  22.    If bPreventFULL = True Then
  23.        'Prevent FULL rotation...
  24.        For i = LBound(bvPass) To UBound(bvPass)
  25.            If Not (bvPass(i) Mod 8) Then bvPass(i) = bvPass(i) + 1
  26.        Next i
  27.    End If
  28.  
  29.    sASM = Replace$(sThunk, "<OPCODE>", IIf((bDecrypt = False), "4C", "44"))
  30.  
  31.    Call OPCODES(sASM, bvASM)
  32.  
  33.    Call CallWindowProcA(VarPtr(bvASM(0)), VarPtr(bvData(0)), UBound(bvData) + 1, VarPtr(bvPass(0)))
  34. End Sub
  35.  
  36. Private Sub OPCODES(ByVal sThunk As String, ByRef bvTmp() As Byte)
  37.    Dim i               As Long
  38.  
  39.    For i = 0 To Len(sThunk) - 1 Step 2
  40.        bvTmp((i / 2)) = CByte("&H" & Mid$(sThunk, i + 1, 2))
  41.    Next i
  42. End Sub

Ejemplo de uso:
Código
  1.    Dim bvPass()        As Byte
  2.    Dim bvData()        As Byte
  3.  
  4.    bvPass = StrConv("YEEEAH!" & Chr$(0), vbFromUnicode)
  5.    bvData = StrConv("KARCRACK FTW! =D", vbFromUnicode)
  6.  
  7.    Call CryptIt(bvData, bvPass)
  8.  
  9.    MsgBox StrConv(bvData, vbUnicode)
  10.  
  11.    Call CryptIt(bvData, bvPass, True)
  12.    MsgBox StrConv(bvData, vbUnicode)

El password siempre ha de acabar en chr(0)!!

Saludos ;D