Recientemente, al escribir software, se me ocurrió una idea: si ejecuto un programa .exe bien protegido, pero si la DLL no está protegida, mi aplicación usará el archivo dll, ¿otros depurarán mi programa a través del archivo dll?
Hoy, vamos a escribir un programa especial para probarlo, usemos la aplicación para llamar a un método en la DLL, de la siguiente manera:
El código es sencillo:
Código DLL:
Código de la aplicación:
Luego, creo un nuevo proyecto, creo una nueva biblioteca de clases y copio el mismo tipo y archivo CS, de la siguiente manera:
Vamos a reemplazar la dll generada por la siguiente figura:
El programa llama con éxito al método dll que forjamos, ¿cómo podemos evitar que la dll que generamos sea forjada?
Se me ocurrió una idea sencilla: añadir un archivo de recurso a la aplicación, rellenar el archivo dll a cargar, y el valor md5 del archivo, el punto de entrada de la ejecución del programa, y primero comprobar el valor md5 del dll que hay que cargar
Si el valor MD5 del archivo DLL es inconsistente con el valor MD5 del archivo en la lista de recursos, significa que el archivo DLL ha sido falsificado o manipulado maliciosamente. No se ha practicado, ¡es lógicamente factible!
|