Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Вопрос по обфускации


Автор: ShurikA 15.2.2007, 16:19
В своём апплете я пользуюсь пакетом HTTPClient от Jakarta для отправки запросов POST.
Для полноценной работы этот пакет требует ешё несколько дополнительных пакетов как ча пример: commons-logging и commons-codec.
Всё хорошо и красиво работает пока дело не дочодит до обфускации, по каким то прочинам некоторые как быдто пропадают. 
на пример после обфускации вылетает в рантаим вот такая ошибка:
Код

Exception in thread "Thread-10" java.lang.ExceptionInInitializerError
    at octopusuploader.UpleadMgr.FileUploadThread.run(FileUploadThread.java:90)
Caused by: org.apache.commons.logging.LogConfigurationException: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl (Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl)
    at org.apache.commons.logging.LogFactory.createFactory(LogFactory.java:1205)
    at org.apache.commons.logging.LogFactory$2.run(LogFactory.java:994)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.commons.logging.LogFactory.newFactory(LogFactory.java:991)
    at org.apache.commons.logging.LogFactory.getFactory(LogFactory.java:610)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:645)
    at org.apache.commons.httpclient.HttpMethodBase.<clinit>(HttpMethodBase.java:102)
    ... 1 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at org.apache.commons.logging.LogFactory.createFactory(LogFactory.java:1060)
    ... 7 more


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

Автор: LSD 15.2.2007, 17:27
Ты пытаешься и commons-logging обсфуцировать, что ли???

Автор: ShurikA 17.2.2007, 15:44
Цитата(LSD @  15.2.2007,  16:27 Найти цитируемый пост)
Ты пытаешься и commons-logging обсфуцировать, что ли??? 

я пытаюсь обсфуцировать всё как одно целое...

Автор: LSD 17.2.2007, 18:14
Цитата(ShurikA @  17.2.2007,  15:44 Найти цитируемый пост)
я пытаюсь обсфуцировать всё как одно целое...

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

Автор: ShurikA 17.2.2007, 19:03
Цитата(LSD @  17.2.2007,  17:14 Найти цитируемый пост)
Обсфуцируй только свой код.

А потом просто всё собират' в один JAR?

Тогда ещё один вопрос:
Как быть если у меня есть два проекта которые пользуются третим, тоже моим проектом (он содержит только классы которыми я перекидываюсь из клиента к серверу и наоборот), мозчно ли этим классам делать обфускацию, или тоже быдет проблемма?

Автор: LSD 17.2.2007, 21:39
Цитата(ShurikA @  17.2.2007,  19:03 Найти цитируемый пост)
А потом просто всё собират' в один JAR?

Можно собирать, а можно оставить несколько jar, и просто перечислять все в classpath при запуске.


Цитата(ShurikA @  17.2.2007,  19:03 Найти цитируемый пост)
Как быть если у меня есть два проекта которые пользуются третим, тоже моим проектом (он содержит только классы которыми я перекидываюсь из клиента к серверу и наоборот), мозчно ли этим классам делать обфускацию, или тоже быдет проблемма?

Либо подвергать обсфукации все три проекта одновременно (за один прием). Или не трогать классы для передачи данных вообще.

Обсфукация - это просто переименование классов, методов, полей и пакетов, с целью скрыть их истинный смысл (на самом деле не только, но это основное). Догадаться что делает метод readLine() не трудно, а вот что делает метод a(int i, String s) совсем не очевидно. По этой причине надо или переименовывать метд сразу во всех местах где он используется, или вообще этого не делать. Аналогично с классами, полями и пакетами.

Автор: ShurikA 17.2.2007, 23:22
А цчто тогда происходит с обращениями к методам тех самыч классов (для передачи данных) в функциях программы?

Добавлено @ 23:30 
Цитата(LSD @  17.2.2007,  20:39 Найти цитируемый пост)
Можно собирать

Есть какието определённые правила сборки?
На пример нузчно ли собирать именно втот же самый JAR проги (получившийся после обфускации)?

Автор: LSD 17.2.2007, 23:42
Цитата(ShurikA @  17.2.2007,  23:22 Найти цитируемый пост)
А цчто тогда происходит с обращениями к методам тех самыч классов (для передачи данных) в функциях программы?

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


Цитата(ShurikA @  17.2.2007,  23:22 Найти цитируемый пост)
Есть какието определённые правила сборки?
На пример нузчно ли собирать именно втот же самый JAR проги (получившийся после обфускации)?

Собирать точно также как и как и в случае со стандартными классами. Т.е. если хочешь получить один jar со всеми классами, то просто копируешь полученные классы в каталог, туда же распаковываешь библиотеки, после чего упаковываешь их в jar. Ну или JBuilder-у указываешь включать в получившийся jar все используемые библиотеки.

Автор: ShurikA 17.2.2007, 23:55
И последнее:
у каждой библиотеки есть свой манифест... Как с этим быть?

Автор: LSD 18.2.2007, 00:09
Цитата(ShurikA @  17.2.2007,  23:55 Найти цитируемый пост)
у каждой библиотеки есть свой манифест... Как с этим быть?

Посмотри что там написанно, если есть существенная информация, то добавь в итоговый манифест. Хотя врядли там написано, что-то важное.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)