Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Cargar dinamicamente una dll en VB6

Mi duda es que quiero cargar una dll que he creado pero quiero cargarla dinamicamente en un binario que tengo de VB6, o sea, no tengo los fuentes de dicho binario.
Si fuese en C o C++ podriamos usar LoadLibrary, GetModuleHandle, GetProcAddress, y FreeLibrary para cargar la dll, usar sus funciones y por ultimo liberar la dll.
En VB6 por lo visto no puedo hacer eso ni desde un depurador injertando el codigo a mano ya que no aparecen referencias para esas funciones y si pongo los calls a fuego, por ejemplo un "call LoadLibrary", solo funcionaria en mi maquina. ¿De que manera puedo hacer eso en un binario de VB?
Responder Con Cita
  #2  
Antiguo 31-12-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Se me olvido decir que en la Import Table no hay referencia a Kernel32.dll por lo que no está en la carga inicial y no se tiene acceso a sus funciones.
Responder Con Cita
  #3  
Antiguo 02-01-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
He estado fuera de casa en estos días y no he podido contestar.

No deberías tener problemas para inyectar una dll en cualquier proceso que corra en windows, siempre que respetes la compilación en 32bits ó 64 bits, según sea el caso. Aquí tienes una forma de hacerlo. Es independiente del lenguaje original, por lo tanto es igual que el binario provenga de BV u otro.

El hecho de que ciertas APIs no figuren en la IAT del proceso a inyectar, no quiere decir que no las puedas usar. Todo proceso carga Kernel32.dll, para más curiosidad revisa esto: Shellcode en C compatible con distintas inyecciones

Saludos.
Responder Con Cita
  #4  
Antiguo 03-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
al final lo hice de otra manera. Como la aplicacion corre dentro de un loader debugger, lo que hago es usar VirtualAllocEx y solicito memoria para copiar las funciones de la dll. Luego pongo unos bps donde deseo y desde esas zonas injerto los push necesarios, el call correspondiente y el retn. De todos modos me interesa mucho tu codigo pero tengo una duda. En xp si en un pc llamas a una api, siempre obtendrás el mismo hmodule pero, segun tengo entendido, a partir de Vista ya no es asi y puede cambiar entre ejecuciones y veo que LoadLibrary lo obtienes en tu proceso ¿No daria problemas en Vista/7/8?
Responder Con Cita
  #5  
Antiguo 03-01-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Las inyecciones en win32 sea WinXP, Vista, Win7 o Win8 funcionan localizando la API LoadLibrary, o cualquiera desde el proceso inyector. Pero tienes razón en que MS$ puede cambiar la política de la localización de las direcciones de la API. Para solventar el problema, realicé este ejemplo de shellcode que localiza el BaseAddress de kernel32.dll. Seoane lo hizo de esta otra manera. Así conoceremos las direcciones de las API desde el mismo proceso anfitrión, y no desde el inyector.


Saludos.
Responder Con Cita
  #6  
Antiguo 03-01-2015
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
claro,lo que varia es la posicion base donde se carga la dll pero si puedes ejecutar esas funciones desde el anfitrion pues resuelves el problema. Ahora mismo estoy encamado con fiebre pero cuando me encuentre mejor los miro con mas detenimiento ya que en delphi no me entero mucho. Otra cosa amigo, si uso VirtualAllocEx, cuando se cierra la aplicacion a la que le he asignado la memoria ¿Se libera sola la memoria o tengo que hacerlo yo a mano con VirtualFreeEx? Segun veo con Cheat engine, cuando se cierra la aplicacion la memoria se vuelve inaccesible pero no lo tengo claro.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Crear Frame Dinámicamente chinchan C++ Builder 2 09-05-2008 14:07:08
Crear ODBC dinámicamente? HccSoft Conexión con bases de datos 3 18-03-2008 15:19:32
Crear form dinamicamente karocs Varios 1 15-09-2005 20:15:18
insertar dinamicamente YolandaM Varios 4 16-03-2005 10:21:41
Cambiar iconos dinamicamente Diegoval Gráficos 1 25-06-2004 15:35:04


La franja horaria es GMT +2. Ahora son las 13:45:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi