
Быстрый поиск

Плоды прогресса (приключенческая повесть)
(приключенческая повесть)
Посреди пустыни произрастала пальма. Под пальмой племя папуасов, пораженное проказой, попивало портвейн. Пальма плодоносила плохо, папуасы прозябали, питались падалью, пожирали попугаев, протухших пятнистых питонов. Процветали полиомиелит, паранойя, псориаз, понос, паркинсонизм.
Пытаясь предотвратить полную погибель папуасов, подкомитет помощи первобытным племенам прислал полпреда Попова. Попов, подобно Прометею, принес папуасам плоды прогресса: полупроводники, пылесос, плетизиограф, прочее. Получку Попов получал по пятницам, покупал пиво, пирожки, папайю, повидло - подкармливал проституток, пробуя поддержать популяцию папуасов. План Попова позорно провалился - подлые проститутки применяли противозачаточные пилюли. Племя подыхало. Пронырливые португальцы продавали портвейн по пятьдесят песо, получая пятьсот процентов прибыли. Папуасы пропивали последние плавки.
Пустыня приглянулась преуспевающему плантатору Педро Перейре. "Полью почву, посажу помидоры, пшеницу, перец" - планировал плантатор. Под пасху Педро пригласил Попова пообедать.
- Прогони папуасов, - предложил Перейра, подливая Попову пульке, пунш, пльзеньское пиво, подкладывая печеночный паштет. - Поделюсь прибылью. Пошли подальше поручение подкомитета - получишь парагвайское подданство, поместье, пеонов, пост посла.
- Пшел прочь, паскуда! - пробормотал Попов, пожирая поросенка.
- Подумай. Подарю полотно Пикассо, платиновую пепельницу, Пиночету представлю, - пообещал плантатор.
Читать статью целиком »

Работа с недокументированными API WHM и cPanel
- <?
- // -------------------------------------------------------------
- // Класс для работы с WHM/cPanel через API
- // (C) ManHunter / PCL
- // http://www.manhunter.ru
- // -------------------------------------------------------------
- class cpanel_class {
- var $cpanelaccterr;
- var $host;
- var $user;
- var $accesshash;
- var $usessl;
- // -------------------------------------------------------------
- // Изменить пароль на аккаунте
- // Для выполнения нужна авторизация только с рутовым доступом
- // $chuser - аккаунт на сервере
- // $password - новый пароль
- // -------------------------------------------------------------
- function chgpassword ($chuser, $password) {
- if ($this->user!="root") {
- $this->cpanelaccterr="Root privileges required";
- return;
- }
- $result = $this->whmreq("/scripts/passwd?user=${chuser}&password=${password}&password2=${password}");
- $result=eregi_replace("[\n]{1,}","\n",strip_tags($result));
- if ($this->cpanelaccterr != "") { return; }
- if (strpos($result,"could not be changed")!==false) {
- $this->cpanelaccterr=$result;
- return;
- }
- return $result;
- }
- // -------------------------------------------------------------
- // Заблокировать аккаунт
- // $suspenduser - аккаунт на сервере
- // $reason - причина блокировки, сделано на перспективу,
- // фактически параметр панелью игнорируется
- // -------------------------------------------------------------
- function suspend ($suspenduser, $reason="") {
- $reason=str_replace(" ","+",$reason);
- $result = $this->whmreq("/scripts/remote_suspend?user=${suspenduser}&reason=${reason}");
- if ($this->cpanelaccterr != "") { return; }
- if (strpos($result,"Access Denied")!==false) {
- $this->cpanelaccterr=$result;
- return;
- }
- return $result;
- }
- // -------------------------------------------------------------
- // Разблокировать аккаунт
- // $unsuspenduser - аккаунт на сервере
- // -------------------------------------------------------------
- function unsuspend ($unsuspenduser) {
- $result = $this->whmreq("/scripts/remote_unsuspend?user=${unsuspenduser}");
- if ($this->cpanelaccterr != "") { return; }
- if (strpos($result,"Access Denied")!==false) {
- $this->cpanelaccterr=$result;
- return;
- }
- return $result;
- }
- // -------------------------------------------------------------
- // Удалить аккаунт
- // $killuser - аккаунт на сервере
- // -------------------------------------------------------------
- function killacct ($killuser) {
- $result = $this->whmreq("/scripts/killacct?user=${killuser}&nohtml=1");
- if ($this->cpanelaccterr != "") { return; }
- return $result;
- }
- // -------------------------------------------------------------
- // Показать версию WHM/cPanel
- // -------------------------------------------------------------
- function showversion () {
- $result = $this->whmreq("/scripts2/showversion");
- if ($this->cpanelaccterr != "") { return; }
- return $result;
- }
- // -------------------------------------------------------------
- // Перевести аккаунт на новый тарифный план
- // $upuser - аккаунт на сервере
- // $acctplan - новый тарифный план
- // -------------------------------------------------------------
- function update ($upuser, $acctplan) {
- $acctplan=str_replace(" ","+",$acctplan);
- $result = $this->whmreq("/scripts2/upacct?user=${upuser}&pkg=${acctplan}");
- if ($this->cpanelaccterr != "") { return; }
- return $result;
- }
- // -------------------------------------------------------------
- // Открыть новый аккаунт
- // $acctdomain - домен
- // $acctuser - логин для аккаунта
- // $acctpass - пароль для аккаунта
- // $acctplan - тарифный план
- // $accemail - контактный email аккаунта
- // $acccpmod - стиль cPanel по умолчанию
- // -------------------------------------------------------------
- function createacct ($acctdomain, $acctuser, $acctpass, $acctplan, $accemail,
- $acccpmod="bluelagoon") {
- if (!eregi("^[-a-z0-9\.]{4,}$",$acctdomain)) {
- $this->cpanelaccterr="Invalid domain name";
- return;
- }
- $acctplan=str_replace(" ","+",$acctplan);
- $accemail=str_replace("@","%40",$accemail);
- $result = $this->whmreq("/scripts/wwwacct?remote=1&nohtml=1&username=${acctuser}&password=${acctpass}&domain=${acctdomain}&plan=${acctplan}&contactemail=${accemail}&cpmod=${acccpmod}");
- if ($this->cpanelaccterr != "") { return; }
- return $result;
- }
- // -------------------------------------------------------------
- // Показать список имеющихся на сервере аккаунтов
- // -------------------------------------------------------------
- function listaccts () {
- $result = $this->whmreq("/scripts2/listaccts?nohtml=1&viewall=1");
- if ($this->cpanelaccterr != "") { return; }
- $page = split("\n",$result);
- foreach ($page as $line) {
- list($acct,$contents) = split("=", $line);
- if ($acct != "") {
- $allc = split(",", $contents);
- $accts[$acct] = $allc;
- }
- }
- return($accts);
- }
- // -------------------------------------------------------------
- // Показать список заведенных на сервере тарифных планов
- // -------------------------------------------------------------
- function listpkgs () {
- $result = $this->whmreq("/scripts/remote_listpkg");
- if ($this->cpanelaccterr != "") { return; }
- $page = split("\n",$result);
- foreach ($page as $line) {
- list($pkg,$contents) = split("=", $line);
- if ($pkg != "") {
- $allc = split(",", $contents);
- $pkgs[$pkg] = $allc;
- }
- }
- return($pkgs);
- }
- // -------------------------------------------------------------
- // Запрос к WHM/cPanel. Используется только для работы внутри
- // класса, извне вызываться не должен
- // -------------------------------------------------------------
- function whmreq ($request) {
- $cleanaccesshash = preg_replace("'(\r|\n)'","",$this->accesshash);
- $authstr = $this->user . ":" . $cleanaccesshash;
- $this->cpanelaccterr = "";
- if (function_exists("curl_init")) {
- $ch = curl_init();
- if ($this->usessl) {
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
- curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
- curl_setopt($ch, CURLOPT_URL, "https://".$this->host.":2087" . $request);
- }
- else {
- curl_setopt($ch, CURLOPT_URL, "http://".$this->host.":2086" . $request);
- }
- curl_setopt($ch, CURLOPT_HEADER, 0);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
- $curlheaders[0] = "Authorization: WHM $authstr";
- curl_setopt($ch,CURLOPT_HTTPHEADER,$curlheaders);
- $data=curl_exec ($ch);
- curl_close ($ch);
- }
- elseif (function_exists("socket_create")) {
- if ($this->usessl) {
- $this->cpanelaccterr = "SSL Support requires curl";
- return;
- }
- $service_port = 2086;
- $address = gethostbyname($this->host);
- $socket = socket_create (AF_INET, SOCK_STREAM, 0);
- if ($socket < 0) {
- $this->cpanelaccterr = "socket_create() failed";
- return;
- }
- $result = socket_connect ($socket, $address, $service_port);
- if ($result < 0) {
- $this->cpanelaccterr = "socket_connect() failed";
- return;
- }
- $in = "GET $request HTTP/1.0\n";
- socket_write($socket,$in,strlen($in));
- $in = "Connection: close\n";
- socket_write($socket,$in,strlen($in));
- $in = "Authorization: WHM $authstr\n\n\n";
- socket_write($socket,$in,strlen($in));
- $inheader = 1;
- while(($buf = socket_read($socket, 512)) != false) {
- if (!$inheader) {
- $data .= $buf;
- }
- if (preg_match("'\r\n\r\n$'s", $buf)) {
- $inheader = 0;
- }
- if (preg_match("'\n\n$'s", $buf)) {
- $inheader = 0;
- }
- if (preg_match("'\r\n$'s", $buf)) {
- $inheader = 0;
- }
- }
- }
- else {
- $this->cpanelaccterr = "php not compiled with --enable-sockets OR curl";
- return;
- }
- return $data;
- }
- }
- ?>
Читать статью целиком »

Абсолютная защита
Рассмотрим этот метод защиты на примере некоторых популярных программ: интернет-пейджера Miranda IM, файлового менеджера Total Commander и почтового клиента The Bat!. Я пользуюсь именно этими программами, для других вам придется искать решения самостоятельно. В качестве имитации вредоносной программы будет использоваться утилита для восстановления забытых паролей Multi Password Recovery. Программа MPR выбрана не случайно, ее автор в прошлом занимался разработкой самого известного трояна Pinch и в Multi Password Recovery используются те же самые алгоритмы для получения паролей, что и в Pinch. Некоторые антивирусные программы определяют MPR как вирус, но по указанной ссылке гарантированно никакой заразы нет.
Запускаем MPR и видим как на ладони все логины и пароли от почтовых ящиков The Bat!, ваших красивых асечных номерков Miranda и FTP-серверов из Total Commander. Даже не сомневайтесь, это же самое "увидит" и троянская программа.
Читать статью целиком »

Проверка похожести двух слов
- // -----------------------------------------------------
- // Функция проверки похожести двух слов
- // Параметры: $name1 и $name2 - слова для проверки
- // $register = TRUE - проверка регистронезависима
- // = FALSE - проверка с учетом регистра
- // На выходе: TRUE - слова похожи, FALSE - отличаются
- // -----------------------------------------------------
- function chk_similarity($word1, $word2, $register=false) {
- // Очистить слова от служебных символов
- $word1=eregi_replace("[^0-9a-zа-я]","",$word1);
- $word2=eregi_replace("[^0-9a-zа-я]","",$word2);
- // Возврат FALSE если длина слов различается
- // или хотя бы одно из них пустое
- if ((strlen($word1)!==strlen($word2)) || strlen($word1)*strlen($word2)==0) {
- return false;
- }
- // Заполнить таблицу соответствий
- $pattern1="";
- $pattern2=Array();
- $pattern1.="aа";
- $pattern2[]="[аa]";
- $pattern2[]="[аa]";
- $pattern1.="AА";
- $pattern2[]="[АA]";
- $pattern2[]="[АA]";
- $pattern1.="BВ";
- $pattern2[]="[BВ]";
- $pattern2[]="[BВ]";
- $pattern1.="bь";
- $pattern2[]="[bь]";
- $pattern2[]="[bь]";
- $pattern1.="cс";
- $pattern2[]="[cс]";
- $pattern2[]="[cс]";
- $pattern1.="CС";
- $pattern2[]="[CС]";
- $pattern2[]="[CС]";
- $pattern1.="eе";
- $pattern2[]="[eе]";
- $pattern2[]="[eе]";
- $pattern1.="EЕ";
- $pattern2[]="[EЕ]";
- $pattern2[]="[EЕ]";
- $pattern1.="HН";
- $pattern2[]="[HН]";
- $pattern2[]="[HН]";
- $pattern1.="iI1l";
- $pattern2[]="[iI1l]";
- $pattern2[]="[iI1l]";
- $pattern2[]="[iI1l]";
- $pattern2[]="[iI1l]";
- $pattern1.="kк";
- $pattern2[]="[kк]";
- $pattern2[]="[kк]";
- $pattern1.="KК";
- $pattern2[]="[KК]";
- $pattern2[]="[KК]";
- $pattern1.="MМ";
- $pattern2[]="[MМ]";
- $pattern2[]="[MМ]";
- $pattern1.="nп";
- $pattern2[]="[nп]";
- $pattern2[]="[nп]";
- $pattern1.="oо0";
- $pattern2[]="[oо0]";
- $pattern2[]="[oо0]";
- $pattern2[]="[oо0]";
- $pattern1.="OО0";
- $pattern2[]="[OО0]";
- $pattern2[]="[OО0]";
- $pattern2[]="[OО0]";
- $pattern1.="pр";
- $pattern2[]="[pр]";
- $pattern2[]="[pр]";
- $pattern1.="PР";
- $pattern2[]="[PР]";
- $pattern2[]="[PР]";
- $pattern1.="rг";
- $pattern2[]="[rг]";
- $pattern2[]="[rг]";
- $pattern1.="TТ";
- $pattern2[]="[TТ]";
- $pattern2[]="[TТ]";
- $pattern1.="uи";
- $pattern2[]="[uи]";
- $pattern2[]="[uи]";
- $pattern1.="xх";
- $pattern2[]="[xх]";
- $pattern2[]="[xх]";
- $pattern1.="XХ";
- $pattern2[]="[XХ]";
- $pattern2[]="[XХ]";
- $pattern1.="yу";
- $pattern2[]="[yу]";
- $pattern2[]="[yу]";
- $pattern1.="YУ";
- $pattern2[]="[YУ]";
- $pattern2[]="[YУ]";
- $pattern1.="З3";
- $pattern2[]="[З3]";
- $pattern2[]="[З3]";
- $pattern1.="ч4";
- $pattern2[]="[ч4]";
- $pattern2[]="[ч4]";
- $pattern1.="Ч4";
- $pattern2[]="[Ч4]";
- $pattern2[]="[Ч4]";
- // Составить регулярное выражение для проверки
- $tmp="^";
- for ($i=0; $i<strlen($word1); $i++) {
- $letter=$word1[$i];
- $pos=strpos($pattern1,$letter);
- if ($pos===false) {
- $tmp.=$letter;
- }
- else {
- $tmp.=$pattern2[$pos];
- }
- }
- $tmp.="$";
- // Возврат TRUE - слова похожи или равны
- // FALSE - слова отличаются
- return($register?eregi($tmp,$word2):ereg($tmp,$word2));
- }
Читать статью целиком »

Защита PHP-скриптов от анализа и модификации
Защиты на уровне сервера:
Zend Encoder / Zend SafeGuard Suite - наиболее популярная коммерческая защита, модули для поддержки Zend обычно установлены на всех платных хостингах. Zend предоставляет привязку скриптов к доменам и ip, установку времени триальной работы скриптов и мощную обфускацию. Поддерживаются все операционные системы. В публичном доступе имеется несколько вариантов утилит для снятия Zend'а, все они представляют собой модифицированный PHP 4-й и 5-й версии. Старые версии Zend'а снимаются без проблем, в последних возникают сложности из-за обфускации исходного кода.
NuSphere NuCoder. Новая, активно развивающаяся коммерческая защита. На уровне собственных API предоставляет взаимодействие с защищаемыми скриптами, поддерживаются операционные системы Windows и Linux. Вследствие малой распространенности не устанавливается на обычных виртуальных хостингах, но вполне может быть установлена пользователями на выделенных серверах. Публичных декодеров нет.
SourceGuardian for PHP. Коммерческая защита, практически не встречается, на виртуальных хостингах не устанавливается. Позволяет устанавливать триальный срок работы скриптов с проверкой даты по внешним серверам точного времени, делать привязку защищаемых скриптов к серверам, ip-адресу, MAC-адресу сетевой карты, причем эти данные используются для расшифровки. Поддерживаются все операционные системы. Публичных декодеров нет.
Читать статью целиком »
