Обход Demo-защиты: обращения к WinAPI

Тема в разделе "WASM.BEGINNERS", создана пользователем GIP, 7 дек 2008.

  1. GIP

    GIP New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2008
    Сообщения:
    2
    Есть EXE-клиент (win32) с Demo защитой:
    http://ifolder.ru/9427505
    - EXE получает данные по ТСР/IP с удаленного РС с выводом визуалки на монитор;
    - при отсутствии на удаленном РС лицензионного донгл-драйвера (или подключенного USB контроллера) EXE выводит данные только в течении 5 мин, затем пишет в главное окно "End of Demo Version!";
    - защита активируется только с началом получения данных от сервера (пишет в главное окно "This is a Demo Version!").

    Напрашиваются три варианта действий:
    - продлить демо-период;
    - сымитировать наличие драйвера;
    - модифицировать условный переход, связанный с "End of Demo Version".
    Думаю, продлить демо-период было бы проще.

    PEiD говорит наш РЕ not protected.
    Начал со снимков системы, нашел след.изменения после запуска EXE:
    - файлы: нет изменений;
    - реестр:
    [Modified keys]
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\kmixer\Enum\Count
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\kmixer\Enum\NextInstance
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kmixer\Enum\Count
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kmixer\Enum\NextInstance
    HKEY_USERS\S-1-5-21-776561741-1383384898-1060284298-500\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{75048700-EF1F-11D0-9888-006097DEACF9}\Count\HRZR_EHACNGU
    HKEY_USERS\S-1-5-21-776561741-1383384898-1060284298-500\Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{75048700-EF1F-11D0-9888-006097DEACF9}\Count\HRZR_EHACNGU:P:\Cebtenz Svyrf\VGEN\GSG-Cnary\GSG2CEBCceb\GSG2CEBCceb.rkr

    [New keys] //убиваются по завершении/
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\kmixer\Enum\0
    Value: String: "SW\{b7eafdc0-a680-11d0-96d8-00aa0051e51d}\{9B365890-165F-11D0-A195-0020AFD156E4}"
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kmixer\Enum\0
    Value: String: "SW\{b7eafdc0-a680-11d0-96d8-00aa0051e51d}\{9B365890-165F-11D0-A195-0020AFD156E4}"

    Вобщем, похоже на криптографию, сходу картина не ясна.
    При просмотре ImportTable нашел обращения к след. АПИ ф-циям, связанным с сист.временем (в порядке смещений):
    [Kernel32]
    GetFileTime
    FileTimeToSystemTime
    FileTimeToLocalFileTime
    GetTimeZoneInformation

    Т.е. алгоритм привязан к FileTime, но остается непонятным что с чем алгоритм сравнивает. Не видно ни GetSystemTime, ни GetTickCount.
    Попробовал мониторить обращения ЕХЕ к АПИ ф-циям с помощью winapioverride32. К моему удивлению обращений к вышеуказанным ф-циям не наблюдалось от запуска до ExitProcess. Почему-непонятно, все остальные обращения мониторились. Или здесь демо-таймер реализован через создание потока, Sleep() и т.д.?
    Опыта у меня пока маловато, поэтому многое не очевидно.
    Если не сложно, подтолкните в нужном направлении!
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Гуан какойто, я могу разобрать нормальное приложение, но такое - в топку, думаю даже на кряклабе за такую погонь никто не возмётся.
     
  3. wvlg

    wvlg New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2007
    Сообщения:
    44
    GIP

    Импортируемы функции:

    Код (Text):
    1. OPENGL32.dll: glFlush, glFinish, wglGetCurrentDC, glMatrixMode, glClearColor, glClear, glDepthFunc, glDepthRange, glGenTextures, glPixelStoref, glTexParameterf, glTexEnvf, wglCreateContext, glGetString, wglGetCurrentContext, wglMakeCurrent, wglDeleteContext, glColor3f, glVertex3f, glTranslatef, glViewport, glFrontFace, glEnable, glLoadIdentity, glBindTexture, glBegin, glNormal3d, glTexCoord2d, glVertex3dv, glEnd, glRotatef, glBlendFunc, glDisable, glColor4f, glDeleteTextures
    2. > GLU32.dll: gluBuild2DMipmaps
    3. > KERNEL32.dll: EnterCriticalSection, GetFileAttributesA, GetFileSize, GetFileTime, SetErrorMode, GlobalFlags, SizeofResource, LocalAlloc, TlsAlloc, GlobalHandle, TlsFree, GlobalReAlloc, TlsSetValue, LocalReAlloc, TlsGetValue, GetProcessVersion, GetCPInfo, GetOEMCP, FileTimeToSystemTime, FileTimeToLocalFileTime, RtlUnwind, GetStartupInfoA, GetCommandLineA, ExitProcess, HeapAlloc, HeapFree, RaiseException, TerminateProcess, CreateThread, ExitThread, HeapReAlloc, HeapSize, InitializeCriticalSection, GetTimeZoneInformation, UnhandledExceptionFilter, FreeEnvironmentStringsA, FreeEnvironmentStringsW, GetEnvironmentStrings, GetEnvironmentStringsW, SetHandleCount, GetStdHandle, GetFileType, GetEnvironmentVariableA, GetVersionExA, HeapDestroy, HeapCreate, VirtualFree, LCMapStringA, LCMapStringW, VirtualAlloc, IsBadWritePtr, GetStringTypeA, GetStringTypeW, SetUnhandledExceptionFilter, IsBadReadPtr, LeaveCriticalSection, SetStdHandle, CompareStringA, CompareStringW, SetEnvironmentVariableA, MulDiv, GetProfileStringA, SetLastError, CreateEventA, SuspendThread, SetThreadPriority, ResumeThread, SetEvent, WaitForSingleObject, GlobalAlloc, lstrcmpA, GetCurrentThread, FreeLibrary, GetVersion, lstrcatA, GetCurrentThreadId, GlobalGetAtomNameA, GlobalAddAtomA, GlobalFindAtomA, GlobalDeleteAtom, GetModuleHandleA, GlobalLock, GlobalUnlock, GlobalFree, LockResource, FindResourceA, LoadResource, lstrcmpiA, GetFullPathNameA, lstrcpynA, GetVolumeInformationA, FindFirstFileA, FindClose, lstrcpyA, LoadLibraryA, GetProcAddress, DeleteFileA, MoveFileA, SetEndOfFile, UnlockFile, LockFile, CloseHandle, FlushFileBuffers, SetFilePointer, WriteFile, ReadFile, CreateFileA, GetCurrentProcess, DuplicateHandle, LocalFree, IsBadCodePtr, MultiByteToWideChar, WideCharToMultiByte, lstrlenA, InterlockedDecrement, InterlockedIncrement, CreateMutexA, GetLastError, ReleaseMutex, GetPrivateProfileStringA, WritePrivateProfileStringA, GetModuleFileNameA, DeleteCriticalSection, GetACP
    4. > USER32.dll: SetMenuItemBitmaps, ModifyMenuA, GetMenuState, GetMenuCheckMarkDimensions, ReleaseDC, wvsprintfA, PostQuitMessage, ShowOwnedPopups, GetCursorPos, ValidateRect, TranslateMessage, GetMessageA, ClientToScreen, GetWindowDC, BeginPaint, EndPaint, TabbedTextOutA, DrawTextA, GrayStringA, SetRectEmpty, LoadAcceleratorsA, TranslateAcceleratorA, ReleaseCapture, GetDesktopWindow, DestroyMenu, LoadMenuA, SetMenu, ReuseDDElParam, UnpackDDElParam, InvalidateRect, BringWindowToTop, LoadStringA, GetClassNameA, PtInRect, GetSysColorBrush, InflateRect, IsDialogMessageA, PostMessageA, UpdateWindow, SendDlgItemMessageA, MapWindowPoints, GetSysColor, PeekMessageA, DispatchMessageA, GetFocus, SetFocus, AdjustWindowRectEx, ScreenToClient, EqualRect, DeferWindowPos, BeginDeferWindowPos, CopyRect, EndDeferWindowPos, CheckMenuItem, GetTopWindow, GetCapture, WinHelpA, GetClassInfoA, RegisterClassA, GetMenu, GetMenuItemCount, GetSubMenu, GetMenuItemID, GetWindowTextLengthA, GetWindowTextA, GetDlgCtrlID, CreateWindowExA, SetWindowsHookExA, CallNextHookEx, GetClassLongA, SetPropA, UnhookWindowsHookEx, GetPropA, CallWindowProcA, RemovePropA, DefWindowProcA, GetMessageTime, GetMessagePos, GetForegroundWindow, SetForegroundWindow, GetWindow, SetWindowPos, RegisterWindowMessageA, OffsetRect, IntersectRect, SystemParametersInfoA, GetWindowPlacement, GetNextDlgTabItem, EndDialog, GetActiveWindow, SetActiveWindow, IsWindow, CreateDialogIndirectParamA, DestroyWindow, GetDlgItem, GetParent, GetLastActivePopup, IsWindowEnabled, MessageBoxA, LoadIconA, UnregisterClassA, HideCaret, ShowCaret, ExcludeUpdateRgn, DrawFocusRect, CharUpperA, wsprintfA, LoadImageA, GetDC, GetWindowLongA, SetWindowLongA, LoadBitmapA, EnableMenuItem, ShowWindow, MoveWindow, IsWindowVisible, SetWindowTextA, KillTimer, LoadCursorA, SetCursor, IsIconic, GetClientRect, DrawIcon, GetSystemMetrics, GetWindowRect, SetTimer, EnableWindow, DefDlgProcA, CharNextA, IsWindowUnicode, SendMessageA, GetKeyState
    5. > GDI32.dll: GetStockObject, SetBkMode, SetMapMode, SetViewportOrgEx, OffsetViewportOrgEx, SetViewportExtEx, ScaleViewportExtEx, SetWindowExtEx, ScaleWindowExtEx, IntersectClipRect, MoveToEx, LineTo, SelectObject, DeleteObject, GetDeviceCaps, CreatePen, CreateSolidBrush, PtVisible, RectVisible, TextOutA, ExtTextOutA, Escape, RestoreDC, SaveDC, DeleteDC, PatBlt, SetBkColor, SetTextColor, GetClipBox, SwapBuffers, ChoosePixelFormat, SetPixelFormat, GetObjectA, CreateCompatibleDC, CreateBitmap, BitBlt, CreateDIBitmap, GetTextExtentPointA, CreateCompatibleBitmap
    6. > comdlg32.dll: GetFileTitleA
    7. > WINSPOOL.DRV: DocumentPropertiesA, OpenPrinterA, ClosePrinter
    8. > ADVAPI32.dll: RegCloseKey, RegCreateKeyExA, RegOpenKeyExA, RegSetValueExA
    9. > SHELL32.dll: DragFinish, DragQueryFileA
    10. > COMCTL32.dll: -, ImageList_Destroy
    11. > WSOCK32.dll: -, -, -, -, -, -, -, -, -, -, -, -
     
  4. wvlg

    wvlg New Member

    Публикаций:
    0
    Регистрация:
    25 сен 2007
    Сообщения:
    44
    А удаленная машина не может отвечать за отсчет времени?
     
  5. GIP

    GIP New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2008
    Сообщения:
    2
    А возможно вы и правы, удаленная DLL тоже импортирует функции времени. А я не обратил поначалу внимания, увлекся этим шухером с шифрованием реестра в клиенте и т.д.
    Вот собсно DLL: http://ifolder.ru/9435637
    Сам сервер занимает DVD.
    Ушел экспериментировать...