• XSS.stack #1 – первый литературный журнал от юзеров форума

Завершение защищенных процессов

greenzy

(L3) cache
Пользователь
Регистрация
25.10.2010
Сообщения
208
Реакции
1
Привет всем! По ссылке лежит кодес позволяющий прибивать защищенные процессы (процессы антируткитов, антвирусов, etc). Ищет адрес функции PsTerminateProcess и вызывает ее. Стабильно работает на xp sp3.
Бинарник
 
Дай взглянуть на исходник, который парсит KeServiceDescriptorTable.
Код рипнул, а разбираться в структурах времени отнимет, т.к сам только "вкуриваю".
 
на win7 фэйл при запуске , чото мне кажется что фича на Vista + , не будет работать. Нашел такое инфо
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

print
?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 );

правда удивительно что это работает , хотя точнее удивительней для меня ведь я думал что Ps*** функции только драйверком можно вызывать. Интересует как находиться PEPROCESS Process, сам адрес функции можно с горем пополам найти опять же сигнатурно.
 
аа ясно ато я тут размечтался, думал какая-то фича для ring3 :D ну с драйверком мочить можно кого угодно, только бы дали его бесприпятсвенно загрузить :D
кстати видел такой кодес
Код:
#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; 
}
делаем из процесса зашищенный процесс, и при убийстве по идее бсод будет
 
бсод при завершении этой проги будет в любом случае, хоть из ядра хоть из юзера. по непроверенным данным, авира выживает при завершении, кто нибудь проверьте пожалуйста
 
хмм, надо будет добавить либо цикл, либо нотификатор
не знаю какая у тебя там задача , но в большинстве случаев выносить авер - это большое зло :)

кстати, есть еще идя как выносить полностью из юзермода
это убийство процесса или тредов процесса из контекста csrss.exe , ну или перехват Csr*** функций - не дать процессу нормально общаться с csrss - такого плана идея
позже накидаю прогень, самому интересно
 
с авирой также прекрасно справляется - просто один процесс себя перезапускает постоянно при выносе, и создалась иллюзия что не убивается
У касперского тоже так, сервис восстанавливает GUI, а GUI восстановит сервис, если его снести.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх