Option Explicit
'---------------------------------------------------------------------------------------
' Module : mAPIObfuscation
' Author : Karcrack
' Now$ : 29/08/2009 13:54
' Used for? : Obfuscate API Declaration
'---------------------------------------------------------------------------------------
'MSVBVM60
Private Declare Sub CopyBytes Lib "MSVBVM60" Alias "__vbaCopyBytes" (ByVal Size As Long, Dest As Any, Source As Any)
'KERNEL32
Private Declare Function WriteProcessMemory Lib "KERNEL32" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function IsBadReadPtr Lib "KERNEL32" (ByRef lp As Any, ByVal ucb As Long) As Long
Public Function DeObfuscateAPI(ByVal sLib As String, ByVal sFunc As String) As Boolean
Dim lAddr As Long
Dim sBuff As String * &H200
Dim lLib As Long
Dim lFunc As Long
If App.LogMode = 0 Then GoTo OUT
lAddr = App.hInstance& - Len(sBuff)
Do
lAddr = lAddr + Len(sBuff)
If IsBadReadPtr(ByVal lAddr, Len(sBuff)) <> 0 Then GoTo OUT
Call CopyBytes(Len(sBuff), ByVal sBuff$, ByVal lAddr&)
lLib = InStr(1, sBuff, sLib, vbBinaryCompare)
lFunc = InStr(1, sBuff, sFunc, vbBinaryCompare)
Loop Until (lLib <> 0) And (lFunc <> 0)
lLib = lAddr + lLib - 1
lFunc = lAddr + lFunc - 1
If WriteProcessMemory(-1, ByVal lLib&, ByVal E(sLib), Len(sLib), ByVal 0&) = 0 Then GoTo OUT
If WriteProcessMemory(-1, ByVal lFunc&, ByVal E(sFunc), Len(sFunc), ByVal 0&) = 0 Then GoTo OUT
DeObfuscateAPI = True: Exit Function
OUT:
DeObfuscateAPI = False: Exit Function
End Function
Public Function E(ByVal s As String) As String
Dim i As Long
For i = 1 To Len(s)
E = E & Chr$(Asc(Mid$(s, i, 1)) Xor &HFF)
Next i
End Function
Ejemplo:
Option Explicit
'USER32
'_Private Declare Function MessageBox Lib "USER32" Alias "MessageBoxA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Declare Function MessageBox Lib "ª¬ºÌÍ" Alias "²šŒŒž˜š½‡¾" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Sub Main()
If DeObfuscateAPI("ª¬ºÌÍ", "²šŒŒž˜š½‡¾") = True Then
Call MessageBox(0, "TEST", "TEST", 0)
End If
End Sub
Creo que esta bastente claro... pero por si acaso dire que lo que hace es declarar las APIs con las cadenas encriptadas (lo que hace que en el EXE no aparezcan las cadenas...) y luego las desecripta en Ejecucion...
Lo probé cuando lo bajé de HH y no me funciona, no hace nada.
Probé con el ejemplo de URLDownloadToFile y tampoco.
¿Que pasará?
EDITO: vale, el problema era que lo ejecuté desde el IDE. Funciona perfecto.
Muy buen aporte ;)
Claro, ese es el problema...
If App.LogMode = 0 Then GoTo OUT
Si se ejecutara en el IDE crashearia, porque hay partes de la memoria bloqueada por el IDE...
Muy bueno Karcrack, que tipo de cifrado utiliza?, estaria bueno que agas un proyecto para facilitar las declaraciones, algo asi como ingresar la declaración normal en un textbox, la encripte, y la ponga en el portapapeles.
Saludos.
Cita de: LeandroA en 31 Agosto 2009, 20:48 PM
Muy bueno Karcrack, que tipo de cifrado utiliza?, estaria bueno que agas un proyecto para facilitar las declaraciones, algo asi como ingresar la declaración normal en un textbox, la encripte, y la ponga en el portapapeles.
Saludos.
Es un XOR &HFF
Public Function E(ByVal s As String) As String
Dim i As Long
For i = 1 To Len(s)
E = E & Chr$(Asc(Mid$(s, i, 1)) Xor &HFF)
Next i
End Function
En unos dias saco una aplicacion que cifra todas las APIs de forma automatica (Tipo KPC)
Muy bueno!!
Voy a probarlo a ver que tal (Parece que VBDecompiler va a enloquecer ;))
Saludos!
Cita de: MCKSys Argentina en 31 Agosto 2009, 22:08 PM
Muy bueno!!
Voy a probarlo a ver que tal (Parece que VBDecompiler va a enloquecer ;))
Saludos!
Si te interesa saltarte al VBDecompiler mira este codigo que hice hace poco:
http://hackhound.org/forum/index.php?topic=21639
Para evitar que te decompilen con VBDecompiler y otros similares (P32Dasm por ejemplo), simplemente necesitas mover en primer PUSH que hace la aplicacion de VB un BYTE hacia adelante... en caso de que sea necesario tambien cambiar la cadena "VB5!" del ejecutable
Saludos :D
Je,je,je. Si, si. Ya lo sabia.
Hice un "pequeño" loader que "ofusca" el VBHeader y cambia el punto de entrada de los eventos (Mete unos JMPs a la parte final del EXE y despues vuelve :))
Gracias de todas formas...
Saludos!
PD: El link no funciona o yo no se para donde agarrar...