Как стать автором
Обновить

Комментарии 20

Мораль этой истории: обфусцируйте код, господа

Но при этом не надейтесь, что обфускация защитит от декомпиляции.

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

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

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

Если бы я хотел, чтобы мой код поддерживали, я бы отдал исходники

Обфусцируйте, но передайте исходники заказчику.

Да, это хорошая идея, но, к сожалению, многие в enterprise так не делают. История про ситуацию, когда по идее поддержка должна была вестись разработчиком, но он покинул своего заказчика и оставил ни с чем

Такой бардак возможен только в банке. В крупном банке.

Java Decompiler - меня никогда не подводил. Мне кажется, что им проще работать, чем CFR. Хотя, возможно, что я просто плохо разбираюсь в этой теме.

Из интересных фактов, код описываемого продукта с разной степенью полноты декомпилируется разными компиляторами. Например, на днях встретили ситуацию, когда даже cfr не все распознал. Выбирали инструмент по принципу: open source, развивается по новые версии JAVA, может делать батчевую декомпиляцию, декомпилирует без синтаксических ошибок бОльшую часть нашего кода

Для декомпиляции Java ещё можно попробовать Jadx - он неплохо справляется с этим делом, при этом есть ещё и jadx-gui, в котором можно вести навигацию по коду и при необходимости даже переименовывать классы, поля, методы и переменные.

А много толку от переименования если чаще нужно логику изменять

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

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

Код вы всё же в IDE пишете, я полагаю?
Работа с декомпилированным кодом от работы с кодом, написанным руками в этом смысле мало отличается.


Для декомпилированного кода IDE даже важнее, т.к. это код незнакомый. Даже банальный Find Usages грепом делать это боль и страдания.


Декомпилятор идущий с IDEA можно запустить и из командной строки. Достаточно собрать его из исходников.

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

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


IDE может работать с исходниками на удалённой машине, так что IDE на сервере не обязательна. Пример конфигурирования IDEA: https://www.jetbrains.com/help/idea/creating-a-remote-server-configuration.html

Спасибо большое за комментарий. Не видела этот инструмент, когда искала решения для декомпиляции на проекте

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

У нас даже была мысль написать свой декомпилятор.

Зачем такие сложности, если в IntelliJ IDEA уже встроен декомпилятор и он может декомпилировать и целыми JAR в том числе?

Декомпиляторы все же дают разный результат в некоторых случаях. Нашли для себя, что cfr лучше работает в нашем случае. Однако не исключаю, что встроенный в IDEA ничего такой для других проектов)

Могут влиять настройки по умолчанию.
Например, Fernflower (декомпилятор, идущий с IntelliJ IDEA) generic types пытается восстановить только если явно передать флаг -dgs=1.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий