GetProcAddress alternative function

Iniciado por cobein, 8 Octubre 2008, 01:32 AM

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

cobein

'---------------------------------------------------------------------------------------
' Module      : mGetProcAddress
' DateTime    : 06/10/2008 20:06
' Author      : Cobein
' Mail        : cobein27@hotmail.com
' WebPage     : http://www.advancevb.com.ar
' Member of   : http://hackhound.org/
' Purpose     : GetProcAddress alternative function
' Usage       : At your own risk
' Requirements: None
' Distribution: You can freely use this code in your own
'               applications, but you may not reproduce
'               or publish this code on any web site,
'               online service, or distribute as source
'               on any media without express permission.
'
' Reference   : Based on ExtremeCoder sample [http://www.rohitab.com/discuss/lofiversion/index.php/t30773.html]
'
' History     : 06/10/2008 First Cut....................................................
'               06/10/2008 Minor change in buffer size to increase speed................
'---------------------------------------------------------------------------------------
Option Explicit

Private Declare Function LoadLibraryA Lib "kernel32" (ByVal lpLibFileName As String) As Long
Private Declare Sub GetMem4 Lib "msvbvm60" (ByVal Addr As Long, RetVal As Long)
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
Private Declare Function SysAllocString Lib "oleaut32.dll" (ByVal pOlechar As Long) As String

Public Function GetProcAddressAlt(ByVal sLib As String, ByVal sMod As String) As Long
    Dim lLib    As Long
    Dim i       As Long
   
    lLib = LoadLibraryA(sLib)
   
    If Not lLib = 0 Then
        Dim dwNumberOfNames As Long
        Dim dwNamesOffset   As Long
        Dim dwNameRVAs      As Long
        Dim dwFuncOffset    As Long
        Dim dwFuncRVAs      As Long
   
        GetMem4 (lLib + &H3C), i
        GetMem4 (lLib + i + &H78), i
   
        GetMem4 (lLib + i + &H18), dwNumberOfNames
        GetMem4 (lLib + i + &H20), dwNamesOffset
        GetMem4 (lLib + i + &H1C), dwFuncOffset

        Dim sBuff   As String * 128
        Dim sName   As String

        For i = 0 To dwNumberOfNames - 1
            GetMem4 (lLib + dwNamesOffset + i * &H4), dwNameRVAs
            GetMem4 (lLib + dwFuncOffset + i * &H4), dwFuncRVAs

            sBuff = SysAllocString(lLib + dwNameRVAs)
            sName = Left$(sBuff, lstrlen(sBuff))
           
            If sName = sMod Then
                GetProcAddressAlt = lLib + dwFuncRVAs
                Exit Function
            End If
        Next
    End If
   
End Function
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

el_c0c0

tambien se pueden sacar otros nombres de procedimientos no? por lo que vi haces un for y si el procedimiento q buscas es igual al item del array entonces es ese..
no?

saludos
'-     coco
"Te voy a romper el orto"- Las hemorroides

cobein

Exactamente, podes listar todas las funciones exportadas de la libreria.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.