![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
BuShaRt |
|
||||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Сегодня наткнулся на интересное творение, так называемую PHP Defender. Суть программы в придане коду некоторой запутаности, а именно, как утверждают разработчики:
Хотелось бы выслушать ваше мнение, а стоит ли игра свеч, для чего приведу пример кода: До:
После:
|
||||||
|
|||||||
Хрипа |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 11.12.2006 Репутация: -6 Всего: нет |
BuShaRt,
Ну и для чего это надо ? Ах да я догадался утилита для ламеров которые сами не в состоянии написать безопастный код ![]() Смысла в этой утилите нет так как Нечитабельный код оценивается в 0 каким бы он полезным небыл! --------------------
<Вырезана, как не соответствующая правилам форума > |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Хрипа,
Хм, а ты можешь написать код защищенный от модификации третьими лицами? И любой код, защищенный от модификации нечитабелен ![]() |
|||
|
||||
Serkys |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 4 Всего: 22 |
Надо попробовать.
Перед выкладкой заказчику на хостинг можно хотя бы так затруднить работу, если он меня кинет. Не кинет - нормальный код отдавать. Добавлено через 4 минуты и 5 секунд
Код она безопасным не делает, только предельно затрудняет его чтение и модификацию. |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 24 Всего: 55 |
Абсолюбтно в этом не вижу смысла, т.к этот код при желании вполне можно разобрать, никакой смысловой нагрузки.
|
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Это называется Обфускация. А подобные программы соответственно обфускаторами (для PHP их в интернете полно).
На самом деле, имхо, на данный лучшая защита кода PHP - это именно обфускация. Лучше, чем Zend Encoder и IonCube, т.к. после них код возможно восстановить (хотя бы даже в теории, хотя на практике это тоже возможно) полностью включая имена переменных итп, после обфускатора, код автоматически привести в исходное состояние невозможно в принципе, а восстановление кода вручную потребует чрезмерно много усилий. Но тут есть и подводные камни, к примеру если используются магические методы типа __get(), изменяемые имена переменных $$var, функций $func() итп, то после обфускатора код может стать не рабочим, либо обфускатор не принесет сколько-нибудь полезного эффекта. Добавлено через 2 минуты и 31 секунду
В данном, простейшем примере - да. К тому же в этом примере не были заменены имена методов (вероятно потому-что они public). Но попробуйте разобрать сколько-нибудь большой проект. Услий на это уйдет в разы больше чем написать все с нуля. |
|||
|
||||
mikla |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 133 Регистрация: 3.12.2006 Где: Витебск Репутация: нет Всего: нет |
Хорошая штука) лабы преподам сдавать )
--------------------
|
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
именно... код на килобайт 100 можно пол дня только разбивать на строки и проблемы проставлять... а переменные искать, так еще дольше... (даже если юзать Find&Replace)... Если уж говорить о безопастности, то в данном коде для пущий безопастности (в плане кидалова), можно добавить функцию замоудаления, вызываемую по определенному POST запросу.... я сомневаюсь, что эту функцию можно найти в таком коде... |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
Ничего запутанного в том коде не увидел.
Ну убрал переносы, ну изменил название переменной - код все-равно читабелен. |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Причем способ не плох в плане борьбы с конкурентами... Я бы заказчику помохал ручкой, если бы мне он такой код на доработку дал
![]() ну или за дешифрацию, взял бы больш, чем за доработку... Добавлено через 1 минуту и 15 секунд WolfON, в данном случае код всего несколько байтовый, а если больше? там уже за переменными не уследишь... |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Так же в идеале изменение имен пользовательских классов, методов, функций, замена числовых констант на числа (да много чего еще можно перечислить). Еще в данном примере вы сначала прочитали исходный код и только затем код после обфускатора, согласитесь, это имеет очень большое значение. Легко разгадывать кроссворды заранее зная все ответы. Вы просто возьмите любой не знакомый вам проект, проведите его через обфускатор и только потом попробуйте разобраться в нем. |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
sTa1kEr, я не читал оригинальный код
![]() в теме про то, как кодить не надо были примеры и позапутанней без всякого обфускатора ) |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
||||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Т.е. вы предлагаете сразу писать так, что бы никто не понял? Тоже вариант ![]() Для наглядности, скрипт простейший из FCKEditor-а, но немножко посложнее (120 строк). Использовал простенький бесплатный обфускатор PHP Obfuscator.
|
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Я думаю, как нечто для постоянной защиты не пройдет т.к. Replace быстро все поставит на свои месте...
Но вот,
+ По моему действенно, хотя не пробывал... ваше мнение? |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Да, это не панацея. Но это лучшее, что может защитить код на данный момент. И что на что менять? ![]() ![]() Кроме того методы могут называться одинаково или для локальных переменных те же названия, что и для свойств классов, вариантов много т.ч. даже замена по регулярному выражению тут не поможет. Единственное что легко восстановить - это переносы строк и отступы. Приводить же код к первоначальному виду выйдет дороже, чем написать с нуля. |
|||
|
||||
ARG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 11.6.2007 Репутация: нет Всего: нет |
Во первых от толкого пшпшника не обезопасит, во вторых я этих финтелей не люблю, потому, что многие не обезопасиваются, а клиента так к себе привязывают, хорошо, если еще все толково сделано было, а если все через одно место, то потом такие вот подсевшие горе заказчики ко мне попадают и у меня от них одна головная боль.
|
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
sTa1kEr,
Я английского не знаю, да и некоторые программисты не когда не называют переменные понятными именами, поэтому, вполне вариант... цель - разлечать функции и переменные в коде... а вот lllldasdllll32 и u4124488a отличаються очень плохо от аналогичных.... Добавлено через 5 минут и 49 секунд ARG, есть и такое дело, но мне честно говоря пофиг ![]() |
|||
|
||||
sTa1kEr |
|
||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
Согласен, но толковый программист быстрее и лучше сам напишет нужный функционал, чем будет разгребать такой код.
Если скрипт пишется на заказ, то да, это это бы выглядело как минимум не красиво по отношению к клиенту. Но когда скрипт пишут на продажу, то это какая-никакая, но все же защита от любителей "зануливать" чужие скрипты.
Цель не просто различать функции и переменные, а понимать код и уметь его модифицировать. |
||||
|
|||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
3 шага: 1. Разбиение на строки по символу ";" - explode 2. Замена все "абры" и "кадабры" на "function1-2-3" и "var1-2-3" - replace 3. Ручками добивание "логически нужны в дыннах местах переменных" т.е. result, val, i и т.п. код читаеться... имхо все кроме третьего пункта можно доверить дешефратору написанному за 1-2 часа максимум.... поэтому мне кажеться способ действителен лишь в когда надо чтоб код не могли просмотреть в горячем режиме... |
|||
|
||||
WolfON |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 604 Регистрация: 19.7.2004 Репутация: 6 Всего: 8 |
Лучше-уж тогда самим написать нормальный обфускатор, который будет использовать ссылки на перменные, кучу дефайнов для запутывания кода, евалы и тд
|
|||
|
||||
sTa1kEr |
|
||||||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: 56 Всего: 146 |
А как же строкои, html код, конструкции вида $str = <<< EOS, в них вы тоже будете менять все без разбора? А различия между классами, функциями, методами, константами?
"Добейте" ручками эту переменную (пускай даже не в "абрах" и не в "кадабрах")
А такого кода будет 95%. Я не спорю, что возможно привести код к более-менее читабельному виду, но, уверяю, это только на практике кажется 3 preg_replace() и готово. В реале вы потратите в лучшем случае в разы больше усилий, чем напишете с нуля. Вы просто попробуйте сами восстановить, если у вас много свободного времени ![]() |
||||||
|
|||||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Грамотно написаннй парсер все нормально сделает, ведь в основе кодера лежат те же алгоритмы, что и в декодаре, только наоборот ![]()
Убедили ![]() |
|||
|
||||
Serkys |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 4 Всего: 22 |
А ещё можно заказать переработку кода в нормальное состояние авторам обсфукатора
![]() Тоже бизнес |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
Serkys,
авторы могу в два счета написать дешифратор... |
|||
|
||||
Serkys |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1061 Регистрация: 19.4.2004 Репутация: 4 Всего: 22 |
BuShaRt, у меня на этот счёт сомнений нет
|
|||
|
||||
GZep |
|
|||
![]() участник Винграда ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1528 Регистрация: 7.7.2006 Где: Москва Репутация: 8 Всего: 32 |
штука полезная: можно ускорить немного обработку кода, убрав из него переносы
![]() -------------------- ![]() ![]() |
|||
|
||||
BuShaRt |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1391 Регистрация: 29.6.2006 Репутация: 4 Всего: 6 |
GZep,
Жжешь) чтоб привести в нормальный вид код некоторых "умельцев", его сначала надо прогнать через шифратор ![]() а ведь оно и правда... Это сообщение отредактировал(а) BuShaRt - 12.6.2007, 21:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |