Как защищать исходный код Java против decompiladores?

У меня есть очень большое сомнение. Я увидел инструмент для descompilar код Java, который возвращает все классы со всем исходным кодом, даже данные о связи в базу данных.

Как мы могли бы защищать наш код перед таким инструментом, который начиная с одного .jar он способен возвращать весь исходный код?: Как мы защитили бы наше программное обеспечение, сделанное с таким популярным языком?

13
задан 19.12.2018, 03:23
4 ответа

Полная защита невозможна, если это код, который должен работать в машине, которую ты не контролируешь.

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

Могущественные корпорации попробовали защищать код Ваших продуктов с техниками как бинарная криптография и удостоверения. Чтобы видеть, поскольку Ваши схемы заканчивают тем, что являются побежденными, как он кажется, это недавний случай hacks для PS4 в Бразилии.

Что не означает, что ничего не было возможно делать. Посредством таких техник как ослепление кода возможно затруднять работу обратного инженерного дела.

Здесь у тебя есть список программного обеспечения ослепления: Open Соурсе Обфускаторс in Java

14
ответ дан 03.12.2019, 23:13
  • 1
    спасибо я буду смотреть тему ofuscadores, хотя также есть форма revertirlos. – Willywes 14.01.2016, 01:01
  • 2
    В этом случае возможно помещать как пример DRM и другие, много м и # 233; все контроля, чтобы предотвращать pirater и # 237; в, y они нарушают они за небольшое количество недель. – SalahAdDin 24.01.2016, 07:24
  • 3
    самое близкое, чтобы предотвращать, что conosca, как оно функционирует, код - посредством использования Веб Услуг, где procesamieto и код остается стороны сервера. но снова это просто задерживает, что человек с достаточным количеством знания заключил, как функционирует Веб метод. – Silencio2 19.12.2018, 03:37

Способы защищать приложение есть многие, но, теперь приложения делаются главным образом в трех слоях:

  1. Интерфейс: Это - то, что видит пользователь и логика едва существующая, так как интерфейс то, что он делает, состоит в том, чтобы просить у него что-то в услугу и эта услуга - тот, кто выполняет логику.
  2. Услуга: Здесь он, где сильные вещи происходят. Этот звонит в базу данных, делает преобразования информации, информация обрабатывается и заставляет его прибывать в интерфейс то, в чем он нуждается.
  3. База данных: Услуга имеет доступ к конкретным частям этой, не обязательно к совокупности.

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

Сейчас, что, если твое приложение не дает основание для того, чтобы быть распространенным таким образом, заставил бы то, что сказал Хосе Антонио, ослеплять код и ждать лучшее.

3
ответ дан 03.12.2019, 23:13
  • 1
    Не, поскольку было бы возможно отделять все и оставлять одиноким интерфейс, костлявый conosco MVC, DAO и DTO, но всегда внутри того же jar., из-за чего данные продолжают быть выставленными. – Willywes 14.01.2016, 00:59
  • 2
    Я представляю, что Омар имеет в виду делить aplicaci и # 243; n в модели клиент сервер, где одинокий ты вручаешь клиент и сервер, ты это не вручаешь никогда но он работает в твоих м и # 225; хина. – Jose Antonio Reinstate Monica 14.01.2016, 01:45
  • 3
    Как было бы это в app рабочего стола?, я протестировал ofuscador и это заплата, но мне не кажется реальным решением – Willywes 14.01.2016, 03:53
  • 4
    @Willywes, Не зная твоих обязательных условий, мы ничего не можем делать. В любом случае, если твой aplicaci и # 243; n est и # 225; conect и # 225; ndose в удаленную базу данных прямо, лучшее быть и # 237; чтобы вводить Веб промежуточный сервер (" servicio" этого ответа). Есть услуги из-за сети, которые позволяют тебе создавать этот тип посредников очень f и # 225; cilmente для приложений м и # 243; подлые / рабочий стол, как Parse (я обещаю, что у меня нет afiliaci и # 243; n, но он и #250; nico, который я знаю). – Darkhogg 14.01.2016, 10:22
  • 5
    @Willywes в java, используя librer и # 237; эксперт est и # 225; ndar ты можешь делать aplicaci и # 243; n EJB, где ты создаешь клиент (который быть и # 237; в твой app рабочего стола, и который присоединяться, и # 237; в в сервер), tendr и # 237; эксперт tambi и # 233; n контейнер (WildFly, Weblogic или что-то похожее) приложений, которые выполняют услуги и присоединяются в базу данных. Таким образом у клиента нет интерфейсы, никогда классы, только классы gui. – Omar 14.01.2016, 17:57

Защищать код не имеет ничего общего с программированием в слоях; это вопрос ослепления исходного кода.

По умолчанию, когда ты строишь один JAR, обычно только они упаковываются .class которыми оно будет интерпретировано из-за JVM. Однако, также может быть упакованным исходный код прямой формы, посредством файлов .java.

Хотя одинокий JAR будет содержать файлы .class, эти могут быть decompilados с программными средствами как JD-GUI.

Ты можешь ослеплять код по имени, или encriptar bytecode (хотя он волнует немного выступление).

Ты можешь видеть список техник, чтобы защищать шрифт здесь

3
ответ дан 03.12.2019, 23:13

Ослепление в Java приносит больше проблем, чем он решает, на данный момент, до того, как вышел Java 9, лучший выбор, чтобы начинаться, использовать составитель Ahead of Time как например Excelsior РЕАКТИВНЫЙ ДВИГАТЕЛЬ.

Этот тип составителей действительно они составляют код Java, вводя оптимизацию во время компиляции и производят выполнимый двоичный код, который Ваш он может защищать с более договорными техниками как использование packers как Ультимате Пакер.

1
ответ дан 03.12.2019, 23:13