[NEW]mAPIObfuscation - Ofuscar Strings de las APIs... [NO CallAPIByName]

Iniciado por Karcrack, 31 Agosto 2009, 17:50 PM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

Código (vb) [Seleccionar]
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:
Código (vb) [Seleccionar]
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...

aaronduran2

#1
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  ;)

Karcrack

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...

LeandroA

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.

Karcrack

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)

MCKSys Argentina

Muy bueno!!

Voy a probarlo a ver que tal (Parece que VBDecompiler va a enloquecer  ;))

Saludos!


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Karcrack

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

MCKSys Argentina

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...


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."