Ostatnio, pisząc oprogramowanie, wpadłem na pomysł: jeśli uruchomię program .exe dobrze chroniony, ale jeśli dll nie jest chroniony, moja aplikacja będzie używać pliku dll, czy inni będą debugować mój program przez ten plik?
Dziś napiszmy specjalny program do testowania – użyjmy aplikacji do wywołania metody w DLL, w następujący sposób:
Kod jest prosty:
Kod DLL:
Kod aplikacji:
Następnie tworzę nowy projekt, tworzę nową bibliotekę klas i kopiuję ten sam plik typu oraz pliku CS, w następujący sposób:
Zastąpmy wygenerowane dll następującą figurą:
Program skutecznie wywołuje metodę dll, którą sfałszowaliśmy – jak możemy zapobiec podrobieniu dll, które wygenerowaliśmy?
Wpadłem na prosty pomysł: dodać plik zasobu do aplikacji, wypełnić plik dll do załadowania oraz wartość md5 pliku, czyli punkt wejścia programu i najpierw sprawdzić wartość md5 dla dll, które trzeba załadować
Jeśli wartość MD5 pliku DLL jest niezgodna z wartością MD5 pliku na liście zasobów, oznacza to, że plik DLL został podrobiony lub złośliwie zmanipulowany. Nie było to praktykowane, ale logicznie jest wykonalne!
|