Esta es la base de un generador de loader-patcher de procesos que estoy proyectando.
Lo que hace es inyectar una dll
(patcher.dll) en el espacio de direcciones del proceso a parchear.
Cuando este proceso carga esa dll,
se ejecutan las rutinas escritas en la dll y se restauran los cambios que
han debido hacerse en el proceso para cargar la dll parcheadora.
La llamada ahora sólo se inserta en el punto de entrada del programa a parchear. Hemos escogido NOTEPAD como el proceso objeto. Debes colocar NOTEPAD.EXE en el mismo directorio donde tengas LoaderGen.exe y PATCHER.DLL.
Cuando el proceso objeto se inicia, hace la llamada a la DLL, se despliega una MessageBox. Al cerrarse ésta, la misma DLL restaura y ejecuta las instrucciones originales.
La idea se me ha ocurrido a raiz de una discusión en el antiguo foro de ingienería inversa de WKT.
El proceso general es más o menos este:
1. Desde el loader obtener las direcciones de LoadLibraryA, FreeLibrary y otras más.
2. Salvar los datos originales del proceso objeto en un espacio de la dll (con ReadProcessMemory).
3. Escribir en la víctima (con WriteProcessMemory) las llamadas a mi_dll.
4. Cuando el objeto cargue mi_dll (con LoadLibrary) se ejecuta alguna rutina, que puede consistir en un parche. En este caso desplegamos un mensaje.
5. Cuando el objeto libere mi_dll, (con FreeLibrary) recupera los datos originales y los ejecuta.
Agregué código para
localizar la dir del punto de entrada del proceso. Esto es hecho -antes
de crear el proceso objeto- abriendo, y proyectando el archivo co el proceso
objeto, y leyendo desde él este valor. Por ahora es el punto desde
donde el proceso objaeto carga la DLL.
n u M I T_o r
[email protected]
http:/members.nbci.com/numit_or/asm.html