Скрытие процесса?

Тема в разделе "WASM.WIN32", создана пользователем __EXP__, 14 фев 2010.

  1. __EXP__

    __EXP__ New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2010
    Сообщения:
    12
    Написал прогу надо чтобы она не палилась в Диспетчере задач.
    Погуглил и как понял надо подгрузить dll. В ней надо поставить hook на перехват NtQuerySystemInformation.
    Затем нужно изменить структуру SYSTEM_PROCESS_INFORMATION таким образом, чтобы она указывала на следующий процесс , это как я понял чтобы затереть инфу о скрываемом процессе.
    Нашел вот такой пример
    Код (Text):
    1. #include <windows.h>
    2. #pragma hdrstop
    3.  
    4. #include <Winnt.h>
    5. #include <winbase.h>
    6. #include <stdio.h>
    7. #include <Tlhelp32.h>
    8.  
    9. #define _DLL_
    10. #include "HookApi.h"
    11.  
    12. #include "HookClass.h"
    13.  
    14. //---------------------------------------------------------------------------
    15.  
    16. //NtQuerySystemInformation
    17.  
    18. typedef struct _THREAD_INFO
    19. {
    20.   LARGE_INTEGER KernelTime;
    21.   LARGE_INTEGER UserTime;
    22.   LARGE_INTEGER CreateTime;
    23.   ULONG WaitTime;
    24.   DWORD dwStartAddress;
    25.   DWORD dwOwnerPID;
    26.   DWORD dwThreadId;
    27.   DWORD dwCurrentPriority;
    28.   DWORD dwBasePriority;
    29.   DWORD dwContextSwitches;
    30.   DWORD dwThreadState;
    31.   DWORD dwWaitReason;
    32.   DWORD dwReserved;
    33.  
    34. }THREADINFO, *PTHREADINFO;
    35.  
    36. typedef struct _UNICODE_STRING
    37. {
    38.   USHORT Length;
    39.   USHORT MaxLength;
    40.   PWSTR  Buffer;
    41.  
    42. } UNICODE_STRING;
    43.  
    44. typedef struct _PROCESS_INFO
    45. {
    46.   DWORD dwOffset;
    47.   DWORD dwThreadsCount;
    48.   DWORD dwUnused1[6];
    49.   LARGE_INTEGER CreateTime;
    50.   LARGE_INTEGER UserTime;
    51.   LARGE_INTEGER KernelTime;
    52.   UNICODE_STRING ProcessName;
    53.  
    54.   DWORD dwBasePriority;
    55.   DWORD dwProcessID;
    56.   DWORD dwParentProcessId;
    57.   DWORD dwHandleCount;
    58.   DWORD dwUnused3[2];
    59.  
    60.   DWORD dwVirtualBytesPeak;
    61.   DWORD dwVirtualBytes;
    62.   ULONG  dwPageFaults;
    63.   DWORD dwWorkingSetPeak;
    64.   DWORD dwWorkingSet;
    65.   DWORD dwQuotaPeakPagedPoolUsage;
    66.   DWORD dwQuotaPagedPoolUsage;
    67.   DWORD dwQuotaPeakNonPagedPoolUsage;
    68.   DWORD dwQuotaNonPagedPoolUsage;
    69.   DWORD dwPageFileUsage;
    70.   DWORD dwPageFileUsagePeak;
    71.  
    72.   DWORD      dCommitCharge;
    73.   THREADINFO ThreadSysInfo[1];
    74.  
    75. } PROCESSINFO, *PPROCESSINFO;
    76.  
    77. typedef long (__stdcall *PNTQUERYSYSTEMINFORMATION)(DWORD,PVOID,ULONG,PULONG);
    78.  
    79. long __stdcall MyNtQuerySystemInformation(
    80.   DWORD SysInformatoinClass,
    81.   PVOID SystemInformation,          
    82.   ULONG SystemInformationLength,
    83.   PULONG ReturnLength OPTIONAL);
    84.  
    85. TAPIHook *NtQuerySystemInformationHook = NULL;
    86.  
    87. //---------------------------------------------------------------------------
    88.  
    89. //HHOOK hCallWndHook = NULL;
    90.  
    91. LRESULT CALLBACK CallWndHook(int nCode,WPARAM wParam,LPARAM lParam); // объявление функции обратного вызова
    92.  
    93. //---------------------------------------------------------------------------
    94. //?????4??SetWindowsHookEx
    95. HINSTANCE hInst;
    96.  
    97. #pragma data_seg("SHAREDATA")
    98.  
    99. HHOOK hCallWndHook = NULL;
    100. DWORD dwSelfProcessID = -1;
    101.  
    102. #pragma data_seg()
    103.  
    104. #pragma comment(linker,"/section:SHAREDATA,RWS")
    105.  
    106.  
    107. //????iDLL??????Hook?GetProcAddressbLoadLibraryAbLoadLibraryWb
    108. //LoadLibraryExAbLoadLibraryExW?5???e?HookClass.Cppec???Unhook??i
    109. //??DLL???????Р¶?i???????4?cDLL?u?i?Р¶?i??N??
    110. //Hook??j??i???Р–??????Unohoki???????i?N??Hooko?
    111. //???????i??k????Hookc
    112. bool IsHook = false;
    113.  
    114. //?????Hook??
    115. int __fastcall HookFunc();
    116. int __fastcall UnhookFunc();
    117.  
    118. //---------------------------------------------------------------------------
    119. //#pragma argsused
    120.  
    121. BOOL APIENTRY DllMain( HANDLE hModule, DWORD  reason, LPVOID lpReserved) // функция предназначена для инициализации и очистки DLL.
    122. {
    123.   hInst = (HINSTANCE)hModule;    
    124.  
    125.   if(reason == DLL_PROCESS_ATTACH)
    126.   {
    127.     DisableThreadLibraryCalls(hInst);
    128.  
    129.     __try
    130.     {
    131.       if(dwSelfProcessID != -1)
    132.         HookFunc();
    133.     }
    134.     __except(EXCEPTION_EXECUTE_HANDLER)
    135.     {/* Do nothing */}
    136.   }
    137.   else if(reason == DLL_PROCESS_DETACH)
    138.   {
    139.     __try
    140.     {
    141.       UnhookFunc();            
    142.     }
    143.     __except(EXCEPTION_EXECUTE_HANDLER)
    144.     {/* Do nothing */}
    145.   }
    146.  
    147.   return TRUE;
    148. }
    149. //---------------------------------------------------------------------------
    150. //Hook
    151. DLL_EXP_IMP int _cdecl Hook(DWORD dwSelfProcessID_P)
    152. {                          
    153.   dwSelfProcessID = dwSelfProcessID_P;
    154.  
    155.   if(hCallWndHook == NULL)
    156.     hCallWndHook = SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndHook,hInst,0); //Функция устанавливает определяемую программой подключаемую процедуру в цепочку hook-точек.
    157.  
    158.   // Hook?????
    159.   HookFunc();
    160.  
    161.   return 1;
    162. }
    163. //---------------------------------------------------------------------------
    164. //Unhook
    165. DLL_EXP_IMP int _cdecl Unhook()
    166. {
    167.   if(hCallWndHook != NULL)
    168.   {
    169.     UnhookWindowsHookEx(hCallWndHook); //Функция удаляет подключаемую процедуру, установленную в цепочку hook-точек функцией SetWindowsHookEx.
    170.     hCallWndHook = NULL;
    171.   }
    172.  
    173.   // Unhook?????
    174.   UnhookFunc();
    175.  
    176.   return 1;
    177. }          
    178. //---------------------------------------------------------------------------
    179. int __fastcall HookFunc()
    180. {
    181.   IsHook = true;
    182.  
    183.   SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL); //функция устанавливает уровень приоритета текущего потока в своем классе приоритета
    184.  
    185.   NtQuerySystemInformationHook = new TAPIHook("NTDLL.DLL","NtQuerySystemInformation",
    186.                               (PROC)MyNtQuerySystemInformation,true);
    187.  
    188.   SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_NORMAL);
    189.   return 1;
    190. }
    191. //---------------------------------------------------------------------------
    192. int __fastcall UnhookFunc()
    193. {
    194.   //???????i???????????u??????????SUnhookc
    195.   IsHook = false;
    196.  
    197.   if(NtQuerySystemInformationHook != NULL)
    198.   {
    199.     delete NtQuerySystemInformationHook;
    200.     NtQuerySystemInformationHook = NULL;
    201.   }
    202.   return 1;
    203. }
    204. //---------------------------------------------------------------------------
    205. //Р»?Hooki?????i??????DLL?????
    206. LRESULT CALLBACK CallWndHook(int nCode,WPARAM wParam,LPARAM lParam)
    207. {
    208.   if(nCode < 0)
    209.     return CallNextHookEx(hCallWndHook,nCode,wParam,lParam); //Функция передает информацию hook-точки в следующую подключаемую процедуру в текущей цепочке hook-точек.
    210.  
    211.   // Do nothing
    212.   return 0;              
    213. }
    214. //---------------------------------------------------------------------------
    215. /*---------------------------------------------------------------------------
    216.  
    217.                          ???????e
    218.  
    219. //-------------------------------------------------------------------------*/
    220. //---------------------------------------------------------------------------
    221.  
    222. long __stdcall MyNtQuerySystemInformation(
    223.   DWORD SysInformatoinClass,
    224.   PVOID SystemInformation,          
    225.   ULONG SystemInformationLength,
    226.   PULONG ReturnLength OPTIONAL)
    227. {
    228.   long Result;
    229.  
    230.   Result = ((PNTQUERYSYSTEMINFORMATION)(PROC)(*NtQuerySystemInformationHook))
    231.            (SysInformatoinClass,SystemInformation,SystemInformationLength,ReturnLength);
    232.  
    233.   //???????????mi?????S?Р–?????c
    234.   __try
    235.   {
    236.     if(SysInformatoinClass == 5 && Result == 0 /* STATUS_SUCCESS */)
    237.     {
    238.       PPROCESSINFO pProcessInfo;
    239.       PPROCESSINFO pPrevProcessInfo;
    240.  
    241.       pProcessInfo = (PPROCESSINFO)SystemInformation;
    242.       pPrevProcessInfo = pProcessInfo;
    243.  
    244.       while(true)
    245.       {
    246.         if(pProcessInfo != NULL && pProcessInfo->dwProcessID == dwSelfProcessID)
    247.         {
    248.           if(pProcessInfo->dwOffset == 0)
    249.             pPrevProcessInfo->dwOffset = 0;
    250.           else
    251.             pPrevProcessInfo->dwOffset = pPrevProcessInfo->dwOffset + pProcessInfo->dwOffset;
    252.  
    253.           break;
    254.         }
    255.  
    256.         if(pProcessInfo->dwOffset == 0)
    257.           break;
    258.  
    259.         pPrevProcessInfo = pProcessInfo;
    260.         pProcessInfo = (PPROCESSINFO)((byte*)pProcessInfo + pProcessInfo->dwOffset);
    261.       }
    262.     }
    263.   }
    264.   __except(EXCEPTION_EXECUTE_HANDLER)
    265.   {
    266.     /*/ ????i????????
    267.     ::MessageBox(NULL,"Exception Occured at self-defined function :(",NULL,MB_OK | MB_ICONWARNING);
    268.     //*/
    269.   }
    270.  
    271.   return Result;
    272. }
    273. //---------------------------------------------------------------------------
    Что делает вот эта строка NtQuerySystemInformationHook = new TAPIHook("NTDLL.DLL","NtQuerySystemInformation",
    (PROC)MyNtQuerySystemInformation,true);
    И функция TAPIHook ее нет ни в "HookApi.h" ,"HookClass.h".
    И вообще есть ли еще готовые библиотеки для работы с хуками??
     
  2. RedLord

    RedLord Member

    Публикаций:
    0
    Регистрация:
    23 июн 2005
    Сообщения:
    183
    Адрес:
    Ukraine
    madcodehook, например
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Да, User32.dll