Привет всем! По ссылке лежит кодес позволяющий прибивать защищенные процессы (процессы антируткитов, антвирусов, etc). Ищет адрес функции PsTerminateProcess и вызывает ее. Стабильно работает на xp sp3.
Бинарник
Бинарник
PsTerminateProcess
PsTerminateProcess is an internal kernel-mode function which is not exported by ntoskrnl. You will need to locate it by scanning kernel-mode memory for a specific signature, which I will not post here. WARNING: On XP you should locate PspTerminateProcess instead, which is stdcall. On Vista PsTerminateProcess is thiscall (first argument goes in ecx), so you will need some hand-coded assembly.1 typedef NTSTATUS (*_PsTerminateProcess)(
2 PEPROCESS Process,
3 NTSTATUS ExitStatus
4 );
PspTerminateThreadByPointer
This function is not exported either. WARNING: On XP, there are two arguments. On Vista, there are three.
view source
?01 /* XP */
02 typedef NTSTATUS (NTAPI *_PspTerminateThreadByPointer51)(
03 PETHREAD Thread,
04 NTSTATUS ExitStatus
05 );
06
07 /* Vista */
08 typedef NTSTATUS (NTAPI *_PspTerminateThreadByPointer60)(
09 PETHREAD Thread,
10 NTSTATUS ExitStatus,
11 BOOLEAN DirectTerminate
12 );
#include <windows.h>
#include <stdio.h>
typedef VOID ( _stdcall *RtlSetProcessIsCritical ) (
IN BOOLEAN NewValue,
OUT PBOOLEAN OldValue, // (optional)
IN BOOLEAN IsWinlogon );
BOOL EnablePriv(LPCSTR lpszPriv) // by Napalm
{
HANDLE hToken;
LUID luid;
TOKEN_PRIVILEGES tkprivs;
ZeroMemory(&tkprivs, sizeof(tkprivs));
if(!OpenProcessToken(GetCurrentProcess(), (TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY), &hToken))
return FALSE;
if(!LookupPrivilegeValue(NULL, lpszPriv, &luid)){
CloseHandle(hToken); return FALSE;
}
tkprivs.PrivilegeCount = 1;
tkprivs.Privileges[0].Luid = luid;
tkprivs.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
BOOL bRet = AdjustTokenPrivileges(hToken, FALSE, &tkprivs, sizeof(tkprivs), NULL, NULL);
CloseHandle(hToken);
return bRet;
}
BOOL ProtectProcess() // by _FIL73R_
{
HANDLE hDLL;
RtlSetProcessIsCritical fSetCritical;
hDLL = LoadLibraryA("ntdll.dll");
if ( hDLL != NULL )
{
EnablePriv(SE_DEBUG_NAME);
(fSetCritical) = (RtlSetProcessIsCritical) GetProcAddress( (HINSTANCE)hDLL, "RtlSetProcessIsCritical" );
if(!fSetCritical) return 0;
fSetCritical(1,0,0);
return 1;
} else
return 0;
}
int main (void)
{
ProtectProcess();
while(1)
{
// do whatever you want to do here
}
return 0;
}
это через ZwSetSystemInformation ?сборка в памяти и запуск оттуда
В Win7 x64 снимается процесс из диспетчера задач без бсода.на виртуалке XP sp3 бсод при попытки убить твоей прогой
не знаю какая у тебя там задача , но в большинстве случаев выносить авер - это большое злохмм, надо будет добавить либо цикл, либо нотификатор
У касперского тоже так, сервис восстанавливает GUI, а GUI восстановит сервис, если его снести.с авирой также прекрасно справляется - просто один процесс себя перезапускает постоянно при выносе, и создалась иллюзия что не убивается