Хакер № 06/08 (114)

Easy-Hack
Леонид «R0id» Стройков (stroikov@gameland.ru)
Хакер, номер #114, стр. 114-038-1
Задача: провести обфускацию PHP-кода
Решение:
В прошлом номере ][ мы уже говорили о такой проблеме, как запутывание собственного PHP-кода. С научной точки зрения, сей процесс называется обфускацией – приведением исходного текста исполняемого кода к виду, сохраняющему функциональность программы, но затрудняющему анализ и понимание алгоритмов ее работы. Сегодня мы решим задачу, пользуясь утилой от хакера DX под названием PHP Obfuscator. Скрипт написан полностью на PHP и предоставляется автором свободно и в открытом виде. Коротко ознакомлю тебя с основными возможностями обфускатора:
- Скрипт имеет веб-интерфейс, поддерживает обфускацию имен переменных, имен функций, методов классов, шифрование статических строк (без переменных), а также сжатие PHP-кода (удаляются лишние пробелы, комментарии и т.п.).
- Есть возможность указать переменные, функции, которые не следует заменять, а также функции, параметры которых не следует заменять.
- Можно выборочно отключить обфускацию строк/переменных/функций. Для каждого типа также есть по два вида обфускации.
- Не поддерживаются конструкции $$var_name и eval, после обфускации необходимо будет поменять соответствующие имена функций в функциях, устанавливающих манипуляторы (например, ob_gzhandler). Не поддерживаются вызовы функций по их именам из строк.
Как видишь, достоинств у тулзы намного больше, чем недостатков. Теперь рассмотрим, собственно, алгоритм наших действий, направленных на обфускацию нужного PHP-кода:
- Выбираем любой веб-шелл с дирой на 777 либо бесплатный/платный хостинг.
- Заливаем в веб-диру (например, /img) файл dxobf.php (обфускатор).
- Переходим по линку к нашему скрипту, например: http://host.com/img/dxobf.php
- В поле «Исходный код PHP-файла» вбиваем код, который необходимо обфусцировать.
- Отмечаем понравившиеся галки в меню «Опции обфускации».
- Жмем баттон и довольствуемся результатом.
Скрипт имеет множество настроек и опций, посему процесс обфускации стал еще приятнее и удобнее :).
Решение: Думаю, ты не раз задавался целью поиска открытых веб-камер в Сети. Не спорю, наблюдать за людьми/событиями, происходящими в другом конце Земли (или офиса :)), довольно забавно. Удобнее всего осуществлять поиск с помощью любимого Гугла. При составлении запросов тебе поможет знаменитый ресурс http://johnny.ihackstuff.com. Наиболее жизнеспособные запросы я приведу в качестве примера:
inurl:"ViewerFrame?Mode="
inurl:netw_tcp.shtml
intitle:"supervisioncam protocol"
inurl:CgiStart?page=Single
inurl:indexFrame.shtml?newstyle=Quad
intitle:liveapplet inurl:LvAppl
inurl:/showcam.php?camid
inurl:video.cgi?resolution=
inurl:image?cachebust=
intitle:"Live View / - AXIS"
inurl:view/view.shtml
intext:"MOBOTIX M1"
intext:"Open Menu"
intitle:snc-rz30
inurl:home/
inurl:"MultiCameraFrame?Mode="
intitle:"EvoCam" inurl:"webcam.html?quot;
intitle:"Live NetSnap Cam-Server feed"
intitle:"Live View / - AXIS 206M"
intitle:"Live View / - AXIS 206W"
intitle:"Live View / - AXIS 210"
inurl:indexFrame.shtml Axis
inurl:"ViewerFrame?Mode="
inurl:"MultiCameraFrame?Mode=Motion"
intitle:start inurl:cgistart
intitle:"WJ-NT104 Main Page"
intext:"MOBOTIX M1" intext:"Open Menu"
intext:"MOBOTIX M10" intext:"Open Menu"
intext:"MOBOTIX D10" intext:"Open Menu"
intitle:snc-z20 inurl:home/
intitle:snc-cs3 inurl:home/
intitle:snc-rz30 inurl:home/
intitle:"sony network camera snc-p1"
intitle:"sony network camera snc-m1"
site:.viewnetcam.com -www.viewnetcam.com
intitle:"Toshiba Network Camera" user login
intitle:"netcam live image"
intitle:"i-Catcher Console - Web Monitor"
inurl:/home/home
intitle:flexwatch intext:"Copyright by Seyeon TECH Co"
intitle:"snc-rz30 home"
intitle: Network camera
Как видишь, каждый из запросов ориентирован на конкретный тип веб-камер, поэтому ты запросто можешь сконструировать несколько собственных. Алгоритм наших действий достаточно прост:
- Определяемся с типом веб-камеры, доменной зоны, etc.
- Идем на Гугл и составляем интересующий нас запрос.
- Кликаем по линкам и наслаждаемся (иногда даже админскими правами).
Чтобы не быть голословным, оставлю тебе на растерзание два рабочих линка на веб-камы:
http://65.254.62.79/CgiStart?page=Single&Language=0
http://84.45.154.218:2220/CgiStart?page=Single&Language=0
Но учти, подглядывать – нехорошо.
Задача: максимально быстро сбрутить md5-хэш, не используя ranbow-таблиц
Решение: Как ты знаешь, большинство утил для брута мд5-хэшей довольно медлительны. Принцип их действия основывается на использовании мощностей процессора твоего компа. Однако, утила CUDA в своих «вычислениях» юзает видеокарту Nvidia (а точнее, ее мультипроцессоры, коих в последних версиях около 16). Результат подобного подхода налицо – сумасшедшая скорость перебора паролей. Рассмотрим все необходимые действия:
- Видеокарта потребуется Nvidia GF8600GT (или выше)
- В Windows XP нужно установить последние драйверы ForceWare: 169.21
- Запускаем утилу:
nvCUDA.exe -f=mypas.txt -s=7 -e=7
– где:
- -f= файл с паролями до 50 шт., типа admin:9987d22788e810116a45109f2ea88648
- -s= начальное количество символов в пароле (6 – по дефолту)
- -e= конечное количество символов в пароле (8 – по дефолту)
Предварительная атака 2..5 символов (0x21..0x7f)
Командная строка:
// перебирает 0..9,a..z
nvCUDA.exe -f=mypas.txt -s=7 -e=7
- -f= файл с паролями до 50 шт. типа admin:9987d22788e810116a45109f2ea88648
- -s= начальное количество символов в пароле 6 - by default
- -e= конечное количество символов в пароле 8 - by default
- Необходимые библиотеки и утилу ты найдешь на нашем DVD
Скорость перебора составляет на заявленной видеокарте порядка 105 mln pas/sec, так что – дерзай.
Задача: получить доступ к файлам на компе в игровом клубе
Решение:
Сегодня каждый уважающий себя клуб либо интернет-кафе управляются при помощи специальной проги. В обязанности ее клиентской части может входить контроль интернет-трафика, времени пользования, ограничение управления компом и т.п. Нас будет интересовать доступ к файлам.
Следующий метод будет работать во многих клубных системах – рассмотрим его на примере ClubControl (www.clubcontrol.ru). Если тестим в клубе, первые два пункта, естественно, можем пропустить.
- Ставим «ClubControl Client». Прога с русским интерфейсом, поэтому разобраться не составит труда. Вводим заранее оговоренный пароль.
- Создаем раздел с любым именем: «Раздел -> Добавить раздел». Добавляем ярлык для запуска: «Раздел -> Добавить ярлык». В качестве экзешника выбираем наш winamp (надеюсь, этот редчайший плеер у тебя установлен).
- Итак, подготовка закончена. Щелкаем по ярлыку, в Винампе вызываем диалог открытия файла (в моей версии «Open file(s)») и ... получаем доступ лишь к разрешенным файлам и папкам (в отдельных случаях, когда местные админы слишком ленивы – ко всему компу). Обычно для пользователя отводится своя папка. Можно сливать файло со своей флешки на комп и обратно, удалять, запускать и изменять файлы в своей директории.
- Но много радости это нам не доставит, поэтому в поле для ввода имени открываемого винампом файла нагло пишем «C:». Несмотря на то, что в спускающемся меню «Папка» дальше собственной директории нам уйти не удавалось (до ввода «C:» все было скрыто), а теперь при клике по этому меню плеер вылетает с ошибкой, в основном окне диалога выбора файла мы свободно распоряжаемся всеми файлами на диске C. До содержимого остальных жестких дисков и CD/DVD приводов можно добраться аналогично – вспоминаем английский алфавит и вводим в поле «Имя файла» «D:», «E:», «F:» и так далее.
У данного подхода есть один большой минус: несмотря на свою популярность, Winamp'a может не оказаться в игровом клубе. Плюсами являются универсальность по отношению к клубным прогам и возможность экспериментировать: получаем через прогу, установленную на компе игрока, доступ к explorer'у, и пытаемся обойти ограничение.
Хочется отметить, что все ваши манипуляции при желании легко просматриваются (а возможно, логируются) с админского компа клуба, поэтому при выборе музыки стоит поторопиться :).
Задача: обойти StarForce для запуска игры с образа
Решение:
Старфорс – всем известная система защиты дисков, основанная на их физическом строении.
- Будем исходить из того, что у нас на руках уже есть образ диска, считанный на низких скоростях (1х-4х) с RMPS (физическая подпись записываемого диска). В противном случае для качественного создания образа лучше всего юзать Alcohol120% при всех включенных опциях эмуляции и типе данных StarForce.
- Допустим, мы имеем дело со StarForce 3.4.49.x (различные версии, в том числе более ранние, имеют свои способы обхода). Качаем утилиту StarFuck (black2knight.nm.ru/Starfuck_v0.83Beta2-Rus.exe) – версия 0.83 вполне подойдет. Тем, кто не дружит с английским, беспокоиться не стоит, найти наш вариант не составит труда. Запускаем.
- Выбираем нашу версию защиты StarForce из списка справа. В дальнейшем нужно будет указывать именно ее.
- Заходим в «Настройки». Заполняем поля с путями до Daemon Tools и Алкоголя. Метод патча cd-rom’ов оставляем «СуперАгрессивный», ожидание образа – 1000. В менюшке «CDRom'ы находятся» указываем, как подключены наши дисководы. Если что-то пойдет не так, то придется выключать комп и отсоединять их вручную, указывая в менюшке «у меня нет CDRom'ов». Также будет полезна прога StarForceNightmare, которая позволяет более точно подойти к делу отключения приводов (15 различных вариантов и комбинаций – напротив каждого варианта есть кнопка «Включить»). Применяем настройки, запускаем утилу еще раз.
- Щелкаем «Патчить BList». Выбираем «Выключить CD».
- Добираемся до менюшки «Генератор ярлыков». Сразу же меняем версию защиты на правильную в правом верхнем углу. Тип запуска «Запускать с EXE». Далее выбираем, в чьем виртуальном приводе будет работать образ диска (Даймон/Алкоголь). Кликаем «Указать EXE» и выбираем экзешник игры, с которого ее обычно запускают. Соседней кнопкой показываем путь до образа. Поле «Параметры запуска EXE» оставляем пустым.
- Готово. Создаем ярлык и используем его для запуска нужной игрушки.
Во избежание недоразумений: информация предоставлена только для тех, кто имеет оригинальный диск и просто ленится совать его в CD-ROM.
Задача: изменить параметры окна запускаемого приложения из-под отладчика
Решение:
Для чего это может понадобиться? Во-первых, иногда бывает необходимо изменить размер окна, которое не «растягивается» стандартными методами. Конечно, в таком случае можно использовать какую-либо утилиту, которая специально предназначена для манипуляции с окнами путем посылки им системных сообщений, но это – не путь настоящего крэкера :). Мы используем более изощренный метод, причем его можно применять не только для манипуляции с окнами, но и для задач сугубо «системного» толка. Ведь метод этот – подмена данных, передаваемых API-функции.
Первое, что нам требуется узнать, – какая API-функция создает окно. Лезем в справочник и получаем ответ: CreateWindowExW (есть и другие функции, но будем считать, что мы их откинули, действуя методом исключения). После того, как мы это выяснили, остается одно – поставить точки останова на все вызовы данной функции, дождаться инициализации (а, следовательно, и остановки на нужном месте) программы под отладчиком, исследовать передаваемые параметры. Затем найти среди них те, что отвечают за размеры окна и подменить их либо в стеке, либо непосредственно по адресу, откуда происходит извлечение этого параметра.
Рассмотрим этот несложный механизм на примере стандартного приложения notepad.exe, которое мы столько раз терзали.
- Открываем notepad.exe для отладки под OllyDbg;
- Устанавливаем точки останова на все вызовы CreateWindowExW: для этого нажимаем комбинацию клавиш <alt+F1> и в появившееся окно вводим «bpx CreateWindowExW»;
- Запускаем программу нажатием <F9>. Выполнение будет прервано по адресу 01004694h. Вот что мы увидим:
0100466B PUSH DWORD PTR DS:[1009A70];Height = 139 (313.)
01004671 MOV ESI,notepad.01001394
01004676 PUSH DWORD PTR DS:[1009A74];Width = 39A (922.)
0100467C PUSH DWORD PTR DS:[1009A7C];Y = CA (202.)
01004682 PUSH DWORD PTR DS:[1009A78];X = 52 (82.)
01004688 PUSH 0CF0000 ; стилевые характеристики
0100468D PUSH ESI; имя окна
0100468E PUSH notepad.01009020;Class = "Notepad"
01004693 PUSH EBX; стилевые характеристики
01004694 CALL DWORD PTR DS:[<&USER32.CreateWindowExW>]; вызов функции
Как ты можешь догадаться, по адресам 0100466B и 01004676 располагаются инструкции, выполняющие помещение в стек значений, которыми и определяется, соответственно, высота и ширина создаваемого окна.
Ставим точку останова по адресу 0100466B и перезапускаем программу под отладчиком.
- После того, как мы остановимся по адресу 0100466B, у нас появится, как минимум, два пути решения нашей задачи: первый – подменить данные непосредственно в стеке, и второй (наиболее предпочтительный) – изменить значения, находящиеся по адресу, который использует инструкция PUSH в качестве операнда. Инструкция выглядит следующим образом: PUSH DWORD PTR DS:[1009A70]. Это означает, что мы должны произвести подмену данных, находящихся по адресу 1009A70h. В окошке hex-дампа (которое находится «слева-снизу», под окном, содержащим листинг дизассемблирования) проследуем по этому адресу, выделим мышью два байта, которые содержат значения 39 и 01 и выберем из меню правой кнопки мыши пункт «Binary -> Edit». После этого можно смело вбивать в появившемся окне другое двухбайтовое значение, задающее высоту окна. Чтобы почувствовать «эффект», советую ввести значения «FF FF».
- Следующий (и последний) шаг – запуск программы по <F9>.
Обрати внимание, что API-функция CreateWindowExA приняла новые данные, результатом чего явилось изменение вертикальных размеров окна «Блокнота». Что и требовалось получить!
Задача: замаскировать вызов API-функции, заменив его более сложным, неявным, вызовом
Решение:
Думаю, ты сразу понял, для чего необходима маскировка. Конечно, единственная ее цель – затруднить задачу реверсера. Здесь есть где разгуляться фантазии кодера! Можно вызывать функцию через серию переходов, можно вычислять адрес функции путем математических преобразований, да мало ли что еще можно придумать :). Чем необычнее подход, тем больше вероятность, что реверсер отступится от защищаемой программы.
Для начала рассмотрим пример маскировки вызова с заменой конкретного адреса функции вычисляемым значением.
- Ставим точку останова на маскируемую API-функцию.
- Запускаем программу на исполнение (F9).
- После остановки программы на месте вызова маскируемой API-функции выполняем один шаг с заходом в подпрограмму (F7).
- Записываем адрес, по которому мы находимся после выполнения call-а (этот адрес фактически является адресом API-функции, и находимся мы в недрах конкретной библиотеки dll).
- Находим любую «свободную зону» в PE-файле – то есть зону, где расположен массив нулей, необходимый для выравнивания секций.
- Вызов API-функции заменяем безусловным переходом на начало массива нулей (вида «jmp адрес»).
- Переходим к массиву нулей – заполняем его следующими инструкциями:
- инструкциями, которые производят вычисление адреса вызова – именно вычисления по несложному алгоритму (единственное обязательное условие здесь: чтобы адрес API-функции нигде не присутствовал в явном виде).
- перехода по вычисленному адресу, помещенному в регистр (например, «call eax»).
- безусловного перехода по адресу инструкции, которая следовала за вызовом маскируемой API-функции.
Теперь, когда ты знаешь теорию, можно применить этот несложный алгоритм на примере изменения простого PE-файла «ex.exe», который вызывает функцию MessageBoxA, под отладчиком OllyDbg. О том, как это сделать, ты можешь прочитать на нашем DVD или посмотреть мой видеоурок.
Содержание
ВИДЕО К ЭТОМУ НОМЕРУКалейдоскоп тайных знаний За последние несколько лет OpenSSH из набора программ для защищенной системы регистрации, выполнения команд на удаленном хосте и передачи файлов с одной машины на другую превратился в швейцарский армейский нож, просто потрясающий своими...
Вооруженный бронекальмар Несмотря на то, что кэширующий прокси-сервер Squid прекрасно справляется с задачей ограничения доступа к различным ресурсам, проверять файлы на вирусы и блокировать баннеры его штатными средствами крайне проблематично. Здесь на помощь пр...
Геометрия окошек Подмена параметров, передаваемых API-функциям - замечательный метод борьбы со многими ограничениями, выставляемыми программно. Посмотрев этот ролик, ты узнаешь, как выполнять подмену. В качестве примера выбрана довольно простая задача -...
Берем Longhorn за рога Установка Windows 2008 Server довольно проста, по ходу инсталляции задается минимум вопросов, и если все требования к оборудованию и размещению выдержаны, через 20 минут получаем уже готовую к использованию систему. Далее предстоит выпол...
Виртуальный грабеж В этом ролике ты увидишь, как был взломан один из зарубежных шопов. Сначала хакер заходит на сайт магазина и находит несколько sql-инъекций. Но убедившись, что в качестве СУБД используется MS Access, взломщик подбирает название файла с Б...
ESHOP под ударом В этом видео Elekt продемонстрирует процесс нахождения и практического применения уязвимостей в движке PHPShop. Хакер, исследуя каждый байт кода, последовательно находит самые разнообразные уязвимости. В конце концов, он находит серьезну...
|
 |
|