| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > PHP Defender |
| Автор: BuShaRt 11.6.2007, 08:54 | ||||||
Сегодня наткнулся на интересное творение, так называемую http://www.phpdefender.com/. Суть программы в придане коду некоторой запутаности, а именно, как утверждают разработчики:
Хотелось бы выслушать ваше мнение, а стоит ли игра свеч, для чего приведу пример кода: До:
После:
|
| Автор: Хрипа 11.6.2007, 10:15 |
| BuShaRt, Ну и для чего это надо ? Ах да я догадался утилита для ламеров которые сами не в состоянии написать безопастный код Смысла в этой утилите нет так как Нечитабельный код оценивается в 0 каким бы он полезным небыл! |
| Автор: BuShaRt 11.6.2007, 11:23 |
| Хрипа, Хм, а ты можешь написать код защищенный от модификации третьими лицами? И любой код, защищенный от модификации нечитабелен |
| Автор: Opik 11.6.2007, 14:21 |
| Абсолюбтно в этом не вижу смысла, т.к этот код при желании вполне можно разобрать, никакой смысловой нагрузки. |
| Автор: sTa1kEr 11.6.2007, 14:28 | ||
| Это называется http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%84%D1%83%D1%81%D0%BA%D0%B0%D1%86%D0%B8%D1%8F. А подобные программы соответственно обфускаторами (для PHP их в интернете полно). На самом деле, имхо, на данный лучшая защита кода PHP - это именно обфускация. Лучше, чем Zend Encoder и IonCube, т.к. после них код возможно восстановить (хотя бы даже в теории, хотя на практике это тоже возможно) полностью включая имена переменных итп, после обфускатора, код автоматически привести в исходное состояние невозможно в принципе, а восстановление кода вручную потребует чрезмерно много усилий. Но тут есть и подводные камни, к примеру если используются магические методы типа __get(), изменяемые имена переменных $$var, функций $func() итп, то после обфускатора код может стать не рабочим, либо обфускатор не принесет сколько-нибудь полезного эффекта. Добавлено через 2 минуты и 31 секунду
В данном, простейшем примере - да. К тому же в этом примере не были заменены имена методов (вероятно потому-что они public). Но попробуйте разобрать сколько-нибудь большой проект. Услий на это уйдет в разы больше чем написать все с нуля. |
| Автор: mikla 11.6.2007, 15:04 |
| Хорошая штука) лабы преподам сдавать ) |
| Автор: BuShaRt 11.6.2007, 15:08 | ||
именно... код на килобайт 100 можно пол дня только разбивать на строки и проблемы проставлять... а переменные искать, так еще дольше... (даже если юзать Find&Replace)... Если уж говорить о безопастности, то в данном коде для пущий безопастности (в плане кидалова), можно добавить функцию замоудаления, вызываемую по определенному POST запросу.... я сомневаюсь, что эту функцию можно найти в таком коде... |
| Автор: WolfON 11.6.2007, 15:08 |
| Ничего запутанного в том коде не увидел. Ну убрал переносы, ну изменил название переменной - код все-равно читабелен. |
| Автор: BuShaRt 11.6.2007, 15:09 |
| Причем способ не плох в плане борьбы с конкурентами... Я бы заказчику помохал ручкой, если бы мне он такой код на доработку дал ну или за дешифрацию, взял бы больш, чем за доработку... Добавлено через 1 минуту и 15 секунд WolfON, в данном случае код всего несколько байтовый, а если больше? там уже за переменными не уследишь... |
| Автор: sTa1kEr 11.6.2007, 15:33 | ||
Так же в идеале изменение имен пользовательских классов, методов, функций, замена числовых констант на числа (да много чего еще можно перечислить). Еще в данном примере вы сначала прочитали исходный код и только затем код после обфускатора, согласитесь, это имеет очень большое значение. Легко разгадывать кроссворды заранее зная все ответы. Вы просто возьмите любой не знакомый вам проект, проведите его через обфускатор и только потом попробуйте разобраться в нем. |
| Автор: WolfON 11.6.2007, 16:08 |
| sTa1kEr, я не читал оригинальный код в теме про то, как кодить не надо были примеры и позапутанней без всякого обфускатора ) |
| Автор: BuShaRt 11.6.2007, 16:29 | ||
это точно... |
| Автор: sTa1kEr 11.6.2007, 16:48 | ||||
Т.е. вы предлагаете сразу писать так, что бы никто не понял? Тоже вариант Для наглядности, скрипт простейший из FCKEditor-а, но немножко посложнее (120 строк). Использовал простенький бесплатный обфускатор PHP Obfuscator.
|
| Автор: BuShaRt 11.6.2007, 18:21 | ||||
| Я думаю, как нечто для постоянной защиты не пройдет т.к. Replace быстро все поставит на свои месте... Но вот,
+
По моему действенно, хотя не пробывал... ваше мнение? |
| Автор: sTa1kEr 11.6.2007, 18:40 |
Да, это не панацея. Но это лучшее, что может защитить код на данный момент. И что на что менять? Кроме того методы могут называться одинаково или для локальных переменных те же названия, что и для свойств классов, вариантов много т.ч. даже замена по регулярному выражению тут не поможет. Единственное что легко восстановить - это переносы строк и отступы. Приводить же код к первоначальному виду выйдет дороже, чем написать с нуля. |
| Автор: ARG 11.6.2007, 18:46 |
| Во первых от толкого пшпшника не обезопасит, во вторых я этих финтелей не люблю, потому, что многие не обезопасиваются, а клиента так к себе привязывают, хорошо, если еще все толково сделано было, а если все через одно место, то потом такие вот подсевшие горе заказчики ко мне попадают и у меня от них одна головная боль. |
| Автор: BuShaRt 11.6.2007, 18:46 |
| sTa1kEr, Я английского не знаю, да и некоторые программисты не когда не называют переменные понятными именами, поэтому, вполне вариант... цель - разлечать функции и переменные в коде... а вот lllldasdllll32 и u4124488a отличаються очень плохо от аналогичных.... Добавлено через 5 минут и 49 секунд ARG, есть и такое дело, но мне честно говоря пофиг |
| Автор: sTa1kEr 11.6.2007, 19:26 | ||||
Согласен, но толковый программист быстрее и лучше сам напишет нужный функционал, чем будет разгребать такой код.
Если скрипт пишется на заказ, то да, это это бы выглядело как минимум не красиво по отношению к клиенту. Но когда скрипт пишут на продажу, то это какая-никакая, но все же защита от любителей "зануливать" чужие скрипты.
Цель не просто различать функции и переменные, а понимать код и уметь его модифицировать. |
| Автор: BuShaRt 11.6.2007, 20:27 | ||
3 шага: 1. Разбиение на строки по символу ";" - explode 2. Замена все "абры" и "кадабры" на "function1-2-3" и "var1-2-3" - replace 3. Ручками добивание "логически нужны в дыннах местах переменных" т.е. result, val, i и т.п. код читаеться... имхо все кроме третьего пункта можно доверить дешефратору написанному за 1-2 часа максимум.... поэтому мне кажеться способ действителен лишь в когда надо чтоб код не могли просмотреть в горячем режиме... |
| Автор: WolfON 11.6.2007, 20:41 |
| Лучше-уж тогда самим написать нормальный обфускатор, который будет использовать ссылки на перменные, кучу дефайнов для запутывания кода, евалы и тд |
| Автор: sTa1kEr 11.6.2007, 21:02 | ||||||
А как же строкои, html код, конструкции вида $str = <<< EOS, в них вы тоже будете менять все без разбора? А различия между классами, функциями, методами, константами?
"Добейте" ручками эту переменную (пускай даже не в "абрах" и не в "кадабрах")
А такого кода будет 95%. Я не спорю, что возможно привести код к более-менее читабельному виду, но, уверяю, это только на практике кажется 3 preg_replace() и готово. В реале вы потратите в лучшем случае в разы больше усилий, чем напишете с нуля. Вы просто попробуйте сами восстановить, если у вас много свободного времени |
| Автор: BuShaRt 11.6.2007, 21:58 | ||||
Грамотно написаннй парсер все нормально сделает, ведь в основе кодера лежат те же алгоритмы, что и в декодаре, только наоборот
Убедили |
| Автор: Serkys 12.6.2007, 11:03 |
| А ещё можно заказать переработку кода в нормальное состояние авторам обсфукатора Тоже бизнес |
| Автор: BuShaRt 12.6.2007, 14:03 |
| Serkys, авторы могу в два счета написать дешифратор... |
| Автор: Serkys 12.6.2007, 16:50 |
| BuShaRt, у меня на этот счёт сомнений нет |
| Автор: GZep 12.6.2007, 18:23 |
| штука полезная: можно ускорить немного обработку кода, убрав из него переносы |
| Автор: BuShaRt 12.6.2007, 21:57 |
| GZep, Жжешь) чтоб привести в нормальный вид код некоторых "умельцев", его сначала надо прогнать через шифратор а ведь оно и правда... |