Насколько хорошо работает обфускация?
От: igna Россия  
Дата: 23.04.10 06:30
Оценка:
Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby? Можно ли получить результат, восстановить исходный текст из которого будет так же трудно как из обычной откомпилированой и скомпонованной программы на C?
Re: Насколько хорошо работает обфускация?
От: Plague Россия 177230800
Дата: 23.04.10 07:48
Оценка: 2 (1) :)
Здравствуйте, igna, Вы писали:

I>Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby? Можно ли получить результат, восстановить исходный текст из которого будет так же трудно как из обычной откомпилированой и скомпонованной программы на C?

Я считаю, что обфускация, как правило, нужна для оптимизации программы. К примеру, в Java она может ускорить работу программы. Плюс, исходные тексты становятся практически не читаемыми. Я считаю, что дальше "защищать" код особого смысла нет. Разве что — защищать программу целиком от пиратов.

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

В компилируемом С — отсутствует структура, т.е. вся программа — всего лишь набор комманд. Хоть некоторые "декомпиляторы" и пытаются собрать обратно программу, используя информацию о генерируемом коде компиляторами, но в общем собрать не реально. Плюс, есть неоднозначные конструкции генерируемые оптимизатором. Кроме того добавлю: в общем в С невозможно и дизассемблирование, т.к. одна инструкция в Asm может иметь разной длины представления в бинарном виде, а при дизассемблировании не всегда можно адекватно оценить константу — это смещение или просто число, и т.п.
Re: Насколько хорошо работает обфускация?
От: Sinix  
Дата: 23.04.10 08:08
Оценка: 2 (1) +1
Здравствуйте, igna, Вы писали:

I>Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby?

Для .net-based — пока есть возможность получить il, реверс кода не представляет никаких проблем.
Re[2]: Насколько хорошо работает обфускация?
От: igna Россия  
Дата: 23.04.10 12:36
Оценка:
Здравствуйте, Plague, Вы писали:

P>Я считаю, что дальше "защищать" код особого смысла нет.


Вот не скажи, зависит от кода. Есть трудоемкие при разработке вещи, которые если украсть, то довольно просто можно использовать в другой программе, например грамматика естественного языка.
Re[3]: Насколько хорошо работает обфускация?
От: alpha21264 СССР  
Дата: 23.04.10 12:53
Оценка: 3 (1) +3
Здравствуйте, igna, Вы писали:

I>Здравствуйте, Plague, Вы писали:


P>>Я считаю, что дальше "защищать" код особого смысла нет.


I>Вот не скажи, зависит от кода. Есть трудоемкие при разработке вещи, которые если украсть, то довольно просто можно использовать в другой программе, например грамматика естественного языка.


Грамматика естественного языка есть в учебнике этого языка. Это мало кому помогло.
На практике дают тебе программу в исходниках — и хрен ты в ней разберешься.
Без всяких обфурскаторов.

Течёт вода Кубань-реки куда велят большевики.
Re[4]: Насколько хорошо работает обфускация?
От: igna Россия  
Дата: 23.04.10 13:26
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Грамматика естественного языка есть в учебнике этого языка.


Ну я о формальной грамматике.
Re[4]: Насколько хорошо работает обфускация?
От: FR  
Дата: 23.04.10 14:28
Оценка:
Здравствуйте, alpha21264, Вы писали:

A>Грамматика естественного языка есть в учебнике этого языка. Это мало кому помогло.

A>На практике дают тебе программу в исходниках — и хрен ты в ней разберешься.
A>Без всяких обфурскаторов.

И профессии реверс-инженер не существует
Re: Насколько хорошо работает обфускация?
От: мыщъх США http://nezumi-lab.org
Дата: 23.04.10 14:54
Оценка: 2 (1) +1
Здравствуйте, igna, Вы писали:

I> Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby?

работает настолько ужасно, что в большинстве случаев снимается автоматом без участия человека. и на выходе мы получаем программу без комментарив и без осмысленных имен. впрочем, обфускация бывает разная. например:

Collab["\x63\x6fll\x65\x63\x74\x45\x6d\x61\x69\x6c\x49\x6e\x66\x6f"]({subj:0,msg:plin});

ес-но, строка "\x63.." может быть зашифрована и генерироваться на лету, что существенно затруднит реконструкцию программы (это правда не жаба, а жаба скрипт):

еще из той же серии:

var editC = [ "un", "pe", "es", "ca", ""];
check = new String (editC [0 ]+ editC[ 2] +editC [3 ]+ editC[ 1] +editC [4 ]);

ну а это чтобы жизнь малиной не казалась:
var x5ddOo = '%QX4D%QX31%QX53%QX71%QX4A%QX34%QX2E%QX6E%QX61%QX6D%QX65%QX3D%QX27%QX4E%QX71%QX30%QX45%QX76%QX71%QX27%QX3rQX4D%QX31%QX53%QX71%QX4A%QX34%QX2E%QX73%QX74%QX79%QX6C%QX65%QX2E%QX76%QX69%QX73%QX69%QX62%QX69%QX6C%QX69%QX74%QX79%QX3D%QX27%QX68%QX69%QX64%QX64%QX65%QX6E%QX27%QX3rQX71%QX73%QX56%QX4rQX2E%QX61%QX70%QX70%QX65%QX6E%QX64%QX43%QX68%QX69%QX6C%QX64%QX28%QX4D%QX31%QX53%QX71%QX4A%QX34%QX29%QX3B';
eval(unescape(x5ddOo.replace(/r/g, 'B%').replace(/%QX/g, '%')));

что, впрочем, снимается автоматом (см. http://jsunpack.jeek.org/dec/go) и кроме тормозов не дает ничего. стоп, вру. еще как дает. ипсы распознают факт обфускации и блокируют страницу. тоже самое делают и поисковики. разработчики коммерческих жаба-скриптов уже огребли и теперь ругаются матом как дети.

> Можно ли получить результат, восстановить исходный текст

> из которого будет так же трудно как из обычной
> откомпилированой и скомпонованной программы на C?
ну, строго говоря, поднять бинарник до компилируемых исходников на си — оччччень ресурсоемкая задача. ни один существующий декомпилятор не генерирует код, пригодный для компиляции и над ним нужно очень долго и нудно работать. настолько долго, что обычно дешевле переписать самому.

скриптовые языки не имеют подобной проблемы и потому если нам нужно что-то поменять в уже существующей программе — на это уйдет не очень много времени. и полного анализа не потребуется.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.