Win2000下進程隱藏的一種方案

來源:互聯網
上載者:User
十分抱歉,匆匆寫了幾句代碼有點bug,即“ZwOpenSection(&g_hMPM,SECTION_MAP_WRITE|SECTION_MAP_WRITE,&attributes)”使得第一次運行返回失敗,請刪除原文,改正為:

pjf (jfpan20000@sina.com)

上次在CVC提到了這東西,因為很簡單覺得沒必要多說什麼,但有人要求寫全,所以補充幾句:

很多文章對此論題作了分析,比如APIHOOK、系統服務HOOK等等,至於遠線程注入沒有自己的進程,本不算“隱藏”。

這裡寫一個2000下的完全隱藏方法,很簡單,也沒什麼新意。

在講解之前,首先提一提一些結構,進程執行體塊中有數個進程相關鏈,其中之一是活動進程鏈。此鏈的重要
作用之一就是在查詢系統資訊時供遍曆當前活動進程,很有意思的是M$可能因效率因素使它被排除出進程核心塊,
意味進線程切換等操作時並不利用它,進一步說改寫它也不該有不可忽視的問題(此即本方案的基礎)。

怎麼做很明顯了,在活動進程雙向鏈中刪除想要得隱藏的進程既可,核心調試器(如softice/proc)亦查不出來。



2000下的隱藏當前進程的代碼如下:

#include
#include
#include

#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)

typedef LONG NTSTATUS;
typedef struct _IO_STATUS_BLOCK
{
NTSTATUS Status;
ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

#define OBJ_INHERIT 0x00000002L
#define OBJ_PERMANENT 0x00000010L
#define OBJ_EXCLUSIVE 0x00000020L
#define OBJ_CASE_INSENSITIVE 0x00000040L
#define OBJ_OPENIF 0x00000080L
#define OBJ_OPENLINK 0x00000100L
#define OBJ_KERNEL_HANDLE 0x00000200L
#define OBJ_VALID_ATTRIBUTES 0x000003F2L

typedef struct _OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;

typedef NTSTATUS (CALLBACK* ZWOPENSECTION)(
OUT PHANDLE SectionHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes
);

typedef VOID (CALLBACK* RTLINITUNICODESTRING)(
IN OUT PUNICODE_STRING DestinationString,
IN PCWSTR SourceString


十分抱歉,匆匆寫了幾句代碼有點bug,即“ZwOpenSection(&g_hMPM,SECTION_MAP_WRITE|SECTION_MAP_WRITE,&attributes)”使得第一次運行返回失敗,請刪除原文,改正為:

pjf (jfpan20000@sina.com)

上次在CVC提到了這東西,因為很簡單覺得沒必要多說什麼,但有人要求寫全,所以補充幾句:

很多文章對此論題作了分析,比如APIHOOK、系統服務HOOK等等,至於遠線程注入沒有自己的進程,本不算“隱藏”。

這裡寫一個2000下的完全隱藏方法,很簡單,也沒什麼新意。

在講解之前,首先提一提一些結構,進程執行體塊中有數個進程相關鏈,其中之一是活動進程鏈。此鏈的重要
作用之一就是在查詢系統資訊時供遍曆當前活動進程,很有意思的是M$可能因效率因素使它被排除出進程核心塊,
意味進線程切換等操作時並不利用它,進一步說改寫它也不該有不可忽視的問題(此即本方案的基礎)。

怎麼做很明顯了,在活動進程雙向鏈中刪除想要得隱藏的進程既可,核心調試器(如softice/proc)亦查不出來。



2000下的隱藏當前進程的代碼如下:

#include
#include
#include

#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)

typedef LONG NTSTATUS;
typedef struct _IO_STATUS_BLOCK
{
NTSTATUS Status;
ULONG Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef struct _UNICODE_STRING
{
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

#define OBJ_INHERIT 0x00000002L
#define OBJ_PERMANENT 0x00000010L
#define OBJ_EXCLUSIVE 0x00000020L
#define OBJ_CASE_INSENSITIVE 0x00000040L
#define OBJ_OPENIF 0x00000080L
#define OBJ_OPENLINK 0x00000100L
#define OBJ_KERNEL_HANDLE 0x00000200L
#define OBJ_VALID_ATTRIBUTES 0x000003F2L

typedef struct _OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PVOID SecurityDescriptor;
PVOID SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;

typedef NTSTATUS (CALLBACK* ZWOPENSECTION)(
OUT PHANDLE SectionHandle,
IN ACCESS_MASK DesiredAccess,
IN POBJECT_ATTRIBUTES ObjectAttributes
);

typedef VOID (CALLBACK* RTLINITUNICODESTRING)(
IN OUT PUNICODE_STRING DestinationString,
IN PCWSTR SourceString




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。