Комментарии 20
Мораль этой истории: обфусцируйте код, господа
Всмысле обфусцируйте? Как раз не обфусцируйте, что бы ваш продукт могли поддерживать когда вы не сможете или захотите.
Обфусцированный код продукта - флаг того что вас поставят в неудобное положение и поимеют, рано или поздно.
Если бы я хотел, чтобы мой код поддерживали, я бы отдал исходники
Обфусцируйте, но передайте исходники заказчику.
Такой бардак возможен только в банке. В крупном банке.
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 ничего такой для других проектов)
Reverse-инжиниринг “чёрного ящика”: зачем поддержке исходный код?