Recentemente, ao escrever software, tive uma ideia: se eu rodar um programa .exe bem protegido, mas se a DLL não estiver protegida, minha aplicação usará o arquivo dll, outras pessoas vão depurar meu programa através do arquivo dll?
Hoje, vamos escrever um programa especial para testá-lo, vamos usar o aplicativo para chamar um método na DLL, da seguinte forma:
O código é simples:
Código DLL:
Código do App:
Depois, crio um novo projeto, crio uma nova biblioteca de classes e copio o mesmo tipo e arquivo CS, da seguinte forma:
Vamos substituir a dll gerada pela seguinte figura:
O programa consegue chamar com sucesso o método dll que forjamos, como podemos evitar que o dll que geramos seja forjado?
Pensei em uma ideia simples: adicionar um arquivo de recurso ao aplicativo, preencher o arquivo dll a ser carregado e o valor md5 do arquivo, o ponto de entrada da execução do programa, e primeiro verificar o valor md5 da dll que precisa ser carregado
Se o valor MD5 do arquivo DLL for inconsistente com o valor MD5 do arquivo na lista de recursos, isso significa que o arquivo DLL foi falsificado ou adulterado maliciosamente. Isso nunca foi praticado, é logicamente viável!
|