Print This Post Методика деобфускации PHP-скриптов для чайников. Полезные советы.

Вторник, 24. Январь 2012
Раздел: PHP, Для новичков, автор:

Очень часто непосвященные люди задают вопросы вроде "Как расшифровать обфусцированный PHP-скрипт?", "Хороша ли защита PHP-скрипта обфускатором?" и даже "Помогите деобфусцировать! Вам же не сложно?". Цель этой статьи - показать, что обфускаторы дают в 90% случаев никакущую защиту (которая способна защитить только от людей, увидевших язык программирования первый раз в жизни). Снять ее можно обычно минут за 10-20, получив исходный PHP-скрипт в первозданном виде. Остальные 10% случаев - это немного усложненная защита, которая, впрочем, снимается теми же путями. Если вы желаете самостоятельно научиться снимать обфускацию со скриптов, то эта статья специально для вас!

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

Читать дальше »

Print This Post Капча с использованием HTML5

Пятница, 19. Ноябрь 2010
Раздел: HTML/JS, PHP, автор:

На большинстве сайтов в качестве капчи используется картинка, подгружаемая в бинарном виде при обращении к некоему скрипту-обработчику. Реже встречаются капчи, отображаемые с использованием технологий Flash или Java. Плюс в использовании таких капч безусловно есть, но некоторые пользователи любят отключать подобные расширения, с целью обеспечения дополнительной безопасности при серфинге в интернете. Однако пятая версия основного языка разметки веб-страниц принесла с собой множество полезных нововведений. Одно из них - элемент canvas, который предназначен для создания растровых изображений с помощью JavaScript.
Соответственно, с помощью этого элемента и JS можно выводить изображения капчи в браузер, например, в виде массива точек, которые будут собраны в изображение с помощью JS. В чем смысл? Смысл в том, чтобы затруднить автоматизированное распознавание изображений.

Во-первых, можно придумать специфический формат хранения данных, который будет впоследствии декодироваться скриптом.
Во-вторых, можно упаковать и обфусцировать данные изображения, чтобы затруднить парсинг и навязать использование JS-интерпретаторов.
В-третьих, можно использовать специфичные для браузеров JS-«фичи», которые затруднят работу интерпретаторов.
В общем, есть, где развернуться.

И, наконец, вот простой пример подобной капчи (без маджонга и гейш). По идее должен нормально работать в FireFox, Opera, Chrome и IE9.
Исходный код: скачать

Print This Post PHP Obfuscator 1.5

Пятница, 8. Октябрь 2010
Раздел: PHP, автор:

Вот и увидела свет новая версия этого скрипта.

Возможности обфускатора (включая новые):
[+] Замена имен переменных
[+] Замена имен функций
[+] Шифрование статических строк
[+] Шифрование имен стандартных функций PHP
[+] Обфускация INTEGER’ов
[+] Сжатие скрипта
[+] Архивация скрипта
[+] Добавление треш-комментариев
[+] Обфускация констант PHP
[+] Возможность добавления мусорных инструкций и переменных заданной вероятностью
[+++] И многое другое, множество удобств

Исправлены различные недочеты, ошибки, имевшиеся в версии 1.4, улучшена обфускация в некоторых случаях, версия 1.5 более экономно расходует память.

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

Обфускатор не поддерживает конструкции eval() и $$var_name, а также по-прежнему могут быть проблемы со скриптами в кодировке UTF-8.

Вот, например, во что можно превратить простой "Hello, world!":

<? $GLOBALS['_1211036487_']=Array(base64_decode('' .'c3' .'R' .'ydG91cHBl' .'cg=='),base64_decode('Y2' .'91bnQ' .'='),base64_decode('Y3VybF9tdWx0aV' .'9leG' .'Vj'),base64_decode('' .'c3Vic3Ry'),base64_decode('YX' .'Jy' .'YXlfcmFuZA' .'=='),base64_decode('Zmxv' .'b3' .'I='),base64_decode('bXRfcmFuZ' .'A' .'=='),base64_decode('' .'c3RycG9z'),base64_decode('bXlz' .'c' .'WxfY2xv' .'c2U='),base64_decode('Zmdld' .'HN' .'z'),base64_decode('bXRfcmFuZA=' .'='),base64_decode('' .'YXJyYX' .'l' .'fa2V5X2V4' .'aX' .'N0cw=='),base64_decode('Z' .'Gly'),base64_decode('c2Vzc2' .'lvbl9' .'nZ' .'XRfY29v' .'a2llX3Bh' .'cmFtc' .'w=' .'='),base64_decode('bXRfcmFuZA=='),base64_decode('c3Ry' .'cG' .'9z'),base64_decode('YX' .'JyYXl' .'fZGlm' .'Zl9' .'rZXk=')); ?><? function _1513971471($i){$a=Array('Y' .'3V0YQ==','' .'LCB' .'3b3JsZC' .'E=','dmVtYWtm' .'cmpnYnJybm' .'Jpa2Q=','' .'bW' .'Vxbno=','SGVsbG8=','Z2c=','a2I=','amxt' .'dA' .'==','ZmV' .'tY' .'m' .'d' .'1d3V' .'xa293cGU' .'=','cXo=');return base64_decode($a[$i]);} ?><?php function l__0($_0){$_1=$GLOBALS['_1211036487_'][0]($_0);$_2=round(0+813.666666667+813.666666667+813.666666667);if((round(0+1284.5+1284.5)+round(0+15.2+15.2+15.2+15.2+15.2))>round(0+513.8+513.8+513.8+513.8+513.8)|| $GLOBALS['_1211036487_'][1]($_1));else{$GLOBALS['_1211036487_'][2]($_3);}$_3=round(0+861);$_4=_1513971471(0);if((round(0+47.8+47.8+47.8+47.8+47.8)^round(0+119.5+119.5))&& $GLOBALS['_1211036487_'][3]($_3,$_3,$_3))$GLOBALS['_1211036487_'][4]($_5,$_0);print $_1 ._1513971471(1);(round(0+657+657+657+657)-round(0+525.6+525.6+525.6+525.6+525.6)+round(0+1009.5+1009.5+1009.5+1009.5)-round(0+2019+2019))?$GLOBALS['_1211036487_'][5]($_0,$_3,$_1,$_5,$_0):$GLOBALS['_1211036487_'][6](round(0+2285),round(0+1314+1314));if($GLOBALS['_1211036487_'][7](_1513971471(2),_1513971471(3))!==false)$GLOBALS['_1211036487_'][8]($_3,$_1,$_1);(round(0+857+857)-round(0+1714)+round(0+24+24+24)-round(0+72))?$GLOBALS['_1211036487_'][9]($_1,$_1,$_0):$GLOBALS['_1211036487_'][10](round(0+536),round(0+857+857));while(round(0+1621+1621)-round(0+3242))$GLOBALS['_1211036487_'][11]($_3,$_3,$_5);while(round(0+4312)-round(0+862.4+862.4+862.4+862.4+862.4))$GLOBALS['_1211036487_'][12]($_1);$_6=round(0+3584);}l__0(_1513971471(4));$_7=_1513971471(5);$_8=round(0+211.5+211.5+211.5+211.5);(round(0+1645.33333333+1645.33333333+1645.33333333)-round(0+1234+1234+1234+1234)+round(0+947.25+947.25+947.25+947.25)-round(0+1263+1263+1263))?$GLOBALS['_1211036487_'][13]($_0,$_8,$_5):$GLOBALS['_1211036487_'][14](round(0+126+126+126+126+126),round(0+1645.33333333+1645.33333333+1645.33333333));$_5=_1513971471(6);$_9=_1513971471(7);if($GLOBALS['_1211036487_'][15](_1513971471(8),_1513971471(9))!==false)$GLOBALS['_1211036487_'][16]($_1); ?>

В редакторе это выглядит так:

Скачать: ZIP

Обновление 11 октября: поправлены ошибки при обфускации классов, тем не менее, поддержка классов на данный момент неполная.

Print This Post Simple AJAX Chat

Воскресенье, 21. Март 2010
Раздел: PHP, автор:

Написал простой движок немодерируемого чата на php+javascript.

Возможности:
[+] Вход в чат под выбранным никнеймом
[+] Смена никнейма
[+] Список участников
[+] Действия с участниками, аналогично mIRC
[+] Команда /me
[+] Смайлы
[+] Антифлуд
[+] Поддержка модулей (в движке уже есть несколько написанных для примера - время, транслитератор, печать строки наоборот, получение случайной цитаты с bash.org.ru, получение погоды, отображение списка модулей, отображение списка смайлов, курсы валют, определение PR и ТИЦ сайта)
[+] Возможность включить базовую авторизацию, что позволяет как организовать публичный чат, так и приватный для какой-то группы людей
[+] Приватные сообщения
[+] Функции для администрирования чата

Чат имеет множество настроек, все они находятся в начале файла index.php. После настройки чата необходимо сохранить этот файл в UTF-8 без BOM.

Немного документации:

1. Установка
Установка не требуется. Достаточно просто скопировать все файлы и папки на хостинг и дать права на запись файлов в папке plltxe (кроме .htaccess).
Настройки чата находятся в файле index.php в секции CONFIG.

2. Команда /me
Введите в чат
/me статус
для отображения своего статуса в окне чата.

3. Модули
Для вывода всех подключенных модулей введите /list
Модуль используется так: /имя_модуля необязательный_параметр
Например:
admin (23:50:46 23/03/2010): /currency
Курсы валют: USD: 29.3389 rub; EUR: 39.6339 rub
admin (23:51:18 23/03/2010): /weather москва
Погода: Москва: +1..+3, Давление: 747, Ветер: З, 5 - 9 м/с

4. Администраторские команды
Если вы администратор чата, войдите под произвольным никнеймом и введите:
/pass пароль_администратора
Пароль должен быть задан в самом скрипте в секции настроек.

После успешной авторизации будут доступны следующие команды:
/admin [Вася] rename Вася Пупкин
переименует пользователя Вася в Вася Пупкин

/admin [Вася] delete
Удалит пользователя Вася из чата и заблокирует текущую сессию

/admin [Вася] banip
Заблокирует IP-адрес пользователя

/admin [127.0.0.1] unbanip
Разблокирует адрес 127.0.0.1

/admin [Вася] getip
Выведет IP-адрес пользователя Вася

/admin [banlist]
Выведет список заблокированных IP-адресов

/admin [clear]
Очистит кэш чата

Рабочий пример чата тут: Simple AJAX Chat

Скачать: ZIP

Print This Post Invatar — раздача инвайтов для различных сервисов

Суббота, 6. Февраль 2010
Раздел: PHP, автор:

Написал скрипт, позволяющий выдавать инвайты на любые сервисы. Пример его работы представлен тут.
В комплект уже включено 8 библиотек для выдачи инвайтов (Antigate, Captchabot, Три гнома, Eroprofit, Равшанкэш, RuSpyMoney, SMS-коровка, Stabile Money, спасибо Kaimi за помощь в их написании), но также можно писать и свои под другие сервисы. Скрипт легко встраивается на страницу сайта. Кодировка по умолчанию - UTF-8, если кому-то надо другую, можно перекодировать с помощью, например, Notepad++. В приложенном архиве лежит index.php - пример встраивания модуля на страницу сайта.

Как настроить скрипт?
Просто откройте файл invites_libs/list.php, раскомментируйте строки с сервисами, для которых желаете раздавать инвайты, и впишите свои логины и пароли к ним, после чего сохраните файл в UTF-8 без BOM (сделать это можно через тот же Notepad++). Остается просто встроить скрипт на страницу, и на этом настройка завершена.

Скачать скрипт: ZIP

Print This Post Плагин A-stat

Среда, 3. Февраль 2010
Раздел: PHP, автор:

Специально для владельцев блогов на движке WordPress написал небольшой плагин. Плагин позволяет выводить статистику с нескольких партнерских программ, например, в сайдбар блога.

Настроить плагин очень просто:

На данный момент плагин поддерживает следующие партнерские программы: 8coins, SMS Коровка, Fiesta, OstapCash.
Если Вы хотите, чтобы я добавил в плагин поддержку какой-либо партнерской программы - напишите об этом в комментариях, постараюсь сделать.

Скачать плагин: astat

Print This Post Новые идеи про капчи

Вторник, 5. Январь 2010
Раздел: PHP, автор:

Несколько дней назад я привел пример реализации капчи-калькулятора, которую нельзя разгадать с помощью сервисов. Не так давно ко мне пришла еще одна идея - капча, вводимая мышью. Требуется четыре цифры расположить перетаскиванием в порядке возрастания. Из плюсов - быстрый ввод, не требуется несколько раз загружать картинку. Из минусов - обязательно включенный JavaScript в браузере.

Вот пример:

Файл drag.js - несколько модифицированная небольшая библиотека JS, реализующая drag'n'drop, найденная тут: javascript.ru/ui/draganddrop

Скачать исходный код: ZIP.

Print This Post Когда антикапча бессильна

Пятница, 25. Декабрь 2009
Раздел: PHP, автор:

Если вы владеете каким-то проектом, где есть возможность для пользователей отправлять сообщения на всеобщее обозрение (форумы, гостевые и т.д.), вероятно, вы не раз чистили спам. Практически все капчи сейчас можно распознать с помощью недорогих сервисов, таких, как антикапча. Но все же, есть возможность создать такую капчу, которую нельзя будет распознать. Идея не нова, впервые подобное я увидел на mail.ru.
Готовая реализация - вот:

Пример написан на php, никакого JavaScript, для отображения капчи используется ифрейм. Никаким образом, кроме как нажимать мышью по капче, ввести ее нельзя.

Скачать исходный код: ZIP.

Print This Post DX TDS

Среда, 4. Ноябрь 2009
Раздел: PHP, автор:

Достаточно давно написал скрипт TDS (системы распределения траффика), теперь решил выложить его в открытое пользование. Язык - PHP, вот основные возможности и характеристики:

[+] Поддержка одной схемы переадресации
[+] Простые и сложные правила
[+] Правила по стране, браузеру, IP-адресу или маске сети
[+] Ведение статистики по странам
[+] Ведение статистики по ip-адресам
[+] Ведение статистики рефереров с возможностью их указания вручную
[+] Ведение статистики уникальных либо неуникальных обращений
[+] Совместимость с PHP4 и PHP5
[+] Поддержка MySQL и файлов - на выбор
[+] Распознавание браузеров и версий популярных браузеров
[+] Правило по умолчанию
[+] Несколько типов редиректа (php, js, meta)
[+] Шифровщик ифрейма
[+] Массовое редактирование и удаление правил
[+] Подробный хелп

GeoIP очень старый в tds, поэтому лучше найти и использовать более свежий.
Самые последние версии браузеров не определяются, так как давно тдс не обновлял.

Скачать: ZIP

Print This Post PHP Obfuscator 1.4

Пятница, 16. Октябрь 2009
Раздел: PHP, автор:

Обновил свой давний проект - обфускатор PHP-кода. Теперь он способен генерировать еще более непонятный код.

Возможности обфускатора:
[+] Замена имен переменных
[+] Замена имен функций
[+] Шифрование статических строк
[+] Шифрование имен стандартных функций PHP
[+] Обфускация INTEGER'ов
[+] Сжатие скрипта
[+] Архивация скрипта
[+] Добавление треш-комментариев
[+++] И многое другое, множество удобств

Обфускатор не поддерживает конструкции eval() и $$var_name.

Скриншот:

Читать дальше »

Страница 1 из 212