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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  api hook
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: api hook  (Leído 5,648 veces)
Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
api hook
« en: 18 Marzo 2011, 01:20 am »

holaaa que tal, queria preguntar una cosita...
Yo tengo programada una aplicacion que funciona como proxy, pero resulta que al pasar todo el flujo de paquetes de entradas y de salidas, y a su vez la misma aplicacion estar haciendo bastantes cosas (como readprocessmemory, etc etc) al parecer genera un poco de LAG entre la comunicacion...

Lo que queria saber es si es posible evitar que dependa de mi aplicacion, es decir, hacer un api hook al winsock e interceptar send y recv para mandarlos al handledata de mi aplicacion...

Estuve buscando por internet, hace unos dias encontre un articulo de unclose de cobain si no me equivoco, pero lo mire en ese momento y no pude entenderlo, resulta que ahora no logro encontrarlo!

Otra cosa que vi es el post:
http://foro.elhacker.net/analisis_y_diseno_de_malware/api_hook_delphi_espiar_las_comunicaciones_de_otros_procesos-t263615.0.html

Pero esta el delphi y por desgracia no se convertirlo, y creo que tampoco sea tan facil...
Gracias!!!

edit: ya encontre el unclose de cobain, pero no logre nada :(


« Última modificación: 18 Marzo 2011, 02:16 am por Cromatico » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: api hook
« Respuesta #1 en: 18 Marzo 2011, 04:46 am »

.
No se delphi, pero lo que si se es identificar las apis y hay hay apis mas que nada; usa el buscador y veras unas ligas a unos proyectos que hookean apis ( puse las ligas anteriormente ).

Dulces Lunas!¡.
.


En línea

The Dark Shadow is my passion.
79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: api hook
« Respuesta #2 en: 18 Marzo 2011, 14:48 pm »

HOLA!!!

Mira, te lo traduje lo mejor que pude, no se como usar pointers en vb6 asique eso lo cas a tener que hacer vos.

Te dejo el codigo del formulario, la Dll la podes compilar calculo.
Y usa una libreria psApi, encontre una para vb6 pero no tiene todas las funciones fijate si la encontras. Entonces tambien te queda por ponerle psapi. a todas sus funciones.

*Ahh, el codigo esta traducido, no esta funcional para nada, aviso.

Código
  1. Dim psAPI As New mPSAPI 'con esto tenes que hacer psapi.funcion
  2.  
  3. 'NOTAS:  NIL ES PARA VACIAR LOS POINTERS, NO SE ESO EN VB6
  4.  
  5. Private Sub btnInyectar_Click()
  6.  Dim Procesos(1 To 1024) As Long
  7.  Dim Needed As Long
  8.  Dim i As Long
  9.  Dim Process As Long ' aca no se me ocurio que poner \\ Process, Thread: THandle;
  10.  Dim Thread As Long ' aca no se me ocurio que poner \\ Process, Thread: THandle;
  11.  Dim ModName(0 To Max_Path) As Byte
  12.  'RemLibPath : PChar; \\aca un pointer a un caracter de alguna variable
  13.  Dim ExitCode As Long
  14.  Dim LibPath As String
  15.  Dim Target As String
  16.  
  17.  If lsbMain.ListIndex >= 0 Then
  18.    Target = lsbMain.List(lsbMain.ListIndex)
  19.    LibPath = App.Path & "\Hook.dll"
  20.    If EnumProcesses(Procesos, LenB(Procesos), Needed) Then
  21.      For i = 1 To (Needed \ LenB(DWORD))
  22.        Process = OpenProcess(PROCESS_ALL_ACCESS, False, Procesos(i))
  23.        If Process <> 0 Then
  24.          If GetModuleFileNameEx(Process, 0, ModName, LenB(ModName) - 1) > 0 Then
  25.            If AnsiStrPos(ModName, PChar(Target)) <> nil Then
  26.              RemLibPath = VirtualAllocEx(Process, nil, Len(LibPath) + 1, MEM_COMMIT, PAGE_READWRITE)
  27.              If RemLibPath <> nil Then
  28.                If WriteProcessMemory(Process, RemLibPath, PChar(LibPath), Len(LibPath), PDWORD(nil)) Then ' no se si esta bien la ultima parte
  29.                'If WriteProcessMemory(Process, RemLibPath, PChar(LibPath), Len(LibPath), PDWORD(nil)^) Then
  30.                  Thread = CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA"), RemLibPath, 0, PDWORD(nil)) ' no se si esta bien la ultima parte
  31.                  'Thread = CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA'), RemLibPath, 0, PDWORD(nil)^)
  32.                  If Thread <> 0 Then
  33.                    'WaitForSingleObject(Thread,INFINITE );  NOSE
  34.                    'GetExitCodeThread(Thread,ExitCode); NOSE
  35.                    CloseHandle (Thread)
  36.                  End If
  37.                End If
  38.                'VirtualFreeEx(Process,RemLibPath,Length(LibPath)+1,MEM_RELEASE); ¿? NOSE
  39.              End If
  40.            End If
  41.          End If
  42.          CloseHandle (Process)
  43.        End If
  44.      Next
  45.    End If
  46.  End If
  47. End Sub
  48.  
  49. Private Sub btnRefrescar_Click()
  50.  Dim Procesos(1 To 1024) As Long
  51.  Dim Needed As Long
  52.  Dim i As Long
  53.  Process As Long ' aca no se me ocurio que poner \\ Process: THandle
  54.  ModName(0 To Max_Path) As Byte
  55.  lsbMain.Clear
  56.  If EnumProcesses(Procesos, UBound(Procesos), Needed) Then
  57.    For i = 1 To (Needed \ LenB(DWORD))
  58.      Process = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, False, Procesos(i))
  59.      If Process <> 0 Then
  60.        If GetModuleFileNameEx(Process, 0, ModName, LenB(ModName) - 1) > 0 Then
  61.          lsbMain.Add ModName
  62.        End If
  63.        CloseHandle (Process)
  64.      End If
  65.    Next
  66.  End If
  67. End Sub
  68.  

GRACIAS POR LEER!!!
« Última modificación: 18 Marzo 2011, 14:51 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: api hook
« Respuesta #3 en: 18 Marzo 2011, 14:59 pm »

Hola!! Gracias 79137913 por tomarte la molestia!
Les comento, con mucha busqueda y ayuda logre compilar una dll en DEV C++, que hookea connect send y recv, y la pude inyectar perfectamente en el proceso que queria, la misma dll guarda en un archivo .txt todos los paquetes enviados y recibidos, lo que me faltaria, es enviar ese flujo de paquetes a vb, estuve investigando pero solo encontre formas de interactuar desde vb a c++ enviandole comandos, pero no alrevez, es decir, que todos los eventos de la funcion send de la dll los mande a vb automaticamente, quizas tenga que preguntar en el foro de d/c++

Gracias!!
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: api hook
« Respuesta #4 en: 18 Marzo 2011, 15:34 pm »

HOLA!!!

Con command$ no podes?

Cuando llamas a un ejecutable hecho en vb6 "ejecutable.exe parametros"

En command$ aparecen los parametros.


Sino...


Podes hacer que el programa en c++ mande una pulsacion al form de vb6 entonces cuando este la pulsacion vos abris el archivo de texto (la pulsacion te indicaria que se modifico el archivo de texto).

GRACIAS POR LEER!!!
« Última modificación: 18 Marzo 2011, 15:36 pm por 79137913 » En línea

"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

 79137913                          *Shadow Scouts Team*
Cromatico

Desconectado Desconectado

Mensajes: 110


Ver Perfil
Re: api hook
« Respuesta #5 en: 18 Marzo 2011, 16:10 pm »

claro pero creo q command$ enviaria los parametros solo al abrirlo (corregime)...
Lo que quiero hacer es hacerlo funcionar como un proxy, es decir, tiene que estar abierta mi aplicacion vb, inyectada la dll en el proceso que quiera, y la dll enviar la entrada y salida de paquetes a vb...
Como dije, por ahora ya logre inyectar la dll, hookear connect, send y recv, y guardar logs de estas 3 funcione (entrada y salida de paquetes) en un archivo de texto, la dll esta en c++...

Pero bueno no se como transferir esa informacion a vb para plasmarla en un richtextbox por ejemplo... Leer el archivo de log que guarda la dll seria medio "trucho" (no me mal interpretes no va contra vos, es que no encontre otra manera de decirlo :P, en otro caso seria una buena alternativa) ya que seria lento al estar todo el tiempo modificando el log la dll y yo leyendolo, SUPONGO...

Si alguien tiene algun tutorial de comunicacion entre dll c++ y vb me puede tirar una mano y pasarmelo porfavor :P

Los que encontre en internet solo me muestran como enviar una accion desde vb a dll pero no desde la dll a vb directamente....

Gracias!
« Última modificación: 18 Marzo 2011, 16:52 pm por Cromatico » En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: api hook
« Respuesta #6 en: 18 Marzo 2011, 17:47 pm »

.
 * Pchar si no mal recuerdo en vb6 es strptr(). aun que debes manejar los byval...
 * ^  me parece que se interpreta como en C/C++ es decir un Xor
 * PDWORD() no es necesario. se hace un Casting interno en el api (es solo una suposicion ya que no veo que se este ahciendo algo mas con las variables involucraas). pero en dado caso que lo requieras aqui tienes:

Código
  1.  
  2.    Private Function LoWord(ByVal Numero As Long) As Long
  3.        LoWord = Numero And &HFFFF&
  4.    End Function
  5.  
  6.    Private Function HiWord(ByVal Numero As Long) As Long
  7.        HiWord = Numero \ &H10000 And &HFFFF&
  8.    End Function
  9.  
  10.    Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long
  11.       MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
  12.    End Function
  13.  
  14.  

Temibles Lunas!¡.
.
« Última modificación: 18 Marzo 2011, 17:51 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
ntaryl

Desconectado Desconectado

Mensajes: 95



Ver Perfil
Re: api hook
« Respuesta #7 en: 21 Marzo 2011, 18:52 pm »

check this   
http://files.codes-sources.com/fichier_fullscreen.aspx?id=26027&f=1-Sniffer%5CfrmMain.frm&lang=en
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[VB6] Creacion de un Keylogger 'avanzado' {HOOK} « 1 2 »
Programación Visual Basic
Karcrack 18 27,916 Último mensaje 11 Enero 2012, 17:38 pm
por Mr. X
VEH Api Hook
Análisis y Diseño de Malware
bizco 9 8,504 Último mensaje 10 Junio 2012, 01:39 am
por pipaman
VB6 Hook Api
Programación Visual Basic
philipjfry99 0 2,678 Último mensaje 19 Marzo 2011, 23:51 pm
por philipjfry99
[C] Hook en DLL
Programación C/C++
calk9 9 4,550 Último mensaje 17 Septiembre 2011, 20:19 pm
por Eternal Idol
Sabeis por que no se crea el hook?. codedom compileinmemory
.NET (C#, VB.NET, ASP)
70N1 1 2,331 Último mensaje 2 Febrero 2012, 17:27 pm
por 70N1
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines