Inyeccion DLL[Duda]
Hola
Este es mi primer post en el foro. Estoy estudiando la inyección de DLL en un proceso. Hasta el momento he conseguido hacer un Hook (metodo trampolin) a un MessageBox. La duda que tengo es la siguiente. Yo tengo un programa de este estilo, pero con mucho más código: Código:
program Project2; Espero me puedan ayudar. Muchísimas gracias de antemano. Un saludo |
En el foro tienes ejemplos de como inyectar una dll. De entrada, necesitas tener una dll que inyectar y tu código no lo es.
Saludos. |
Hola escafandra
Gracias por tu respuesta. La DLL que quiero inyectar es esta: Código:
library Sumar; Ahora mismo estoy trabajando con este codigo, que me funciona en Windows XP: Código:
procedure InjectDll(PID: dword; DLL: pChar); Tengo unas dudas, ¿porque obtenemos la dirección de LoadLibrary? He leido el algun tutorial, pero no se porque motivo es, que este codigo no funciona en Sistemas Operativos de 64 bits. ¿Por que razon no funciona? Yo no le podido probar en sistemas operativos de 64 bits porque no tengo. Muchisimas gracias de antemano. Saludos |
Aclarando dudas:
Cita:
LoadLibrary es la API que se usa para cargar una dll en el proceso actual y usa un parámetro que es el nombre de la dll. La inyección se basa en obligar a otro proceso a cargar una dll, CreateRemoteThread hace esa función ejecutando en el proceso anfitrión LoadLibrary con el nombre de la dll que queremos inyectar. Por eso necesitamos conocer un puntero a Loadlíbrary y reservar memoria en el espacio de direcciones del priceso anfitrión para escribir el nombre de la dll que pasaremos a LoadLibrary. El truco se basa en que las direcciones de las APIs del sistema son idénticas para todos los procesos. Cita:
no se puede inyectar código compilado para 32bits en un proceso 64bits. Saludos. |
Perdón por la errata:
Cita:
Un proceso compilado para 64bits no puede usar una dll compilada para 32bits, por lo tanto no se puede inyectar código compilado para 32bits en un proceso 64bits. Saludos. |
Hola escafandra
Referente a la API CreateRemoteThread me ha quedado todo muy claro. Ahora si lo que entiendo muy bien. Sinceramente, muchisimas gracias escafandra. El tema de 32 bits y 64 bits también, creo , que me ha quedado claro. Esto es lo que he entendido: - Para utilizar una DLL en 32 bits, se deberá crear esa DLL en una arquitectura 32 bits. Ejemplo: Windows Vista 32 bits,... - Para utilizar una DLL en 64 bits, se deberá crear esa DLL en una arquitectura 64 bits. Ejemplo: Windows 7 64 bits,... Espero haberlo entendido bien. Una vez entendido el tema de la inyección DLL bastante bien, quería aprender el tema de Hook API porque aunque algo hecho todavía no lo entiendo del todo bien. El código con el que he estado trabajando es el siguiente(Autor: Robert Milan ): Aplicación Test: Código:
procedure TForm1.Button1Click(Sender: TObject); Código:
procedure TForm1.Button1Click(Sender: TObject); Código:
(************************************************************) Mas o menos entiendo que hace el codigo y en que consiste la tecnica del trampolin. Pero tengo unas dudas: - Como se que $E9 hace referencia a JMP. - Y la operación inversa. Como sacar que "codigo hexadecimal" tiene JMP. Mirando google he visto otros codigos que hacen uso de la funcion SetWindowsHookEx, CallNextHookEx y UnhookWindowsHookEx para hacer un Hook. Quería saber la diferencia que hay entre hacer un hook con el metodo trampolin y el hacer el hook utilizando las 3 apis de arriba. Tengo un codigo que hacer un hook del 2º tipo, pero sinceramente no lo entiendo. Estudiando y leyendo, creo que la respuesta es que el metodo trampolin hace un hook INDIVIDUAL a una api de un UNICO proceso, mientras que con SetWindowsHookEx se hace un hook GLOBAL que es procesado por un UNICO proceso, pero sinceramente no estoy seguro de si es correcto lo que he dicho. Muchisimas gracias escafandra por la ayuda!!! Siento lo largo que me ha quedado el post y espero que me haya explicado con claridad. Saludos |
Cita:
Cita:
Saludos. |
Ok, Muchísimas gracias Escafandra!!
¿Y donde puedo mirar o como puedo saber que JMP es E9?¿Y saber que E9 es JMP? Un saludo |
Cita:
El desensamblador de delphi también te serviría. También puedes consultar tablas de opcodes como esta. Saludos. |
ok, muchísimas gracias escafandra!!
Seguro que me ayuda para entender mejor los opcodes. Saludos |
La franja horaria es GMT +2. Ahora son las 13:34:05. |
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