0

Я пишу систему управления лицензиями для нашего проекта, и очень важно, чтобы она работала регулярно и правильно. Я написал несколько методов с открытым доступом в пакете; напримерjava: Предотвращение вредоносных изменений или модификация некоторых публичных функций в пакетах Java

// code to check correctness of password 
public boolean checkIfPasswordIsCorrect(String password){ 
    // my code here 
} 

Теперь я тревожно, если кто-то меняют .class файлов в .jar или .war файле. Затем, например, он может переписать мой класс и методы таким образом, чтобы он всегда возвращал true; после этого моя система будет работать некорректно, что означает, что всегда разрешает пользователям получать доступ к своей службе.

Возможно, есть решение только для того, чтобы обфускать мой код, чтобы изменить имя классов или пакетов и смешать мой код в шаге деблокирования. Есть ли другая идея? Благодарю.

EDIT: Я не хочу выпускать свой код; Я только что выпустил скомпилированные файлы .jar или .war.

+0

Использование обфускационного инструмента, такого как proguard http://proguard.sourceforge.net/ – Raghunandan

+1

Что вы имеете в виду с _system будет работать некорректно_? Имеет ли система права, которых у пользователя нет? Есть ли пароль, жестко закодированный в вашей системе? –

+0

Обе вещи, на которые указывает @amadeus, будут недостатками дизайна (если от этого зависит что-то более важное, чем высокий балл в игре). – Thilo

ответ

4

Вы можете подписать свой код, чтобы кто-то не мог его изменить и дать кому-то другому, притворяясь, что это «официальная» версия.

Вы не можете помешать кому-либо внести изменения в код, в котором они работают.

Если они нарушают программу таким образом, это их вина. Если они могут сломать вашу систему таким образом (например, получить несанкционированный доступ к файлам других людей), то это недостаток дизайна в вашей системе. Вы не можете зависеть от того, какое клиентское программное обеспечение не будет изменено. Код, который не следует подделывать, должен запускаться на ваших машинах и быть доступным как услуга.

Практический пример: вместо проверки пароля и предоставления доступа к локальному файлу или нет (что можно обойти, изменив этот код), зашифруйте файл с помощью пароля (чтобы не было доступа к нему, если вы не знаете пароль, независимо от того, насколько вы возитесь с кодом). Или сохраните файл на сервере и разрешите доступ только при условии наличия пароля (который вы проверяете на сервере).

+0

Спасибо. Прежде всего, я не хочу выпускать свой код; Я просто выпускаю скомпилированные файлы '.jar' или' .war' для клиентов. во-вторых, я использую шифрование и «Вкл. пароль»; но поскольку мне нужно использовать эти функции как публичные; кто-то может злоупотреблять общественными методами в моем коде. Соответственно, если вы хотите не модулировать критические функции, такие как проверка пароля как функции; это может быть заметный метод проектирования. – sajad

 Смежные вопросы

  • Нет связанных вопросов^_^