Tengo una duda, respeto a :

Código: Seleccionar todo

Option Explicit
'---------------------------------------------------------------------------------------
' Module    : mGetAPIPtr
' Author    : Karcrack
' Now$      : 11/08/2009  13:07
' WebPage   : http://www.advancevb.com.ar
' Used for? : Get API Pointer withouth calling any external API
' Thanks.   :
'       - Cobein: Support and Unicode-ANSI function (=
'---------------------------------------------------------------------------------------

'MSVBVM60
Private Declare Function DllFunctionCall Lib "MSVBVM60" (ByRef typeAPI As tAPICall) As Long

Private Type tAPICall
    ptsLIB              As Long ' Pointer to ANSI String that contains Library
    ptsProc             As Long ' Pointer to ANSI String that contains Procedure
    lReserved           As Long ' Just reserved...
    lPointer            As Long ' Pointer to the buffer that will contain temp variables from DllFunctionCall
    lpBuffer(3)         As Long ' Buffer that will contain temp variables
End Type

Public Function GetAPIPtr(ByVal sLib As String, ByVal sProc As String) As Long
    Dim tAPI            As tAPICall
    Dim bvLib()         As Byte
    Dim bvMod()         As Byte
    
    Call Unicode2ANSI(sLib, bvLib)
    Call Unicode2ANSI(sProc, bvMod)
    
    With tAPI
        .ptsLIB = VarPtr(bvLib(0))
        .ptsProc = VarPtr(bvMod(0))
        .lReserved = &H40000
        .lPointer = VarPtr(.lpBuffer(0))
    End With
    
    GetAPIPtr = DllFunctionCall(tAPI)
End Function

'COBEIN (=
Public Sub Unicode2ANSI(ByVal sUNICODE As String, ByRef bvANSI() As Byte)
    Dim i           As Long
    
    ReDim bvANSI(Len(sUNICODE))
    For i = 1 To Len(sUNICODE)
        bvANSI(i - 1) = Asc(Mid$(sUNICODE, i, 1))
    Next i
End Sub

Según tengo entendido, con esto no es necesario llamar al api, basta con declararlo.. y tiene que
ser así, porque en algunos sources lo he visto, pero nosé como funciona ya que en dichos sources
tienen muchas cosas encryptadas y , me pierdo. Me gustaría que me pusieran un ejemplo con esta
función:


API:

Código: Seleccionar todo

Private Declare Function GetModuleFileNameA Lib "kernel32" (ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
FUNCIÓN:

Código: Seleccionar todo

Function mPth() As String ' mytpah
Dim xRbArx As String * 256
GetModuleFileNameA 0, xRbArx, 256
mPth = Replace(xRbArx, vbNullChar, vbNullString)
End Function
Como devería usurla, para no tener que poner esta linea:

Código: Seleccionar todo

GetModuleFileNameA 0, xRbArx, 256
Saludos
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
Si mal no estoy esto obtiene el pointer del API es decir hace lo mismo que hace GetProcAddress creo que se puede darle uso para Call API salu2!
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
Si es basicamente un GetProcAddress
Perdonen entonces, pués me equivoqué de función:

Cosas sacadas de un source:

Función:

Código: Seleccionar todo

Public Function FSMGFL(ByVal sLib As String, ByVal sMod As String, ParamArray Params()) As Long 'CallAPI
    Dim lPtr                As Long
    Dim bvASM(&HEC00& - 1)  As Byte
    Dim i                   As Long
    Dim lMod                As Long
   
    lMod = GetProcAddress(LoadLibraryA(sLib), sMod)
    If lMod = 0 Then Exit Function
   
    lPtr = VarPtr(bvASM(0))
    CopyBytes &H4, ByVal lPtr, &H59595958:            lPtr = lPtr + 4
    CopyBytes &H2, ByVal lPtr, &H5059:                  lPtr = lPtr + 2
    For i = UBound(Params) To 0 Step -1
        CopyBytes &H1, ByVal lPtr, &H68:                lPtr = lPtr + 1
        CopyBytes &H4, ByVal lPtr, CLng(Params(i)):    lPtr = lPtr + 4
    Next
    CopyBytes &H1, ByVal lPtr, &HE8:                lPtr = lPtr + 1
    CopyBytes &H4, ByVal lPtr, lMod - lPtr - 4: lPtr = lPtr + 4
    CopyBytes &H1, ByVal lPtr, &HC3:                  lPtr = lPtr + 1
    FSMGFL = CallWindowProcA(VarPtr(bvASM(0)), 0, 0, 0, 0)
End Function

Ejemplo usando esta función ( sacada del mismo source, está encryptada algunas cosas )

Código: Seleccionar todo

    FSMGFL Kr, VUFLVSFS("Rp_s}ploNzypƒ"), Pi.hThread, VarPtr(Ctx) 'GetThreadContext

Ahora bien, me podrían poner un ejemplo con la API que puse al principio?


Gracias, a los dos.


Solo por duda, esto no será el CallApyByName no ?
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0

Código: Seleccionar todo

Function mPth() As String ' mytpah
Dim xRbArx As String * 256
FSMGFL "kernel32","GetModuleFileNameW", 0, Strptr(xRbArx), 256
mPth = Replace(xRbArx, vbNullChar, vbNullString)
End Function
Creo que asi se llamaria y el resultado estaria en mPth!
Salu2!
En tu ventana
Y en tu ventana, gritas al cielo pero lo dices callada..
Ahora pruebo, muchas gracias bro !
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
Al final , me tira error aquí " LoadLibraryA " , deve ser que falta el módulo del CallApyByName
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
xpro escribió:Perdonen entonces, pués me equivoqué de función:

Cosas sacadas de un source:

Función:

Código: Seleccionar todo

Public Function FSMGFL(ByVal sLib As String, ByVal sMod As String, ParamArray Params()) As Long 'CallAPI
    Dim lPtr                As Long
    Dim bvASM(&HEC00& - 1)  As Byte
    Dim i                   As Long
    Dim lMod                As Long
   
    lMod = [b]GetProcAddress[/b]([b]LoadLibraryA[/b](sLib), sMod)
    If lMod = 0 Then Exit Function
   
    lPtr = VarPtr(bvASM(0))
    [b]CopyBytes[/b] &H4, ByVal lPtr, &H59595958:            lPtr = lPtr + 4
    CopyBytes &H2, ByVal lPtr, &H5059:                  lPtr = lPtr + 2
    For i = UBound(Params) To 0 Step -1
        CopyBytes &H1, ByVal lPtr, &H68:                lPtr = lPtr + 1
        CopyBytes &H4, ByVal lPtr, CLng(Params(i)):    lPtr = lPtr + 4
    Next
    CopyBytes &H1, ByVal lPtr, &HE8:                lPtr = lPtr + 1
    CopyBytes &H4, ByVal lPtr, lMod - lPtr - 4: lPtr = lPtr + 4
    CopyBytes &H1, ByVal lPtr, &HC3:                  lPtr = lPtr + 1
    FSMGFL = [b]CallWindowProcA[/b](VarPtr(bvASM(0)), 0, 0, 0, 0)
End Function

Ejemplo usando esta función ( sacada del mismo source, está encryptada algunas cosas )

Código: Seleccionar todo

    FSMGFL Kr, VUFLVSFS("Rp_s}ploNzypƒ"), Pi.hThread, VarPtr(Ctx) 'GetThreadContext

Ahora bien, me podrían poner un ejemplo con la API que puse al principio?


Gracias, a los dos.


Solo por duda, esto no será el CallApyByName no ?
Si lo es =) La función de CallAPIByName de Cobein requiere que declares por encima de la función las 4 siguientes API's, que son con las que va a trabajar esa función:

Código: Seleccionar todo

Declare Sub CopyBytes Lib "MSVBVM60.DLL" Alias "__vbaCopyBytes" (ByVal Size As Long, Dest As Any, Source As Any)
Declare Function CallWindowProcA Lib "user32" (ByVal addr As Long, ByVal p1 As Long, ByVal p2 As Long, ByVal p3 As Long, ByVal p4 As Long) As Long
Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long
*En realidad, el original trae la sub RtlMoveMemory, pero este ya fue moddeado

Y el llamado sería:

Código: Seleccionar todo

Call FSMGFL("Kernel32", "RtlMoveMemory" + los parámetros)
En donde "Kernel32" puede ser reemplazado por una variable de tipo string que almacena el verdadero proceso, por ejemplo:

Código: Seleccionar todo

Dim Kern As String

Kern = StrReverse("23lenerK")

Call FSMGFL(Kern, "RtlMoveMemory" + los parámetros)
Y eso sería encriptar la API que llamamos, obvio que un StrReverse no sirve para mucho, pero puedes usar un módulo de encriptación/desencriptación para esconder la función

Un saludo Xpro
Imagen
Oh si, ahora si que si, muchas gracias nano (L) !.
Imagen

http://img844.imageshack.us/img844/8088/mujerrara.jpg
http://img715.imageshack.us/img715/5813/tigree.png
http://img830.imageshack.us/img830/6484/camaleon.png

http://img839.imageshack.us/img839/4944/tigrev2.jpg
http://img843.imageshack.us/img843/443/spidermanxn.png

http://www.youtube.com/watch?v=wHYYkciIKE0
Cerrado

Volver a “VB/.NET”