¿Cómo puedo asegurarme de que mi dll no se haya modificado?

19

Tengo un proyecto antiguo en VB que creó un código de PC único de la dirección MAC y la identificación del disco. Esto se usó para identificar una PC, por lo que no se pueden usar las credenciales entre las PC.

Este proyecto migró a C #, y encapsulé esta lógica en una DLL que simplemente llama a un método que devuelve el pc_id.

El problema que tengo ahora es que es muy fácil crear una nueva DLL que tenga el mismo nombre de clase y la misma firma de método y devolver cualquier PC_id que deseen.

¿Cómo puedo asegurarme de que la DLL a la que hace referencia mi programa sea realmente mía?

Pensé en comparar el hash de mi DLL con uno codificado, pero ¿es esto seguro entre diferentes sistemas operativos? ¿Cambiará el hash del archivo entre los sistemas de archivos?

¿O cuál es el método preferido para garantizar la integridad / el origen de los archivos?

    
pregunta Vallo 21.04.2015 - 13:36
fuente

5 respuestas

41

Para los binarios de Windows, sugeriría firmar digitalmente el archivo.

Donde usas certificados, casi la misma tecnología de HTTPS.

Introduction to Code Signing

SignTool

Luego debes usar las API criptográficas de Windows para verificar la firma de las DLL cargadas.

Sé que para hacer esto, necesitas mucho trabajo. Pero, para Windows, esta es la ruta más segura . Si los hashes SHA no son suficientes, esta es la alternativa.

    
respondido por el Marcos Zolnowski 21.04.2015 - 20:54
fuente
30

Con el bajo nivel de protección que ofrece la dirección MAC, no me molestaría. Es menos esfuerzo cambiar la dirección MAC que intercambiar su DLL.

    
respondido por el Simon Richter 21.04.2015 - 19:11
fuente
16

Los hash no cambian entre los sistemas de archivos. ¡Comprueba el hash SHA1 del archivo con el valor "bueno" conocido en tu código y deberías estar ausente!

    
respondido por el AlexH 21.04.2015 - 13:42
fuente
7

Si su objetivo es evitar que las credenciales se usen en otras PC, entonces eche un vistazo a API de protección de datos de Windows . Con él, puede cifrar sus credenciales, o cualquier otro dato, y solo se podrá descifrar en esta computadora (o solo en la cuenta de usuario actual de Windows, si la necesita).

    
respondido por el alex 21.04.2015 - 23:00
fuente
0

No solo la dirección MAC no es mucha protección, sino que la clave en una ID de disco es algo malo, no todos los "discos" devuelven una ID de disco consistente. El problema es que algunos controladores RAID responden a una solicitud de ID de disco obteniéndola de cualquier unidad que esté disponible.

Sin mencionar lo que sucede si alguien actualiza algún hardware.

    
respondido por el Loren Pechtel 23.04.2015 - 04:18
fuente

Lea otras preguntas en las etiquetas