
Быстрый поиск
Введите фрагмент названия статьи для поиска

Исследование защиты программы PHP LockIt!
30.01.2011 | Категория: Темная сторона Силы | Автор: ManHunter

Скриншот программы PHP LockIt!
Программа PHP LockIt! предназначена для защиты исходных текстов PHP-скриптов от исследования и модификации. В качестве защиты применяется обфускация имен функций и переменных, а также шифрование исходного кода. В более ранних версиях была еще возможность сжимать полученные скрипты, но разработчики по какой-то причине от этого отказались. Зашифрованные скрипты не требуют установки на сервер дополнительного программного обеспечения, поэтому PHP LockIt! пользуется большой популярностью как у зарубежных, так и у отечественных копирастов. Я давно наблюдаю за развитием этой защиты, и среди других аналогичных поделок она кажется мне наиболее стабильной и надежной. Мне даже довелось встретить китайскую подделку PHP LockIt!, когда интерфейс программы был изменен в редакторе ресурсов, копирайты исправлены на свои, а затем на изуродованный файл был навешан протектор. При этом полученный китайский гибрид позиционировался как авторская разработка и распространялся как самостоятельный продукт с другим названием.
Читать статью целиком »
Просмотров: 10144 | Комментариев: 21

Решение примера в обратной польской нотации
21.01.2011 | Категория: Web-мастеру и не только | Автор: ManHunter
Обратная польская нотация - один из классических алгоритмов, используемых в вычислительной технике. Он используется для вычислений, и особенностью является следование символов операций за символами операндов, а также в отсутствии скобок. Если интересно, можете почитать описание алгоритма польской нотации. Листая сайт с вакансиями, я наткнулся на одно предложение работы, где в качестве тестового задания требовалось написать функцию, которая получает строку примера, записанного в обратной польской нотации, и возвращает результат вычислений. Сама вакансия для меня никакого интереса не представляла, с работой у меня все в порядке, а задание показалось интересным. Вот что у меня сперва получилось.Code (PHP) : Убрать нумерацию
- // Польская нотация. Реализация алгоритма с рекурсией
- function polish_recursive($str) {
- // подчистить строку и разделить ее на "стек"
- $stack=explode(' ',trim(preg_replace('/[[:space:]]{2,}/',' ',$str)));
- $cnt=count($stack);
- // если в стеке более 1 элемента
- if ($cnt>1) {
- // debug
- //echo join(' ',$stack).'<br>';
- // пройтись по стеку
- for ($i=0; $i<$cnt; $i++) {
- // знак арифметического действия?
- if (in_array($stack[$i], array('-', '+', '*', '/'))) {
- // слева осталось меньше двух цифр?
- if ($i<2) { return 'error'; }
- // выполнить операцию, записать в "стек" результат
- eval('$stack[$i]=$stack[($i-2)]'.$stack[$i].'$stack[($i-1)];');
- // изъять из "стека" операнды
- unset($stack[($i-1)]);
- unset($stack[($i-2)]);
- break;
- }
- else {
- // не арифметический знак и не число
- if (!is_numeric($stack[$i])) { return 'error'; }
- }
- }
- // в стеке ничего не изменилось после выполнения цикла
- if ($cnt==count($stack)) { return 'error'; }
- // следующий рекурсивный проход
- $str=polish_recursive(join(' ',$stack));
- }
- // результат
- return($str);
- }
Читать статью целиком »
Просмотров: 8351 | Комментариев: 7

Генератор текста на основе цепей Маркова
18.12.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
В web-строительстве и SEO цепи Маркова используются для генерации псевдоосмысленных текстов на основании исходных текстов. Это используется для штамповки дорвеев с заданными ключевыми словами, для набора контентной текстовой массы и тому подобным "черным" трюкам. К счастью, поисковые системы научились эффективно определять контент, созданный на основе цепей Маркова и отправляет таких умников в бан. Учить вас подобным технологиям я не собираюсь, для этого есть специальные говносайты, меня интересует только программная реализация алгоритма.
Цепью Маркова называется последовательность испытаний, в каждом из которых появляется только одно из k несовместных событий Ai из полной группы. При этом условная вероятность pij(s) того, что в s-ом испытании наступит событие Aj при условии, что в (s - 1) - ом испытании наступило событие Ai, не зависит от результатов предшествующих испытаний.
Желающие повзрывать свой головной мозг могут почитать про математическую модель. На человеческом языке все эти формулы сводятся к следующему. В исходном тексте определяются слова и сохраняется последовательность, какие слова идут за какими. Затем на основании этих данных создается новый текст, в котором сами слова выбраны случайно, но сохранены связи между ними. Для примера возьмем детский стишок:
Из-за леса, из-за гор
едет дедушка Егор:
сам на лошадке,
жена на коровке,
дети на телятках,
внуки на козлятках.
Разберем текст на звенья и связки
из-за [леса, гор]
леса [из-за]
гор [едет]
едет [дедушка]
дедушка [Егор]
Егор [сам]
сам [на]
на [лошадке, коровке, телятках, козлятках]
лошадке [жена]
жена [на]
коровке [дети]
дети [на]
телятках [внуки]
внуки [на]
Звенья в этом списке представляют собой уникальные слова из текста, а в квадратных скобках перечислены связи - список слов, которые могут располагаться после этого слова.
Читать статью целиком »
Просмотров: 39991 | Комментариев: 25

Делаем быстрые и красивые превьюшки
02.12.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
При работе с графикой, а именно при создании различных онлайн-галерей, при работе с прикрепленными к статьям файлами в CMS, требуется создание так называемых превьюшек - пропорционально уменьшенных копий изображений. Они могут создаваться динамически или храниться на диске в виде отдельных файлов, все зависит от конкретной задачи. Рассмотрим несколько способов создания превьюшек и сравним их производительность.
Сравнение способов создания превьюшек
Для тестов была взята фотография размером 3468 х 2736 пикселов, глубина цветности 24 бита. Цель - разными способами сделать из нее превьюшку размером 200 x 150 пикселов и сохранить результат в файл JPG с наилучшим качеством. Тестовые фрагменты кода максимально облегчены, все размеры и названия файлов захардкодены прямо в исходники. Время выполнения тестов и объем занятой памяти соответствуют моему ноутбуку, эти значения приведены только для сравнения, так что не удивляйтесь, если ваши цифры будут отличаться.
Читать статью целиком »
Просмотров: 8291 | Комментариев: 3

Проверка доступности функции PHP
23.09.2010 | Категория: Web-мастеру и не только | Автор: ManHunter
Ковырялся как-то в очередном сплойте, которым скрипткиддисы пытались проломить блог. Среди всякого говна нашел там интересную идею о проверке доступности функций PHP перед их вызовом. Реализация была такая же кривая, как и весь остальной код этих быдлохакеров, поэтому я переписал функцию проверки по-своему. Проверка выполняется тремя способами: анализом значения параметра disable_functions в файле php.ini, а также через функции PHP function_exists и is_callable. Использование всех трех способов проверки дает абсолютно точный результат.Code (PHP) : Убрать нумерацию
- //--------------------------------------------------------------------------
- // Функция проверки существования и доступности другой функции PHP
- //--------------------------------------------------------------------------
- // Параметры: $func - строка имени функции
- // На выходе: true - функция есть и доступна для вызова,
- // false - функция недоступна по какой-либо причине
- //--------------------------------------------------------------------------
- function is_function_enabled($func) {
- $func=strtolower(trim($func));
- if ($func=='') return false;
- // Получить список функций, отключенных в php.ini
- $disabled=explode(",",@ini_get("disable_functions"));
- if (empty($disabled)) {
- $disabled=array();
- }
- else {
- // Убрать пробелы и привести названия к нижнему регистру
- $disabled=array_map('trim',array_map('strtolower',$disabled));
- }
- // Проверить доступность функции разными способами
- return (function_exists($func) && is_callable($func) &&
- !in_array($func,$disabled)
- );
- }
Code (PHP) : Убрать нумерацию
- // Проверка доступности функции shell_exec
- if (is_function_enabled('shell_exec')) {
- echo shell_exec('ping yandex.ru');
- }
Просмотров: 7781 | Комментариев: 5
