| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Что такое Обфускация? |
| Автор: kashka 3.3.2005, 11:37 |
| Ну вот новая тема. А как мне точно определить обфусцировали или нет? |
| Автор: Domestic Cat 3.3.2005, 11:57 |
| http://mindprod.com/jgloss/obfuscator.html |
| Автор: kashka 3.3.2005, 12:15 |
| Каким декомпилятором мне воспользоваться? Я тут jad из интернета скачала, пойдет? |
| Автор: kashka 3.3.2005, 12:50 |
| Всем СПАСИБО код они не обфусцировали, jad.exe работает хорошо так что все получилось. |
| Автор: AntonSaburov 3.3.2005, 12:52 | ||
Вполне. Очень неплохая тулза. Но против обфускаторов не потянет само собой |
| Автор: batigoal 3.3.2005, 14:53 |
| А чем можно воспользоваться для обс... офс... обфуксации? Там много ссылок, но чем пользуются специалисты? |
| Автор: kashka 3.3.2005, 14:56 |
| jad.exe декомпилирует вроде нормально, вот только внутренних классов не видет, знает кто нибудь еще декомпиляторы? |
| Автор: kashka 3.3.2005, 15:11 |
| Ошиблась внутренние классы он все таки видет |
| Автор: Се ля ви 3.3.2005, 15:17 |
| kashka Mocha - старый декомпилятор раньше был... поищи - может, где и остался, вдруг, он поможет? P.S. А мне бы кто бы обфускатор посоветовал бесплатный?.. |
| Автор: DarkDS 3.3.2005, 15:46 |
| Смотреть тут: http://java-source.net/open-source/obfuscators (tnx to Domestic Cat Сам лично пользовался RetroGuard-ом |
| Автор: Domestic Cat 3.3.2005, 18:30 |
| Пользую jad, вроде работает |
| Автор: batigoal 3.3.2005, 18:35 | ||
Так jad - это декомпилятор или обфускатор? Или и то, и другое? |
| Автор: Се ля ви 3.3.2005, 18:37 |
| я не пользовал - но вроде тока декомпилятор... |
| Автор: AntonSaburov 3.3.2005, 18:40 | ||
Это просто декомпилятор. Просто преобразует байт-код в код на java. Обфускатор по сути "запутывальщик". Он преобразует код в запутанную систему внутренних классов, методов. И после декомпиляции перед глазами эдакий монстр, разобраться в работе которого крайне сложно. Дешевле становиться купить нужный пакет с исходниками |
| Автор: DarkDS 3.3.2005, 18:41 | ||
jad - декомпилятор... JODE - обфускатор |
| Автор: batigoal 3.3.2005, 18:50 | ||
Значит, это все-таки не абсолютная защита, да? Он не закрывает код, а старается изменить его до неузнаваемости, и, зная алгоритмы его работы и ключи (если он их использует), можно раскрыть код. Получается, что задача "деобфускации" - это криптоатака? |
| Автор: Domestic Cat 3.3.2005, 18:56 | ||||
это я к
|
| Автор: AntonSaburov 3.3.2005, 18:56 | ||
Абсолютной защиты не будет никогда.
Нет, это больше напоминает, что первоначальный маршрут от Питера до Москвы шел напрямую, но его выдали в виде "через Владивосток". При этом заменяются имена классов и методов на абсолютно бессмысленные - a1, b32, f4 и так далее. Ну предположим у класса есть 25 методов из них 18 закрыты. Можно изменить имена этих методов. Можно сделать промежуточный класс, который будет создаваться и уже внутри себя вызывать нужный метод. Можно вырезать какие-то методы в отдельный класс, назвать его страшно непонятным именем. Ну и прочая. Т.е. получается код. который читать можно, но понимать который (и вносить какие-либо изменения) приносит головной боли столько, что это никто делать не будет. Разве что за большие-большие деньги, которые будут сравнимы со стоимостью пакета. |
| Автор: kashka 3.3.2005, 19:00 |
| я тут еще один декомпилятор нашла, может пригодится кому нибудь: http://members.fortunecity.com/neshkov/dj.html |
| Автор: Domestic Cat 3.3.2005, 19:00 | ||
Нет, обфускатор делает код практичски бессмысленным для того, кто его декомпилит. И знаниe алгоритмa нe поможет, т.к. будут уничтожны все несущие смысл именa переменных, классов, и пр. А без этого понять как работаеt код сложновато. |
| Автор: batigoal 3.3.2005, 19:01 |
| Ясно. Спасибо за разъяснения. |
| Автор: kashka 3.3.2005, 19:07 | ||
Насчет jad (и других тоже), он то в принципе работает, вот только иногда try/catch не распознает и странние конструкции такого вида создает:
|
| Автор: DarkDS 3.3.2005, 19:10 | ||||||||||||||
В том то и проблемма байт кода что его можно однозначно декомпилировать. То есть абсолютной защиты для байт кода как таковой нет. Ключей при обфускации нет. нО криптоатака деобфускации не поможет Тут такой момент. В процессе обфускации происходит 3-и основных действия: 1. Удаяляется дебаговая информация (это может быть пропущенно если компилировалось без нее) 2. переименовываеются классы, методы и переменные (за некоторым исключением, связонные с рефлексией). То есть:
будет при компилировании-обыфускации-декомпилировании выглядеть примерно так:
или
Что будет затруднять разбор программы. 3. добавляются "логические бомбы" (это делают не все обфускаторы). к примеру самая простая логическая бомба:
->
Катч вставлен в данном случае в байт код после ретурна (точнее вставленна последовательность инструкций, которая обозначет катч). При работе программы она никак на будет влиять на выполнение данной функции. При декомпиляции же не всякий декомпилятор сможет это "переварить". Добавлено @ 19:13
jad - работает как декомпилятор. как обфускатор не работает |
| Автор: kashka 3.3.2005, 19:19 | ||
| Я имею ввиду что, после декомпиляции появляются иногда странные структуры, например:
а Добавлено @ 19:21 я так думаю, что jad try/catch иногда в такои форме записивает. По краинеи мере после соответствующего исправления, все работало |
| Автор: DarkDS 3.3.2005, 19:22 |
| Там просто неоднозначная ситуация. И поэтому не до конца переводится в ява код. По этому поводу советую почитать http://forum.vingrad.ru/index.php?showtopic=35748. |
| Автор: kashka 3.3.2005, 19:30 |
| В каком смысле неоднозначная? |
| Автор: Domestic Cat 3.3.2005, 19:40 |
| try/catch при компиляции превращается в несколько запутанный байткод, видимо декомпилер и колбасит по этому поводу |
| Автор: DarkDS 3.3.2005, 19:40 |
| Так как мы достигли ретурна, то это может быть либо логической бомбой, либо катчем эксепшина. В большинстве таких случаев декомпиляторы эксепшины из опкода не переводят в ява код. Добавлено @ 19:42 ЗЫ. Кстати. Внешне катч в байт коде выглядит еще более запутанно Так что неоднозначностей там хватает. |
| Автор: kashka 3.3.2005, 19:49 | ||
Ну ладно try/catch можно легко исправить а вот что означает:
|
| Автор: Се ля ви 3.3.2005, 21:49 | ||
А как же библиотеки??? |
| Автор: Domestic Cat 3.3.2005, 21:52 | ||
Паблик интерфейс и обращения к внешнним библиотекам не обфусцируются, иначe ничего б нe работало. |
| Автор: LSD 3.3.2005, 22:00 | ||||
Не совсем, дезасемблирровать да, а вот с декомпиляцией не все так просто. Где то я читал статейку, в которой мужик показал, что не всякий байткод соответствует Java программе. И есть вещи реализуемые на ассемблере для JVM и не реализуемые на Java.
Тут надо смотреть дизасемблированный код и пытаться его восстановить. Получить его можно jad -dis. Если метод не очень большой то можно попробовать. P.S. Кстати мы тут все обсуждаем не совсем законную тему, но, учитывая что мы делаем это только с теоретической точки зрения, все в порядке |
| Автор: DarkDS 3.3.2005, 22:27 | ||||||
Так скажем. Откомпилированный без применений дополнительных средств байт код в большинстве случаев декомпилируется в ява код, равнозначный по функциональносте оригинальному. Добавлено @ 22:28
ЗЫ. Я кстати обсуждаю вполне законную - как защитить код с помощью обфускации Добавлено @ 22:29
А это как раз и есть рефлексия |
| Автор: LSD 3.3.2005, 22:36 | ||
Я не совсем об этом, там было немного о другом. Там вроде даже был пример как можно обойти песочницу (вернее на сайте были примеры таких апплетов). Я попытаюсь ее найти. |
| Автор: Domestic Cat 3.3.2005, 23:18 | ||
Пo-моему эта штука "взрывала" первую Mocha? |
| Автор: Се ля ви 4.3.2005, 01:10 | ||
Я читал в Java CookieBook, что Mocha сама себя обфусцировать не может - и Jad тоже её разобрать не может... И вообще исходникии Mocha не сохранились из-за смерти автора, поэтому Mocha впринципе не могут вскрыть - ни в каком запутанном виде... |
| Автор: Domestic Cat 4.3.2005, 03:48 | ||
Ошибся, Mocha ложилась на таком:
|
| Автор: DarkDS 4.3.2005, 12:45 | ||
Не. Mocha на попе после ретурна умирала вообще... Качт она просто не переваривала. Либо метод не декомпилила, либо декомпилила очень ошибочно (так как трая в начале не было) |
| Автор: Upir 22.3.2005, 12:00 |
| А кто имеет опыт работы JBuilder + RetroGuard? Если есть, поделитесь. В моем случае (JBuilderX+RetroGuard 1.1) кроме изменения наименования приват переменных и методов в числовую последовательность ничего не делает. |
| Автор: DarkDS 22.3.2005, 13:48 |
| Чесно говоря я работал только с модифицированным ретрогардом. У нас все (что не входило игноре лист) переименовывалось. Включая имена констант, классов, методов. В игнор листе было то, что было подвержено рефлексии. Ксатати. Ретрогард вроде как не добавлял логических бомб... + еще кстати. Советую взять последную версию (она вроде как 2.0 или выше). http://www.retrologic.com/retroguard-main.html |
| Автор: Upir 22.3.2005, 13:57 |
| Последняя 2.0.1 пробовал и с ней.. думаю, что-то не так просто настраиваю в билдере |
| Автор: DarkDS 22.3.2005, 15:32 |
| Может. У меня отдельно батником запускалось |
| Автор: Upir 22.3.2005, 16:16 |
| Отдельно может помочь только для jar файлов. В моем случае необходимы натив исполняемые файлы. Хотя не получается через билдер для всех типов) |