C # — Вычислить md5 из self, чтобы проверить, что файл не изменен

#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);