Autor
|
Tema: Otra alternativa a para ocultar una api de los AV (Leído 3,923 veces)
|
LeandroA
|
Hola me resulto curioso esto de declarar a las apis por su ordinal y bueno de la cosa es que los AV no detectan estas apis, lo malo es que dependiendo de la versión de la dll el ordinal puede cambiar. pero es otra buena alternativa. una pequeña muestra Option Explicit Private Declare Function URLDownloadToFile Lib "urlmon" Alias "#216" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long Private Declare Function URLDownloadToFile_Seven Lib "urlmon" Alias "#217" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function GetProcAddressXP Lib "kernel32.dll" Alias "#409" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetProcAddressVISTA Lib "kernel32.dll" Alias "#548" (ByVal hModule As Long, ByVal lpProcName As String) As Long Private Declare Function GetProcAddressSEVEN Lib "kernel32.dll" Alias "#580" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function LoadLibraryXP Lib "kernel32.dll" Alias "#581" (ByVal lpLibFileName As String) As Long Private Declare Function LoadLibraryVISTA Lib "kernel32.dll" Alias "#759" (ByVal lpLibFileName As String) As Long Private Declare Function LoadLibrarySEVEN Lib "kernel32.dll" Alias "#827" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hLibModule As Long) As Long
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As tOSVERSIONINFO) As Long
Private Type tOSVERSIONINFO dwOSVersionInfoSize As Long dwMajorVersion As Long dwMinorVersion As Long dwBuildNumber As Long dwPlatformId As Long szCSDVersion As String * 128 End Type
Dim OSV As tOSVERSIONINFO
Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean If OSV.dwMajorVersion >= 7 Then DownloadFile = URLDownloadToFile_Seven(0, URL, LocalFilename, 0, 0) = 0 Else DownloadFile = URLDownloadToFile(0, URL, LocalFilename, 0, 0) = 0 End If End Function
Private Function GetProcAddress(ByVal hModule As Long, ByVal lpProcName As String) As Long Select Case OSV.dwMajorVersion Case 5 GetProcAddress = GetProcAddressXP(hModule, lpProcName) Case 6 GetProcAddress = GetProcAddressVISTA(hModule, lpProcName) Case 7 GetProcAddress = GetProcAddressSEVEN(hModule, lpProcName) End Select End Function
Private Function LoadLibrary(ByVal lpLibFileName As String) As Long Select Case OSV.dwMajorVersion Case 5 LoadLibrary = LoadLibraryXP(lpLibFileName) Case 6 LoadLibrary = LoadLibraryVISTA(lpLibFileName) Case 7 LoadLibrary = LoadLibrarySEVEN(lpLibFileName) End Select End Function
Private Sub Form_Initialize() OSV.dwOSVersionInfoSize = Len(OSV) Call GetVersionEx(OSV) End Sub
Private Sub Form_Load() Dim hMod As Long
DownloadFile "http://www.allapi.net", App.Path & "\allapi.htm" hMod = LoadLibrary("user32.dll") MsgBox GetProcAddress(hMod, "MessageBoxA") FreeLibrary hMod End Sub
no estoy seguro si con los cambios de los SPx pueda cambiar yo solo compare por la version del SO Saludos.
|
|
|
En línea
|
|
|
|
azul27
Desconectado
Mensajes: 12
|
Lo cierto es que no entiendo el funcionamiento y me interesa mucho.. si pudieras poner otro ejemplo, expicado sería de gran ayuda
Gracias!
|
|
|
En línea
|
|
|
|
fary
|
Lo cierto es que no entiendo el funcionamiento y me interesa mucho.. si pudieras poner otro ejemplo, expicado sería de gran ayuda
Gracias!
Fijate bien como declara las api: Private Declare Function URLDownloadToFile Lib "urlmon" Alias "#216" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long @LeandroA donde puedo ver ls ordinales de las api? salu2!
|
|
|
En línea
|
Un byte a la izquierda.
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
El problema de los ordinales es que no son estaticos ... y claro, no sabemos cuando cambian... Asi que bien, se puede hacer la comprobacion que tu haces, pero para bien tendriamos que tener una buena lista de ordinales, ya que posiblemente tambien varien en las versiones para servidores y esas cosas.... Una formas mas bonita de sacar el MajorVersion: 'KERNEL32 Private Declare Function GetVersion Lib "KERNEL32" () As Long Sub Main() MsgBox (GetVersion And &HFF) End Sub
Sin estructuras ni leches Date cuenta que el MajorVersion para XP es el mismo que para W$2000 y W$2003... asi que hay que filtrar con mas detalle... http://msdn.microsoft.com/en-us/library/ms724832(v=VS.85).aspx Saludos
|
|
« Última modificación: 13 Septiembre 2010, 17:20 pm por Karcrack »
|
En línea
|
|
|
|
burbu_1
Desconectado
Mensajes: 159
hamen gaoz
|
Muy buena Leandro , es un poco más jaleo que usar esos fantásticos Invoke que andan por ahí, pero seguro que resulta muy útil. Una pregunta que igual se sale un poco del tema.... por qué se pone ese símbolo # delante del ordinal. Lo había visto con números muy grandes pero estos son bajitos donde puedo ver ls ordinales de las api?
Con el PE Explorer abres la dll , miras las funciones que exporta y ahí aparecen
|
|
|
En línea
|
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Una pregunta que igual se sale un poco del tema.... por qué se pone ese símbolo # delante del ordinal. Lo había visto con números muy grandes pero estos son bajitos Cuando la almohadilla ( #) va detras de un numero esto significa que es un Double... Pero fijate que lo que hay ahi es una cadena de texto "#XXX"... Y puesto asi lo que hace es especificar que se cargue la funcion por ordinal y no por nombre...
|
|
|
En línea
|
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Interesante Leandro, cada vez mas seguido estoy viendo codes con esta manera de declarar, me imaginé que venía por el lado de los AV ... confimado entonces.
Hice una comparacion rápida con Con XP-PRO SP2 y SP3, en kernel32:
LoadLibrary = 578 (SP2) LoadLibrary = 581 (SP3)
GetProcAddress = 408 (SP2) GetProcAddress = 409 (SP3)
Karcrack: muy bonita esa Getversion, no habrá algo igual de bonita para la Minor ?
|
|
|
En línea
|
Adrian Desanti
|
|
|
Karcrack
Desconectado
Mensajes: 2.416
Se siente observado ¬¬'
|
Karcrack: muy bonita esa Getversion, no habrá algo igual de bonita para la Minor ?
(GetVersion() And &HFF00&) \ &H100
|
|
|
En línea
|
|
|
|
Dessa
Desconectado
Mensajes: 624
|
Buena Karcrack, mirá si será bonita... que hasta funciona en Windows millenium !!!
|
|
|
En línea
|
Adrian Desanti
|
|
|
|
|