У меня есть программа HelloWorld, подписанная мной и распространенная с сайта моей компании. Но кто-то скачал его с моего сайта, включил в программу SuperDuperHelloWorld, а также добавил в установщик несколько вредоносных программ. Я не хочу, чтобы моя программа была установлена правильно, если она не загружена с моего сайта напрямую. Есть ли способ поставить такие ограничения? - Может быть, не всегда, но в некоторых процентах случаев, скажем, 95%.
1 ответ
Я долго размышлял об одном и том же, но я не смог более подробно остановиться на этом, потому что у меня нет всех необходимых знаний, но это всего лишь идея:
- Генерация случайных пар ключей. Создайте хэш текущей версии вашего двоичного файла. Храните их в локальной базе данных.
- Объедините один открытый ключ с загрузкой, например, отправьте его клиенту по электронной почте.
- Клиент открывает приложение, и его приветствует окно проверки. Процесс проверки запрашивает открытый ключ и генерирует хэш двоичного файла.
- Клиент отправляет открытый ключ и хэш двоичного файла на ваши серверы, и вы проверяете его по секретному ключу и хешу для этой двоичной версии в базе данных.
- Ответ шифруется с использованием открытого ключа через секретный алгоритм, поэтому любой потенциальный мошенник не может перехватить соединение и заставить ваше приложение думать, что оно было должным образом проверено.
- Вы можете сохранить открытый ключ и зашифрованный ответ в секретном файле, чтобы вам не приходилось повторять процесс проверки каждый раз. Вы просто расшифруете ответ, используя секретный алгоритм и открытый ключ, чтобы узнать, был ли он правильно проверен.
Недостатки этого подхода:
- Клиент должен иметь подключение к интернету, по крайней мере, один раз.
- Клиентская программа не может быть проверена дважды (например, на разных компьютерах), даже если это законный клиент.
- Хотя хранилище файла и ответа зашифровано, это не помешает любому злоумышленнику узнать его местоположение и связать пару проверки с любым украденным двоичным файлом, чтобы обойти вашу безопасность.
- Процесс хеширования двоичного файла может занять некоторое время, если двоичный файл является относительно большим.
Это не помешает любому мошеннику загрузить ваше приложение и перераспределить его, но, по крайней мере, они не смогут внедрить в него malware
из-за хеш- проверки ... не так ли? на самом деле они могли; процесс проверки может быть взломан, если мошеннику каким-то образом удастся изменить ваш двоичный файл и добавить соответствующие инструкции, чтобы обойти безопасность процесса проверки. Что-то вроде…
Изменение этого
if (validate(response) == true) {
/* The app is validated */
}
За это:
if (!validate(response) == true || true) {
/*
* The app would be validated no matter
* if it was properly validated or not
*/
}
Таким образом, ваш последний ресурс - сделать инструкции процесса проверки достаточно непонятными, чтобы их было нелегко угадать и изменить, и надеяться, что ваш мошенник не достаточно умен, чтобы найти и изменить их.