Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Proteger acceso memoria desde aplicación externa (https://www.clubdelphi.com/foros/showthread.php?t=88751)

frangarrob 26-07-2015 20:39:16

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...

Casimiro Notevi 26-07-2015 20:44:04

Hola, ¿qué hace tu programa, para qué sirve?

frangarrob 26-07-2015 20:52:38

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...

frangarrob 29-07-2015 11:59:35

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!!

escafandra 01-08-2015 02:30:09

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.

frangarrob 01-08-2015 18:37:16

Gracias Escafandra. La página no existe...

Casimiro Notevi 01-08-2015 18:41:49

Creo que este esto.

escafandra 02-08-2015 02:51:01

Cita:

Empezado por frangarrob (Mensaje 495128)
Gracias Escafandra. La página no existe...

Si existe pero está en un foro restringido.

Cita:

Empezado por Casimiro Notevi (Mensaje 495131)
Creo que este esto.

Ese tutorial no es en modo Kernel. Sirve para un hook a una API no Kernel (las APIs del Kernel comienzan con Zw) inyectando código en un proceso.

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.

Casimiro Notevi 02-08-2015 03:01:47

Cita:

Empezado por escafandra (Mensaje 495139)
Si existe pero está en un foro restringido.

Entonces es como si no estuviese :)

escafandra 02-08-2015 10:29:05

Cita:

Empezado por Casimiro Notevi (Mensaje 495141)
Entonces es como si no estuviese :)

Tienes razón. No me di cuenta al poner el enlace. :(

Saludos.

nlsgarcia 02-08-2015 17:14:34

escafandra,

Cita:

Empezado por escafandra
...Si existe pero está en un foro restringido...No me di cuenta al poner el enlace...

:rolleyes:

Pregunto: ¿Se puede publicar dicho código en un foro público? :confused:

Saludos,

Nelson.

escafandra 04-08-2015 01:19:26

Cita:

Empezado por nlsgarcia (Mensaje 495154)
Pregunto: ¿Se puede publicar dicho código en un foro público?

No creo que se deba publicar libremente ese código por varios motivos. Forma parte del foro Platino de DA y es parte de su exclusividad. Por otro lado, quizás más importante y motivo de estar en un foro restringido, es que técnicamente puede ser considerado como un rootkit aunque no malicioso, y así lo detectaron los antivirus hasta que añadí un sistema para evitarlos. En resumen, se trata de un código que en malas manos puede hacer daño y servir para ocultar procesos y protegerlos del mismo S.O.

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.

nlsgarcia 04-08-2015 01:33:16

escafandra,

^\||/

Nelson.


La franja horaria es GMT +2. Ahora son las 12:51:42.

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