¿Qué crees que es la protección de procesos????.
- Si un programa en memoria y ejecutándose pudiera modificarse alegremente, los problemas de seguridad serían enormes.
- De todos modos, incluso escribiendo drivers propios, existen límites y complicaciones:
- ¿Puede una báscula pesarse a sí misma?
- ¿..qué si tienes en la pila una serie de retornos y a la vuelta se deben hacer los correspondientes POPs?... tu código cifrado, ahora sería rescrito e indescifrable por tí mismo.
- ¿..qué si el registro IP, está apuntando a la instrucción pongamos 9999, y tu te empeñas en cambiar la dirección 9999?... supongamos que la consigues cambiar... ahora que se ejecutará...? ¿Cómo seguir cifrando el resto del programa cuando el algoritmo de cifrado, ya ha sido sobrescrito, las instrucciones que se encargan de cifrarlo ( y que ya están cifradas)?
- Supongamos que aún así se consiguiera cifrar por completo el programa... hemos dicho que el programa está ejecutando la instrucción 9999, pero el procesador, que como sabes (o deberías saber), tiene una cascada de instrucciones en diferentes estados (esto es, la 9999, se está ejecutando, pero la 10000 y la 10001 y... también, de hecho hay varias instrucciones que mientras una se está ejecutando, están en diferentes fases de la decodificación... incluso hay instrucciones que se ejecutan en paralelo, aunque nosotros las vemos o consideramos que se ejecutan en serie... si hay un salto, desde luego, se rompe la cascada que es despreciada... pero que pasaría con esas instrucciones que ya están fuera de nuestro control?. Bueno, al menos ya te indico que para descartarlas, deberías hacer un salto, para que sean descartadas, pero cómo hacer un salto y a dónde, si el código ha sido rescrito, por un contenido cifrado, quién le da las siguientes órdenes si ya no existen?
- Vamos un paso más allá, y olvidemos también la pipeline... Si hubieras logrado 'cifrar' todo tu programa, y estábamos en que la siguiente instrucción posterior a la 9999, empieza a decodificarse... No crees que no habrá modo de saber que sucederá?. Dando por cierto... que es cifrado y no simplemente remplazo de código 'sano' por otro 'malicioso', es decir si realmente es cifrado, el contenido en memoria para ser ejecutado, será pseudoaleatorio, luego el procesador puede 'volverse loco', impredecible.... podrías incluso borrar el disco sin darte cuenta, lo menos grave es que el cifrado se decodificara curiosamente como un bucle for, con un incremento del contador de 0, es decir un bucle infinito... en fin, aún suponiendo que nada te impidera cifrarlo tal como tu quieres, el resultado sería impredecible...
...y eso que soy generoso y doy por bueno, que solo quieras cifrarlo, y no remplazarlo por código
Para terminar, ¿podrías decirme cuál es el objetivo de cifrar un ejecutable (en ejecución) en memoria y no en disco????