2010-01-04 13 views
7

Estoy tratando de asegurar que una aplicación solo se ejecute desde un disco USB específico. Tengo un código para obtener el número de serie del dispositivo, pero la única forma en que puedo hacer que esto funcione como quiero es codificar manualmente el número de serie en el binario. ¿Hay alguna manera de que yo pueda hacer una aplicación de código auxiliar que modificaría el binario existente para insertar el número de serie en él después de compilarlo? He visto esto hecho en C++ en el pasado, pero eso fue hace mucho tiempo y no puedo recordar cómo lo hicimos en ese entonces.¿Cómo registrar un número de serie en un archivo ejecutable?

+4

Cualquier técnica que lo permita es probablemente menos segura (es decir, no permite la firma de código) que colocar el S/N en un archivo separado con un hash criptográfico.¿Cuál es tu objetivo real aquí? –

+0

¿Está compilando su C# a código nativo? –

Respuesta

8

Almacenarlo en el conjunto es una mala idea. Esto es lo que haría (y lo he hecho en el pasado):

  1. Asegúrese de firmar sus ensamblajes.
  2. Cree un documento XML que contenga los datos de su licencia, en su caso, el número de serie del dispositivo USB.
  3. Utilice la biblioteca SignedXml en .NET (implementa XMLDSIG) para firmar el documento XML de licencia que contiene el número de serie. Utilizará la misma clave privada que se utiliza para firmar el ensamblaje.
  4. Cuando se inicia la aplicación, verifica que la firma del archivo XML sea válida utilizando la clave pública con la que se firmó (y está incorporada en el ensamblado).

Obviamente, usted no envía su clave privada, por lo que si la aplicación necesita generar el archivo de configuración XML en sí (en lugar de ser un archivo que envíe al usuario) deberá implementar un servicio web.

+0

Muy bien, gracias por los comentarios, creo que usaré este método. Lo que intento hacer es crear un programa que solo se pueda ejecutar desde una unidad de almacenamiento específica que he autorizado. ¡Gracias por todos los buenos comentarios! –

+0

Bueno, entonces siéntase libre de marcar esto como la respuesta :-) –

0

No lo sé, pero eso no me ha impedido responder antes.

Quizás descubra dónde desea almacenar el SN en el ejecutable (debe ser solo un lugar, ¿no?) Y simplemente trate el archivo ejecutable como un blob binario gigante, y use el programa de inserción para insertarlo donde lo necesite ¿ir?

0

¿Por qué alguien querría guardar algo dentro de un ejecutable? Si planea firmar el ejecutable para la distribución, el cambio del ejecutable de alguna manera rompería la firma y guardar algo en binario en el ejecutable no evitará que alguien saque el valor del ejecutable.

Lo mejor que puede hacer es almacenar el número de serie en un archivo, registro u otro lugar y luego cifrar el valor para que no se pueda modificar sin romperlo. Uso una biblioteca que se envía con License Vault desde una compañía relativamente nueva llamada SpearmanTech. Puede usar su biblioteca para almacenar valores encriptados en el archivo .NET machine.config en forma encriptada para que no se altere. De esta forma, puede extraer la información del archivo .config cuando se inicia su aplicación.

¿Está escribiendo una aplicación .NET en C++ o en C++ nativo, de cualquier manera, debería ser capaz de comunicarse con .NET Framework para que esta solución funcione.

Me gustaría ver su producto en http://www.spearmantech.com. Espero que funcione para ti.

Cuestiones relacionadas