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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что такое Обфускация? 
:(
    Опции темы
batigoal
Дата 3.3.2005, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Цитата(AntonSaburov @ 3.3.2005, 18:40)
Обфускатор по сути "запутывальщик".

Значит, это все-таки не абсолютная защита, да? Он не закрывает код, а старается изменить его до неузнаваемости, и, зная алгоритмы его работы и ключи (если он их использует), можно раскрыть код. Получается, что задача "деобфускации" - это криптоатака?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Domestic Cat
Дата 3.3.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



Цитата
Пользую jad, вроде работает


это я к
Цитата
jad.exe декомпилирует вроде нормально, вот только внутренних классов не видет, знает кто нибудь еще декомпиляторы?

smile




--------------------

PM   Вверх
AntonSaburov
Дата 3.3.2005, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Абсолютной защиты не будет никогда.

Цитата(Lamer @ 3.3.2005, 18:50)
Получается, что задача "деобфускации" - это криптоатака?

Нет, это больше напоминает, что первоначальный маршрут от Питера до Москвы шел напрямую, но его выдали в виде "через Владивосток". При этом заменяются имена классов и методов на абсолютно бессмысленные - a1, b32, f4 и так далее.

Ну предположим у класса есть 25 методов из них 18 закрыты. Можно изменить имена этих методов. Можно сделать промежуточный класс, который будет создаваться и уже внутри себя вызывать нужный метод. Можно вырезать какие-то методы в отдельный класс, назвать его страшно непонятным именем. Ну и прочая. Т.е. получается код. который читать можно, но понимать который (и вносить какие-либо изменения) приносит головной боли столько, что это никто делать не будет. Разве что за большие-большие деньги, которые будут сравнимы со стоимостью пакета.
PM MAIL WWW ICQ   Вверх
kashka
Дата 3.3.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



я тут еще один декомпилятор нашла, может пригодится кому нибудь:
http://members.fortunecity.com/neshkov/dj.html
PM MAIL   Вверх
Domestic Cat
Дата 3.3.2005, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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




Цитата
Значит, это все-таки не абсолютная защита, да? Он не закрывает код, а старается изменить его до неузнаваемости, и, зная алгоритмы его работы и ключи (если он их использует), можно раскрыть код. Получается, что задача "деобфускации" - это криптоатака?


Нет, обфускатор делает код практичски бессмысленным для того, кто его декомпилит. И знаниe алгоритмa нe поможет, т.к. будут уничтожны все несущие смысл именa переменных, классов, и пр. А без этого понять как работаеt код сложновато.


--------------------

PM   Вверх
batigoal
Дата 3.3.2005, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Ясно. Спасибо за разъяснения.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
kashka
Дата 3.3.2005, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



Насчет jad (и других тоже), он то в принципе работает, вот только иногда try/catch не распознает и странние конструкции такого вида создает:
Код

       buf = new byte[256];
_L2:
       if(conn != null || port >= 9940)
           break; /* Loop/switch isn't completed */
       conn = new Socket("localhost", port);
       BufferedInputStream in = new BufferedInputStream(conn.getInputStream());
       BufferedOutputStream out = new BufferedOutputStream(conn.getOutputStream());
       buf[0] = 63;
       out.write(buf);
       out.flush();
       Thread.sleep(50L);
       if(in.available() <= 0)
           break MISSING_BLOCK_LABEL_113;
       in.read(buf, 0, 256);
       if(buf[0] == 33)
           return conn;
       continue; /* Loop/switch isn't completed */
       return null;
       IOException exception;
       exception;
       port = 9940;
       continue; /* Loop/switch isn't completed */
       exception;
       port++;
       if(true) goto _L2; else goto _L1
_L1:



PM MAIL   Вверх
DarkDS
Дата 3.3.2005, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Цитата(Lamer @ 3.3.2005, 18:50)
Значит, это все-таки не абсолютная защита, да? Он не закрывает код, а старается изменить его до неузнаваемости, и, зная алгоритмы его работы и ключи (если он их использует), можно раскрыть код. Получается, что задача "деобфускации" - это криптоатака?

В том то и проблемма байт кода что его можно однозначно декомпилировать. То есть абсолютной защиты для байт кода как таковой нет.
Ключей при обфускации нет. нО криптоатака деобфускации не поможет smile
Тут такой момент. В процессе обфускации происходит 3-и основных действия:
1. Удаяляется дебаговая информация (это может быть пропущенно если компилировалось без нее)
2. переименовываеются классы, методы и переменные (за некоторым исключением, связонные с рефлексией). То есть:
Код

class Foo
{
   private String fooStr;
   public String fooFunction()
   {
        return fooStr;
   }
}


будет при компилировании-обыфускации-декомпилировании выглядеть примерно так:
Код

class if
{
   private String for;
   public String if()
   {
        return for;
   }
}

или
Код

class а
{
   private String а;
   public String а()
   {
        return а;
   }
}

Что будет затруднять разбор программы. smile

3. добавляются "логические бомбы" (это делают не все обфускаторы).
к примеру самая простая логическая бомба:
Код

class if
{
   private String for;
   public String if()
   {
        return for;
   }
}

->
Код

class if
{
   private String for;
   public String if()
   {
        return for;
        catch(e)
        {
        }
   }
}


Катч вставлен в данном случае в байт код после ретурна (точнее вставленна последовательность инструкций, которая обозначет катч). При работе программы она никак на будет влиять на выполнение данной функции. При декомпиляции же не всякий декомпилятор сможет это "переварить".
Добавлено @ 19:13
Цитата(kashka @ 3.3.2005, 19:07)
Насчет jad (и других тоже), он то в принципе работает, вот только иногда try/catch не распознает и странние конструкции такого вида создает:

jad - работает как декомпилятор. как обфускатор не работает smile
PM MAIL   Вверх
kashka
Дата 3.3.2005, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



Я имею ввиду что, после декомпиляции появляются иногда странные структуры,
например:
Код

return true;
       Exception exception;
       exception;
       new HuginGUIError(exception);
       return false;


а
Добавлено @ 19:21
я так думаю, что jad try/catch иногда в такои форме записивает. По краинеи мере после соответствующего исправления, все работало smile .
PM MAIL   Вверх
DarkDS
Дата 3.3.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Там просто неоднозначная ситуация. И поэтому не до конца переводится в ява код.
По этому поводу советую почитать Работем с Байткодом (с)Domestic Cat.

PM MAIL   Вверх
kashka
Дата 3.3.2005, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



В каком смысле неоднозначная?
PM MAIL   Вверх
Domestic Cat
Дата 3.3.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



try/catch при компиляции превращается в несколько запутанный байткод, видимо декомпилер и колбасит по этому поводу smile


--------------------

PM   Вверх
DarkDS
Дата 3.3.2005, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



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

Добавлено @ 19:42
ЗЫ. Кстати. Внешне катч в байт коде выглядит еще более запутанно smile
Так что неоднозначностей там хватает.
PM MAIL   Вверх
kashka
Дата 3.3.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 29.11.2004
Где: Wolfenbuettel, Ge rmany

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



Ну ладно try/catch можно легко исправить а вот что означает:
Код

  if(rootFrame == null || !rootFrame.containsInstances())
           break MISSING_BLOCK_LABEL_104;
       int answer = JOptionPane.showConfirmDialog(this, "This network contains instances of other networks.\nDo you want all instance networks to be reloaded as well?", "Reload subnets?", 0, 3, null);
       if(answer != 0)
           break MISSING_BLOCK_LABEL_73;


PM MAIL   Вверх
Се ля ви
Дата 3.3.2005, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java/SOAрхитектор
****


Профиль
Группа: Модератор
Сообщений: 2016
Регистрация: 5.6.2004
Где: place without tim e and space

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



Цитата(AntonSaburov @ 3.3.2005, 18:56)
При этом заменяются имена классов и методов на абсолютно бессмысленные - a1, b32, f4 и так далее.

А как же библиотеки???


--------------------
  )
 (
[_])
проф. блог

Кролики думали, что занимаются любовью, а на самом деле их просто разводили...
PM MAIL WWW Skype GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




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


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

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