Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #95, НОЯБРЬ 2006 г.

На пике славы: «взлом» поисковых систем

BUG(O)R

Хакер, номер #095, стр. 095-090-1


(zona_bugor@bk.ru, http://hunger.ru)

Продвижение своего сайта на верхушку поисковика

Поисковые системы - основное средство продвижения сайтов к пику славы и максимальной посещаемости. Если ресурс стоит на первом месте, то наверняка это очень популярный и раскрученный портал. Сегодня мне захотелось попасть на первое место. Захотелось и все тут. Что делать? Ломать гугл, пользоваться системами раскрутки? Конечно, нет, ведь мы с вами призваны решать проблемы нестандартным путем. Итак, пришло время узнать, как сделать так, чтобы при любом поисковом запросе в первой строке результатов красовался твой сайт.

Теория и основы

Наверное, я тебя заинтриговал? Ничего сверхъестественного мы делать не будем. Конечно, можно попрыгать около компьютера с бубном, но вряд ли это что-то даст :). На самом деле, поместить свой ресурс на первое место в поисковике не очень сложно, в этом нам поможет технология с красивым названием «сплайсинг». Она заключается в перехвате API функций и модификации данных, которые через них передаются на сервер или с сервера принимаются. Ни для кого не секрет, что любое приложение общается с внешним миром с помощью сокетных функций (не берем в расчет исключительные случаи), а конкретнее - данные передаются с помощью функций send и WSASend, а принимаются с помощью recv и WSARecv. Почему я здесь не рассматриваю исключения или аналоги? Потому что все известные браузеры для передачи и приема данных в/из сети используют именно эти 4 функции. Они находятся в библиотеке ws2_32.dll. Есть и одноименные названия в библиотеке winsocket.dll, но они в итоге приходят к своим «родителям» из ws2_32.dll, так что, перехватив функции из этой библиотеки, мы ничего не упустим.

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

В бой!

В выборе языка я руководствовался широтой аудитории. Я, конечно, мог выбрать ассемблер и отсечь этим 90% читателей, которые бы, посмотрев на набор мнемокодов, сказали: «Да, это круто, когда-нибудь и я так научусь». Но я хочу донести все и внести ясность, и поэтому выбрал Delphi. Также в самом перехвате я буду использовать библиотеку Advanced API Hook Libary. Во-первых, реализовать лучше нужные приемы у нас вряд ли получится, а во-вторых, это всего лишь статья, и если я буду «засорять» текст довольно громоздкими процедурами перехвата, то мне не хватит места для всего остального.

Чтобы осуществить перехват, мы будем использовать внедрение своей DLL в адресное пространство другого процесса (в нашем случае это браузер). С помощью библиотеки advApiHook это делается очень просто:

CreateProcessWithDll(nil,pChar(path_of_browser), nil, nil, FALSE, CREATE_SUSPENDED, nil, nil, si, pi, pChar(extractfilepath(paramstr(0)) + '\main.dll'));

Содержание  Вперед на стр. 095-090-2