Autor
|
Tema: ¿Cómo detectar cambios en .text? (Leído 6,370 veces)
|
Shout
Desconectado
Mensajes: 191
Acid
|
Buenas! Hace tiempo que me pica la... curiosidad, y me pregunto: hay alguna manera de saber qué partes del código se están modificando por un DLL? Es decir: -> Tengo something.exe -> Abro something.exe, e inyecto (LoadLibrary, o p.ej. LdrLoadDll) plugin.dll Suponiendo que el plugin, en alguna parte, tiene este código: *(BYTE*) 0xAABBCCDD = 0xC3; // ret a una función
Cómo puedo saber la dirección y los bytes que escribe, sin desempacar ni analizar el DLL? (es decir, en runtime) Me han dicho que haga hook a "Virtual Instruction Bus", pero se necesita un driver para eso, y no es demasiado recomendable tocarlo a la ligera...
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Siempre podes comparar los bytes del binario en disco con los que estan en memoria, es basicamente lo que hace la extension !chkimg (Ext.dll, de los depuradores de Microsoft como WinDbg); aunque no te dira quien modifico que directamente. Si es una DLL va a tener que cambiar la proteccion de memoria para poder escribir y directa o indirectamente usara un servicio del S.O. via NTDLL, podrias interceptarlo ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Shout
Desconectado
Mensajes: 191
Acid
|
Siempre podes comparar los bytes del binario en disco con los que estan en memoria, es basicamente lo que hace la extension !chkimg (Ext.dll, de los depuradores de Microsoft como WinDbg); aunque no te dira quien modifico que directamente. Si es una DLL va a tener que cambiar la proteccion de memoria para poder escribir y directa o indirectamente usara un servicio del S.O. via NTDLL, podrias interceptarlo ...
Lo de VirtualProtect lo he pensado y voy a probarlo, pero me da la sensación de que no será demasiado efectivo. Si no me equivoco, VirtualProtect cambia los permisos de la página entera y no sólo de lo que le indicas (vamos, que pasar 5 o pasar 15 como longitud en bytes acaba cubriendo una página) No conoces ninguna otra manera de interceptar las modificaciones? p.ej. mov eax, DAC0DEh; mov byte ptr [eax], C3h;
Esa parte no se puede hookear de ningún modo, ya que son puras instrucciones que van directas al CPU...
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
mov eax, DAC0DEh; mov byte ptr [eax], C3h;
Esa parte no se puede hookear de ningún modo, ya que son puras instrucciones que van directas al CPU... Pero eso sin previamente cambiar la proteccion de la memoria NO FUNCIONA; al menos siempre que estemos hablando de codigo.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
Shout
Desconectado
Mensajes: 191
Acid
|
Pero eso sin previamente cambiar la proteccion de la memoria NO FUNCIONA; al menos siempre que estemos hablando de codigo.
Yep, he editado el mensaje (estoy desde tapatalk y no me salía tu respuesta). Fíjate.
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
MCKSys Argentina
|
Podrias usar VirtualProtect sobre la sección de codigo con el flag PAGE_GUARD. Eso raisea una excepcion cada vez que se accede al codigo.
Con un handler podrias saber quien es el que esta tratando de acceder.
Las contras son que al ejecutar, tambien saltará la excepcion y que, ademas, el flag es one-shot; osea, deberas proteger nuevamente la sección despues de cada excepcion.
Saludos!
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Shout
Desconectado
Mensajes: 191
Acid
|
Podrias usar VirtualProtect sobre la sección de codigo con el flag PAGE_GUARD. Eso raisea una excepcion cada vez que se accede al codigo.
Con un handler podrias saber quien es el que esta tratando de acceder.
Las contras son que al ejecutar, tambien saltará la excepcion y que, ademas, el flag es one-shot; osea, deberas proteger nuevamente la sección despues de cada excepcion.
Saludos!
¡Perfecto! Parece ser bastante viable. A la que vuelva a casa, lo pruebo y reporto La idea es muy buena. Muchas gracias!
|
|
|
En línea
|
I'll bring you death and pestilence, I'll bring you down on my own
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Yep, he editado el mensaje (estoy desde tapatalk y no me salía tu respuesta). Fíjate.
Las paginas son de 4KB, incluso podrias guardar en un buffer antes de llamar a la funcion original y comparar X tiempo despues ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
MCKSys Argentina
|
Las paginas son de 4KB, incluso podrias guardar en un buffer antes de llamar a la funcion original y comparar X tiempo despues ...
O bien implementar un CRC de codigo. Hay muchas opciones...
|
|
|
En línea
|
MCKSys Argentina "Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."
|
|
|
Eternal Idol
Kernel coder
Moderador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
O bien implementar un CRC de codigo. Hay muchas opciones...
Seguro aunque no te permitiria mas que saber que hubo cambios, algo que se podria derivar directamente de interceptar el cambio de proteccion de la pagina ...
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Cómo detectar mediante la Api cambios en la información del disco duro.
« 1 2 »
Programación Visual Basic
|
goodbye
|
12
|
7,814
|
2 Agosto 2005, 00:45 am
por Slasher-K
|
|
|
Detectar cambios en el sistema con Regshot
Seguridad
|
madpitbull_99
|
4
|
10,356
|
22 Enero 2011, 15:04 pm
por Garfield07
|
|
|
Detectar cambios mysql con php socket
PHP
|
70N1
|
6
|
8,229
|
9 Mayo 2014, 12:33 pm
por 70N1
|
|
|
detectar parrafo de registro mysql tipo text
PHP
|
basickdagger
|
3
|
2,240
|
20 Enero 2015, 19:18 pm
por MinusFour
|
|
|
Como detectar cambios en un listbox en tiempo de ejecución
Programación Visual Basic
|
rapbyone
|
1
|
2,725
|
20 Agosto 2016, 04:55 am
por Eleкtro
|
|