#c# #.net #security #md5
#c# #.net #Безопасность #md5
Вопрос:
Я хочу проверить, что моя программа не изменена (взломана).
Итак, я хочу, чтобы программа вычисляла md5 из self exe и сравнивала.
if(GetMD5FromSelf() != "hash")
Application.Exit(); //modified so exit
Но когда я помещаю хэш в строку, тогда md5 файла будет изменен.
Есть ли какой-нибудь способ сделать это?
Комментарии:
1. Если кто-то взломал вашу программу, разве он не удалит эту проверку?
2. В моей программе много диалоговых окон (форм), поэтому я хочу поместить контрольные потоки в каждое окно и аварийно завершить работу приложения, если оно изменено. Лучше любая защита, чем отсутствие защиты.
Ответ №1:
Вот несколько способов, которыми вы могли бы это сделать,
Вариант 1
Вы можете сохранить хэш в Интернете, это, вероятно, безопаснее, потому что, если кто-то собирается изменить вашу программу, он также может изменить хэш.
Вариант 2
Вы можете добавить 4 байта и строку в конец вашего приложения и сохранить там контрольную сумму, будьте осторожны, чтобы не включать их в свою контрольную сумму и проверять только свой собственный размер файла, а не 4 байта и строку.
фрагмент кода
List<byte> total = new List<byte>(File.ReadAllBytes(System.Reflection.Assembly.GetEntryAssembly().Location));
byte[] totalByteArray = total.ToArray();
int OwnSize = 115200;//Size of you exe file without checksum
int Md5Length = BitConverter.ToInt32(totalByteArray, OwnSize 4);
string NormalFileNameString = Encoding.ASCII.GetString(totalByteArray, OwnSize, Md5Length);