Autor
|
Tema: api hook (Leído 5,890 veces)
|
Cromatico
Desconectado
Mensajes: 110
|
|
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.htmlPero 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
Mensajes: 3.158
I'Love...!¡.
|
. 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
Mensajes: 1.169
4 Esquinas
|
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. Dim psAPI As New mPSAPI 'con esto tenes que hacer psapi.funcion 'NOTAS: NIL ES PARA VACIAR LOS POINTERS, NO SE ESO EN VB6 Private Sub btnInyectar_Click() Dim Procesos(1 To 1024) As Long Dim Needed As Long Dim i As Long Dim Process As Long ' aca no se me ocurio que poner \\ Process, Thread: THandle; Dim Thread As Long ' aca no se me ocurio que poner \\ Process, Thread: THandle; Dim ModName(0 To Max_Path) As Byte 'RemLibPath : PChar; \\aca un pointer a un caracter de alguna variable Dim ExitCode As Long Dim LibPath As String Dim Target As String If lsbMain.ListIndex >= 0 Then Target = lsbMain.List(lsbMain.ListIndex) LibPath = App.Path & "\Hook.dll" If EnumProcesses(Procesos, LenB(Procesos), Needed) Then For i = 1 To (Needed \ LenB(DWORD)) Process = OpenProcess(PROCESS_ALL_ACCESS, False, Procesos(i)) If Process <> 0 Then If GetModuleFileNameEx(Process, 0, ModName, LenB(ModName) - 1) > 0 Then If AnsiStrPos(ModName, PChar(Target)) <> nil Then RemLibPath = VirtualAllocEx(Process, nil, Len(LibPath) + 1, MEM_COMMIT, PAGE_READWRITE) If RemLibPath <> nil Then If WriteProcessMemory(Process, RemLibPath, PChar(LibPath), Len(LibPath), PDWORD(nil)) Then ' no se si esta bien la ultima parte 'If WriteProcessMemory(Process, RemLibPath, PChar(LibPath), Len(LibPath), PDWORD(nil)^) Then Thread = CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle("Kernel32"), "LoadLibraryA"), RemLibPath, 0, PDWORD(nil)) ' no se si esta bien la ultima parte 'Thread = CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('Kernel32'), 'LoadLibraryA'), RemLibPath, 0, PDWORD(nil)^) If Thread <> 0 Then 'WaitForSingleObject(Thread,INFINITE ); NOSE 'GetExitCodeThread(Thread,ExitCode); NOSE CloseHandle (Thread) End If End If 'VirtualFreeEx(Process,RemLibPath,Length(LibPath)+1,MEM_RELEASE); ¿? NOSE End If End If End If CloseHandle (Process) End If Next End If End If End Sub Private Sub btnRefrescar_Click() Dim Procesos(1 To 1024) As Long Dim Needed As Long Dim i As Long Process As Long ' aca no se me ocurio que poner \\ Process: THandle ModName(0 To Max_Path) As Byte lsbMain.Clear If EnumProcesses(Procesos, UBound(Procesos), Needed) Then For i = 1 To (Needed \ LenB(DWORD)) Process = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, False, Procesos(i)) If Process <> 0 Then If GetModuleFileNameEx(Process, 0, ModName, LenB(ModName) - 1) > 0 Then lsbMain.Add ModName End If CloseHandle (Process) End If Next End If End Sub
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
Mensajes: 110
|
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
Mensajes: 1.169
4 Esquinas
|
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
Mensajes: 110
|
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 , 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 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
Mensajes: 3.158
I'Love...!¡.
|
. * 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: Private Function LoWord(ByVal Numero As Long) As Long LoWord = Numero And &HFFFF& End Function Private Function HiWord(ByVal Numero As Long) As Long HiWord = Numero \ &H10000 And &HFFFF& End Function Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&) End Function
Temibles Lunas!¡. .
|
|
« Última modificación: 18 Marzo 2011, 17:51 pm por BlackZeroX▓▓▒▒░░ »
|
En línea
|
The Dark Shadow is my passion.
|
|
|
ntaryl
Desconectado
Mensajes: 95
|
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[VB6] Creacion de un Keylogger 'avanzado' {HOOK}
« 1 2 »
Programación Visual Basic
|
Karcrack
|
18
|
28,727
|
11 Enero 2012, 17:38 pm
por Mr. X
|
|
|
VEH Api Hook
Análisis y Diseño de Malware
|
bizco
|
9
|
8,864
|
10 Junio 2012, 01:39 am
por pipaman
|
|
|
VB6 Hook Api
Programación Visual Basic
|
philipjfry99
|
0
|
2,776
|
19 Marzo 2011, 23:51 pm
por philipjfry99
|
|
|
[C] Hook en DLL
Programación C/C++
|
calk9
|
9
|
4,854
|
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,461
|
2 Febrero 2012, 17:27 pm
por 70N1
|
|