[NTDLL] Sacar puntero API - LdrLoadDll() + LdrGetProcedureAddress()

Iniciado por Karcrack, 10 Febrero 2010, 18:06 PM

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

Karcrack

Código (vb) [Seleccionar]
Option Explicit

'NTDLL
Private Declare Function LdrLoadDll Lib "NTDLL" (ByVal pWPathToFile As Long, ByVal Flags As Long, ByRef pwModuleFileName As UNICODE_STRING, ByRef ModuleHandle As Long) As Long
Private Declare Function LdrGetProcedureAddress Lib "NTDLL" (ByVal ModuleHandle As Long, ByRef paFunctionName As Long, ByVal Ordinal As Integer, ByRef FunctionAddress As Long) As Long
Private Declare Sub RtlInitUnicodeString Lib "NTDLL" (DestinationString As Any, ByVal SourceString As Long)

Private Type UNICODE_STRING
    uLength         As Integer
    uMaximumLength  As Integer
    pBuffer         As Long
End Type

Public Function NtLoadLibrary(ByVal sName As String) As Long
    Dim US          As UNICODE_STRING

    Call RtlInitUnicodeString(US, StrPtr(sName))
    Call LdrLoadDll(ByVal 0&, ByVal 0&, US, NtLoadLibrary)
End Function

Public Function NtGetProcAddr(ByVal lModuleHandle As Long, ByVal sProc As String) As Long
    Dim i           As Long
    Dim ANSI()      As Byte

    ReDim ANSI(0 To Len(sProc))
    For i = 1 To Len(sProc)
        ANSI(i - 1) = Asc(Mid$(sProc, i, 1))
    Next i

    Call LdrGetProcedureAddress(lModuleHandle, VarPtr(ANSI(0)), ByVal 0&, NtGetProcAddr)
End Function


Es el equivalente nativo de LoadLibrary+GetProcAddress :D

Ejemplo:
Código (vb) [Seleccionar]
Option Explicit
'KERNEL32
Private Declare Function LoadLibrary Lib "KERNEL32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "KERNEL32" (ByVal hModule As Long, ByVal lpProcName As String) As Long

Private Sub Form_Load()
    MsgBox Hex$(NtGetProcAddr(NtLoadLibrary("KERNEL32"), "ExitProcess")) & vbCrLf & Hex$(GetProcAddress(LoadLibrary("KERNEL32"), "ExitProcess"))
End Sub


Cualquier duda... preguntar! ;)

Saludos ::)

ssccaann43 ©

Excelentes aportes Karcrack, sin embargo muchos usuarios o la gran mayoría tiene menos de un 50% de conocimientos en VB y les sería util si explicas en tus aportes la finalidad del source que posteas con el fin de que puedan comprender como usarlo.
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

BlackZeroX

Cita de: ssccaann43 en 10 Febrero 2010, 19:13 PM
Excelentes aportes Karcrack, sin embargo muchos usuarios o la gran mayoría tiene menos de un 50% de conocimientos en VB y les sería util si explicas en tus aportes la finalidad del source que posteas con el fin de que puedan comprender como usarlo.

a mi solo explíquenme el ASM o un Manual online ( Pagina jejejeje ).

P.D.: Como pasas el código ASM a OpCode (asi se le dice No mmm ¬¬"), lo digo por tus otros Post.

Sangrientas Lunas!¡.
.
The Dark Shadow is my passion.

Karcrack

Cita de: BlackZeroX▓▓▒▒░░ en 10 Febrero 2010, 19:19 PMComo pasas el código ASM a OpCode (asi se le dice No mmm ¬¬"), lo digo por tus otros Post.
Ensamblo las instrucciones de ASM con FASM en modo binario (*.BIN) luego con algun editor Hexadecimal (Como el Hex WorkShop) se pueden sacar el formato Currency,Long,Byte... etc..



Cita de: ssccaann43 en 10 Febrero 2010, 19:13 PM
Excelentes aportes Karcrack, sin embargo muchos usuarios o la gran mayoría tiene menos de un 50% de conocimientos en VB y les sería util si explicas en tus aportes la finalidad del source que posteas con el fin de que puedan comprender como usarlo.
Cualquier duda que tengan que posteen, si es coherente respondere sin ningun problema... Ademas, este codigo esta claro lo que hace no? :P