2011-10-26 6 views
7

Tengo cierta seguridad incorporada en un programa del lado del cliente que descarga un archivo DLL de la web y llama a una función dentro de esa DLL. La DLL tiene un nombre seguro y la función en la DLL usa Assembly.GetCallingAssembly() para determinar el conjunto de llamadas para que pueda obtener con precisión una ruta de acceso al programa que lo llamó. Desde allí, hacemos un control de comprobación del ensamblaje y verificamos que sea el correcto.Forma de determinar el ensamblaje de llamada verdadera

Tenemos personas que se han adjuntado en modo de confianza total, y pueden falsificar la llamada GetCallingAssembly para apuntar al ejecutable real, mientras ejecutan una versión modificada de la misma. ¿Hay alguna otra cosa que no sea GetCallingAssembly que pueda usar para obtener la verdadera persona que llama? Algunos callstack o algo que puede proporcionar el ejecutable real desde GetCallingAssembly parece ser fácilmente falsificado.

+0

Prueba el método 'GetEntryAssembly' vez – hazzik

+0

Tenga en cuenta que, si permite una confianza total, también pueden parchar GetEntryAssembly. Si permite una confianza total, también pueden parchear la DLL descargada y deshabilitar la comprobación de hash. –

Respuesta

3

No puede hacer esto mientras se ejecuta en modo de confianza completa. La plena confianza significa que las personas pueden hacer cosas como suplantar. Aquí está una discusison similar: reflection is possible on obfuscation

0

No estoy seguro de qué tan seguro es, pero yo he utilizado en el pasado para obtener la ruta de inicio:

string startup_path = 
    Path.GetDirectoryName(typeof(SomeClassInDll).Assembly.Location); 
+0

Creo que esta persona está usando algún tipo de herramienta que está cambiando el conjunto de llamada, si deshabilitan el hash lo detectamos, llama al servidor con un hash que se genera desde el interior del dll, el dll cambia algunas claves secretas dentro de la cual cambiará la respuesta, ha procesado el hash de esa clave secreta, más el hash del ensamblaje para determinar si se ha modificado y si están usando el ensamblaje de hash adecuado. Estoy tratando de encontrar algunos métodos que pueda mirar que podrían ser un poco más difíciles de falsificar. Al igual que la pila de llamadas tal vez? – willthiswork89

Cuestiones relacionadas