elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  otra forma de llamar a una funcion de una DLL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: otra forma de llamar a una funcion de una DLL  (Leído 2,061 veces)
AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
otra forma de llamar a una funcion de una DLL
« en: 12 Julio 2011, 16:33 pm »

consiste en escribir una funcion de usuario publica con los parametros que tendria la funcion api, luego  sobreescribir el inicio de esa funcion con la instruccion en ensablador "jmp" (salto a una direccion) para saltar a una direccion que seria la direccion de la api que queremos llamar, luego al llamar a esa funcion de usuario ejecutariamos la api, ejemplo de como llamar a ShowWindow sin haberlo puesto en la sección Declaraciones:

en un form1: (abrir el notepad para ocultarlo y volverlo visble)

form1
Código
  1. 'form1
  2. 'agregar controles:
  3. '1 command1
  4. '1 command2
  5.  
  6. Option Explicit
  7.  
  8.  
  9. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  10.  
  11. Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  12.  
  13. Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long
  14.  
  15. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
  16.  
  17. Private Declare Function VirtualProtect Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flNewProtect As Long, lpflOldProtect As Long) As Long
  18.  
  19.  
  20.  
  21. Dim hModule As Long
  22. Dim DirProc As Long
  23. Dim DirMiFun As Long
  24. Dim Codigo(1 To 20) As Byte
  25. Dim Distancia As Long
  26. Dim ViejaProte As Long
  27.  
  28. Const jmp = &HE9
  29.  
  30. Const PAGE_EXECUTE_READWRITE As Long = &H40
  31.  
  32.  
  33. Private Sub Command1_Click()
  34.    Dim hwnd As Long
  35.    hwnd = FindWindow("notepad", vbNullString)
  36.    If hwnd = 0 Then
  37.        MsgBox "No se encontro el notepad", vbCritical, ""
  38.        Exit Sub
  39.    Else
  40.        Call MostrarVentana(hwnd, 5)
  41.    End If
  42. End Sub
  43.  
  44. Private Sub Command2_Click()
  45.    Dim hwnd As Long
  46.    hwnd = FindWindow("notepad", vbNullString)
  47.    If hwnd = 0 Then
  48.        MsgBox "No se encontro el notepad", vbCritical, ""
  49.        Exit Sub
  50.    Else
  51.        Call MostrarVentana(hwnd, 0)
  52.    End If
  53. End Sub
  54.  
  55. Private Sub Form_Load()
  56.    hModule = GetModuleHandle("user32")
  57.    DirProc = GetProcAddress(hModule, "ShowWindow")
  58.    DirMiFun = ObtenerMiDir(AddressOf MostrarVentana)
  59.    Distancia = DirProc - DirMiFun - Len(Distancia) - 1
  60.    'intenta cambiar los atributos de esa zona de memoria para sobreescribirlo
  61.    'si se sobreescribe sin cambiar los atributos la aplicacion se cerrara
  62.    If VirtualProtect(ByVal DirMiFun, 1 + Len(Distancia), PAGE_EXECUTE_READWRITE, ViejaProte) <> 0 Then
  63.        Codigo(1) = jmp
  64.        Call CopyMemory(Codigo(2), Distancia, Len(Distancia))
  65.        Call CopyMemory(ByVal DirMiFun, Codigo(1), 1 + Len(Distancia))
  66.        MsgBox "Listo", vbInformation, ""
  67.    Else
  68.        MsgBox "No se pudo cambiar los atributos de la region de memoria: " & DirMiFun & " (MostrarVentana)", vbCritical, ""
  69.    End If
  70.    Command1.Caption = "notepad visible"
  71.    Command2.Caption = "notepad oculto"
  72. End Sub
  73.  
  74. Private Function ObtenerMiDir(FunAddress As Long) As Long
  75.    ObtenerMiDir = FunAddress
  76. End Function
  77.  


module1.bas
Código
  1. Option Explicit
  2.  
  3.  
  4. Public Function MostrarVentana(ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
  5.    'esto es nada mas para que tenga un sitio donde sobreescribir, por
  6.    'seguridad sin que vaya afectar a otras instrucciones
  7.    Dim algo As Boolean
  8.    algo = True
  9.    algo = False
  10. End Function
  11.  


edit:
para que funcione compilen el proyecto.


« Última modificación: 12 Julio 2011, 17:04 pm por alxspy » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: otra forma de llamar a una funcion de una DLL
« Respuesta #1 en: 12 Julio 2011, 16:48 pm »

No me funcionó en windows 7 :P


En línea

AlxSpy

Desconectado Desconectado

Mensajes: 137


Ver Perfil
Re: otra forma de llamar a una funcion de una DLL
« Respuesta #2 en: 12 Julio 2011, 16:50 pm »

compila el proyecto, lo probe en XP y 7 y si me anda.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: otra forma de llamar a una funcion de una DLL
« Respuesta #3 en: 12 Julio 2011, 16:57 pm »

Es verdad, funciona compilado :¬¬
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
llamar a una funcion
Programación Visual Basic
EpicMetal 1 1,464 Último mensaje 13 Febrero 2006, 23:29 pm
por Kizar
Llamar a una funcion
Programación Visual Basic
Kizar 3 1,841 Último mensaje 15 Diciembre 2006, 20:22 pm
por ~~
Llamar a una funcion dentro de una funcion
Java
Kerber0 3 38,100 Último mensaje 22 Noviembre 2008, 04:40 am
por joseprox
Llamar función de exe.
Programación C/C++
APOKLIPTICO 1 2,758 Último mensaje 16 Octubre 2010, 15:17 pm
por dooque
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
Programación C/C++
LobateZZZ 1 10,839 Último mensaje 14 Abril 2013, 03:07 am
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines