Я пишу часть программного обеспечения, которое распространяется в виде файла JAR. В настоящее время этот файл JAR можно подделать, чтобы получить и сохранить другой файл, который наш сервер передает через URLClassLoader
, декомпилировать и найти в нашем коде различные вещи, которые должны оставаться закрытыми для безопасности клиентов, использующих его. По сути, я хочу реализовать способ проверки того, не подделан ли исходный JAR. Я знаю, что это парадоксально невозможно, реализуя проверку правильности SignedObject
в исходном классе из-за того, что природа Java может быть декомпилирована, но есть ли какой-то другой способ, которым я могу определить, был ли код подделан в исходном файл? Эта проверка может выполняться через промежуточный класс, который загружается для проверки правильности, или любым другим способом, который гарантированно будет работать. Я сижу здесь весь день, пытаясь придумать решение этой проблемы. Любая помощь приветствуется.
Обнаружение подделки Java JAR/кода
Ответы (1)
Это теоретически и практически невозможно. Проверка банок происходит на стороне клиента. Никакая криптография не представлена вам в проверяемом виде, и вы верите, что клиент предлагает любую криптографию.
Даже если вы запросите произвольные байты из самого jar-файла для проверки, злонамеренный пользователь может настроить байты, которые будут взяты из хорошего jar-файла, но представлены плохим кодом.
Вы можете использовать криптографическое доказательство, чтобы убедиться, что другая сторона имеет данные, но убедиться, что у нее есть только эта копия/редакция/версия этих данных, невозможно. Настойчивый злоумышленник может кормить вас любой ложью, поскольку он может утверждать в любой проверке, что у него есть действующая банка.
Короче говоря, наличие правильных данных не означает их эксклюзивного присутствия.