Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby? Можно ли получить результат, восстановить исходный текст из которого будет так же трудно как из обычной откомпилированой и скомпонованной программы на C?
Здравствуйте, igna, Вы писали:
I>Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby? Можно ли получить результат, восстановить исходный текст из которого будет так же трудно как из обычной откомпилированой и скомпонованной программы на C?
Я считаю, что обфускация, как правило, нужна для оптимизации программы. К примеру, в Java она может ускорить работу программы. Плюс, исходные тексты становятся практически не читаемыми. Я считаю, что дальше "защищать" код особого смысла нет. Разве что — защищать программу целиком от пиратов.
Самое главное — в байткоде остается стуктура программы и обычно нет неоднозначных конструкций. Вроде, в Java при этом есть статическая проверка байткода на корректность.
В компилируемом С — отсутствует структура, т.е. вся программа — всего лишь набор комманд. Хоть некоторые "декомпиляторы" и пытаются собрать обратно программу, используя информацию о генерируемом коде компиляторами, но в общем собрать не реально. Плюс, есть неоднозначные конструкции генерируемые оптимизатором. Кроме того добавлю: в общем в С невозможно и дизассемблирование, т.к. одна инструкция в Asm может иметь разной длины представления в бинарном виде, а при дизассемблировании не всегда можно адекватно оценить константу — это смещение или просто число, и т.п.
Здравствуйте, igna, Вы писали:
I>Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby?
Для .net-based — пока есть возможность получить il, реверс кода не представляет никаких проблем.
Здравствуйте, Plague, Вы писали:
P>Я считаю, что дальше "защищать" код особого смысла нет.
Вот не скажи, зависит от кода. Есть трудоемкие при разработке вещи, которые если украсть, то довольно просто можно использовать в другой программе, например грамматика естественного языка.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, Plague, Вы писали:
P>>Я считаю, что дальше "защищать" код особого смысла нет.
I>Вот не скажи, зависит от кода. Есть трудоемкие при разработке вещи, которые если украсть, то довольно просто можно использовать в другой программе, например грамматика естественного языка.
Грамматика естественного языка есть в учебнике этого языка. Это мало кому помогло.
На практике дают тебе программу в исходниках — и хрен ты в ней разберешься.
Без всяких обфурскаторов.
Здравствуйте, alpha21264, Вы писали:
A>Грамматика естественного языка есть в учебнике этого языка. Это мало кому помогло. A>На практике дают тебе программу в исходниках — и хрен ты в ней разберешься. A>Без всяких обфурскаторов.
Здравствуйте, igna, Вы писали:
I> Насколько хорошо работает обфускация программ на Java, .NET, Python и Ruby?
работает настолько ужасно, что в большинстве случаев снимается автоматом без участия человека. и на выходе мы получаем программу без комментарив и без осмысленных имен. впрочем, обфускация бывает разная. например:
ес-но, строка "\x63.." может быть зашифрована и генерироваться на лету, что существенно затруднит реконструкцию программы (это правда не жаба, а жаба скрипт):
ну а это чтобы жизнь малиной не казалась:
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.