Proteger acceso memoria desde aplicación externa
Hola, estoy desarrollando una aplicación en Delphi7 en la que se muestran una serie de animaciones en Flash. La cuestión, es que estoy intentando proteger esas animaciones. Estoy trabajando con el componente f-in-box que he adquirido recientemente, con el que es posible cargar las animaciones desde TMemoryStream, pero resulta que es relativamente sencillo hacer un dump de las animaciones, cuando están cargadas y desencriptadas en la memoria... hay bastantes tutoriales y aplicaciones por internet para hacerlo.
Lo que quiero hacer son 2 cosas: - Por un lado, todos estos programas que he visto, necesitan identificar el proceso para buscar los SWF en la memoria asignada a él, con lo que si fuera posible anular la función GetWindowThreadProcessId y otras funciones usadas por estos programas para identificar mi aplicación, se complicaría su funcionamiento... incluso si se pudiera ocultar el PID de mi aplicación... - La segunda cosa podría ser anular y/o detectar ReadMemoryProcess (y otras funciones usadas para rastrear la memoria)... de forma que cuando una aplicación externa intente leer en la memoria usada por mi aplicación, para identificar los archivos SWF, se pueda forzar el cierre. No sé por dónde empezar... |
Hola, ¿qué hace tu programa, para qué sirve?
|
Lo que he comentado, va mostrando animaciones SWF de un curso multimedia, mediante el componente f-in-box.
Quiero evitar que roben las animaciones rastreando la memoria RAM... |
Investigando...
Se podría hacer un hook de la función ZwOpenProcess de las APIS de Windows, haciendo que devuelva STATUS_ACCESS_DENIED si el proceso es el mío, que es el que quiero proteger. ¿Alguien sabe cómo implementarlo? Gracias!! |
Para hacer un Hook a ZwOpenProcess debes hacerlo desde el Kernel, es decir, escribir un driver y éste depende del S.O. que uses. ZwOpenProcess. Un Hook al mismo Kernel.
Saludos. |
Gracias Escafandra. La página no existe...
|
Creo que este esto.
|
Cita:
Cita:
Desde un driver se puede hookear una API del Ring 0 y afectaría a cualquier proceso que se ejecute sin necesidad de inyecciones. La dificultad estriba en escribir el driver para cada versión de Windows. Normalmente requiere escrirse en C. Saludos. |
Cita:
|
Cita:
Saludos. |
escafandra,
Cita:
Pregunto: ¿Se puede publicar dicho código en un foro público? :confused: Saludos, Nelson. |
Cita:
Por otra parte, el objetivo de este tema puede ser solucionado con un Hook a la API tradicional con inyección de código como apuntaba Casimiro Notevi, aunque requerirá inyectar todos los procesos. Para esto es necesario realizar un Hook a la API CreateProcessInternalW para que se encargue de inyectar en cada nuevo proceso creado. En cualquier caso he de decir que si se trata de un S.O. de 64 bits, la inyección debe ser también con código compilado a 64 bits. Esto requiere, quizás, tener versiones preparadas para 32 y 64 bits, según el entorno que se quiera abarcar. Saludos. |
escafandra,
^\||/ Nelson. |
La franja horaria es GMT +2. Ahora son las 04:45:52. |
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