Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обфускация библиотеки при помощи YGuard 
V
    Опции темы
DOKA
Дата 21.12.2011, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Добрый вечер!

Использую YGuard для обфускации Java-приложения. Пока оно прилоежния, то проблем нет - выполняю задачу Rename для всего кроме имён пакетов (чтобы пути к картинкам работали) и главного класса.

А вот когда я компилирую то же самое, но в виде библиотеки, мне нужно ещё и имена классов сохранить. Как это сделать при помощи YGuard+Ant? Исключение файлов из задачи <rename> приводит к тому, что класс и внутри не обфусцируется.

И вообще - почему такая засада с обфускацией в Java? Замучался уже. Неужели нет ещё в природе обфускатора, который может вменяемо САМ перемешать код, не поломав программу? Как по мне, это же тривиальная задача, не требующая тех 15 строк кода в ant'e, которые я писал для своей программы, и отладки.
PM MAIL   Вверх
mstalker26
Дата 21.12.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 4.7.2009

Репутация: 3
Всего: 11



Перечисления тоже нужно исключать и если что-то с reflection используете. Нельзя обфусцироваь абсолютно все.

Мы yGuard на работе используем, единственное, что меня расстраивает, отсутствие плагина для maven. На моё письмо ответили, что не планируют его делать.
--------------------
Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
PM   Вверх
DOKA
Дата 21.12.2011, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(mstalker26 @ 21.12.2011,  14:05)
Перечисления тоже нужно исключать и если что-то с reflection используете. Нельзя обфусцироваь абсолютно все.

Мы yGuard на работе используем, единственное, что меня расстраивает, отсутствие плагина для maven. На моё письмо ответили, что не планируют его делать.

Перечисления по старинке не использую, предпочитаю int-костанты.
Reflections - тоже.
По-моему, весьма типичный use case.

Пока в голову приходит лишь вытащить всё API библиотеки в один класс типа Obfuscated.class, где ещё на момент написания ф-ии будут называться A, B, C, etc..
Я просто не могу не обфусцировать этот код, т. к. он влияет на проверку лицензий.
Как мне кажется, это очень напоминает весьма корявые костыли.

Было бы идеологически правильно, при обфускации либы создавать файл с маппингами "исходное имя сущности -- обфусцировнное имя сущности" и подсовывать его при обфускации кода, использующего эту библиотеку. Но такого ни в одном обфускаторе не реализовано, не так ли?
PM MAIL   Вверх
mstalker26
Дата 21.12.2011, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 4.7.2009

Репутация: 3
Всего: 11



стоп-стоп-стоп.
Если я правильно понял у Вас есть проект, зависящий от библиотеки (она тоже Ваш проект). Назовем их project и commons. Когда Вы компилируете и упаковываете commons, то обфусцировать не надо. А когда Вы упаковываете project, то надо обфусцировать и project и commons.

В yGuard это
Код

...
<inoutpair in="${project_jar}"       out="${project_jar}" />
<inoutpair in="${commons_jar}"   out="${commons_jar}" />
...


Если неправильно понял, то расшифровывайте и опишите процесс, что делаете smile.

edit: или Вы все библиотеки обфусцируете?

Это сообщение отредактировал(а) mstalker26 - 21.12.2011, 16:52
--------------------
Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
PM   Вверх
DOKA
Дата 21.12.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Цитата(mstalker26 @ 21.12.2011,  16:51)
стоп-стоп-стоп.
Если я правильно понял у Вас есть проект, зависящий от библиотеки (она тоже Ваш проект). Назовем их project и commons. Когда Вы компилируете и упаковываете commons, то обфусцировать не надо. А когда Вы упаковываете project, то надо обфусцировать и project и commons.

В yGuard это
Код

...
<inoutpair in="${project_jar}"       out="${project_jar}" />
<inoutpair in="${commons_jar}"   out="${commons_jar}" />
...


Если неправильно понял, то расшифровывайте и опишите процесс, что делаете smile.

edit: или Вы все библиотеки обфусцируете?

По-моему, это как раз и будет решением, раз YGuard позволяет связно обфусцировать два Jar'a.
Но тут проблема встаёт, это же Eclipse plugin у меня. И commons будет запакована внутрь project. Такое YGuard не поддерживает?


А может, заодно подскажете, как при сборке репозитория Eclipse плагина (он и есть мой project) заставить вызываться Ant-скрипт проекта плагина?
Грубо говоря структура такая:
- Repo <-- сборка идёт по нажатию Build All в GUI
- Feature
- Plugin <-- здесь будет ant-файл
- Commons <-- уже собран предварительно

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

PM MAIL   Вверх
mstalker26
Дата 22.12.2011, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 4.7.2009

Репутация: 3
Всего: 11



Я бы сделал так:
1) завел бы ant-task для обфускации, который зависит от task "jar".
2) commons я бы не запаковывал внутрь project (т.е. jar в jar).
3) ну а выпускать production версию плагина, то собирал бы из консоли, а не из GUI.

Теперь вопросы:
1) я так понимаю, что собираете Вы проект из GUI? Я бы собирал (для выпуска релизов) из консоли с помощью ant, так Ваш проект будет более "гибким" (не могу перевести flexibel  smile )
2) пытались привязать ant-файл с обфускацией к Run - External Tool в eclipse? (но это на крайний случай)

edit:
кстати, для rename и shrink в yGuard можно задать аттрибут logfile, чтобы сохранить маппинг, что наделал yGuard.

Это сообщение отредактировал(а) mstalker26 - 22.12.2011, 13:53
--------------------
Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
PM   Вверх
DOKA
Дата 22.12.2011, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 13.8.2006

Репутация: нет
Всего: нет



Спасибо за ответы. Видимо проще будет собирать так, как сделано, а потом делать unjar - obfuscate - jar через ant.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.1044 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.