перехват графики

Тема в разделе "WASM.WIN32", создана пользователем Mayor, 21 дек 2004.

  1. Mayor

    Mayor New Member

    Публикаций:
    0
    Регистрация:
    3 май 2004
    Сообщения:
    7
    Адрес:
    Ekb
    Подскажите как из окна игрушки получить участок изображения ( как называется документация и какие API функции искать и из какой dll) и как определится с bpp и размерами экрана



    На данном этапе я в тупике мне показали работающий листинг, там на С струтуры LPDIRECTDRAW... такого в MSDN нет, скачал DirectX SDK потом мне правда сказали что DirectDraw вывели из его состава. на поиске в MSDN на lpdirectdraw7 тоже что то не то сыплется.
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Из конкретной игрушки, или вообще?



    DirectDraw наиболее полно описан в DX7 SDK, хотя в MSDN (2003APR) тоже кое-что есть, просто микрософт любят тарабарщину мешающую поиску:



    typedef struct IDirectDraw FAR *LPDIRECTDRAW;



    Из "API функций" толко DirectDrawCreate(Ex) используется, а дальше.. пойдут COM интерфейсы ;(

    Определиться с bpp и размерами экрана поможет IDirectDraw::GetDisplayMode
     
  3. Mayor

    Mayor New Member

    Публикаций:
    0
    Регистрация:
    3 май 2004
    Сообщения:
    7
    Адрес:
    Ekb
    из CS просто я видел проги способные перевести курсор в точку экрана сопределенным цветом, но похоже я на такое не способен, а так то замутка полезная для реализации любого бота



    Ладно спасибо за совет пока мне остается только header изучать у меня MSDN July 2003 там уже DirectX из ее состава вывели. А DirectX SDK у меня 9с, DirectDraw уже вроде говорят в составе 8 не было



    Но в любом случае указаные API мне сильно облегчат поиск, и может настанет день когда я начну изучать COM интерфейс :)
     
  4. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    CS == CounterStrike ? Я эту штуку не видел (гы-гы, серьёзно)



    Для начала определись с версией интерфейса - см. DirectDrawCreate(Ex).
    Код (Text):
    1.  
    2. HRESULT WINAPI DirectDrawCreateEx(
    3.   GUID FAR *lpGUID,        
    4.   LPVOID *lplpDD,          
    5.   REFIID iid,              
    6.   IUnknown FAR *pUnkOuter  
    7. );


    Смотри адрес передаваемый 2м параметром:



    (если интерфейс < 7, то будет DirectDrawCreate - то же, но 3го параметра iid нет)



    Далее, будут вызововы методов этого интерфейса, наиболее интересен из них IDirectDraw::CreateSurface (он есть в MSDN). Таких вызовов может быть несколько, интересует создающий PRIMARYSURFACE.

    В ddraw.h находишь объявление интерфейса - CreateSurface это 7й по счёту метод. Значит, вызов будет чем-то вроде этого:
    Код (Text):
    1.  
    2.   mov     eax, [esi+1C]     ; <- этот же адрес был 2м параметром DirectDrawCreate
    3.   mov     [dword epb-8], 1  ; DDSURFACEDESC::dwFlags = DDSD_CAPS
    4.   push    edi                    
    5.   lea     ebx, [esi+20]     ; по этому адресу запишется указатель на интерфейс IDirectDrawSurface, он и нужен.
    6.   push    ebx
    7.   lea     edx, [epb-С]      ; адрес структуры DDSURFACEDESC (lpDDSurfaceDesc)
    8.   push    edx                    
    9.   mov     [dword ebp+5c], 200 ; DDSCAPS_PRIMARYSURFACE 0x00000200l
    10.   mov     ecx, [eax]       ; вызов метода COM интерфейса
    11.   push    eax
    12.   call    near [ecx+[b]18[/b]]    ; 18h = 7*4 (7й метод в VTable)          
    13.   test    eax, eax         ; как правило всегда есть праверка ошибок, там могут быть полезные текстовые подсказки ;)
    14.   je      short 004012EE


    Теперь, когда есть адрес указателя на первичную поверхность, можно делать IDirectDrawSurface::Lock и читать содержимое памяти.

    Где-нибудь в районе вызова IDirectDrawSurface::Flip (ищется по аналогии с предыдущим, бряки на чтение из "адреса указателя на первичную поверхность" помогут)



    А вообще, реальные адреса методов в ddraw.dll можно определить и другим путём - сам создаёшь нужные интерфейсы и читаешь из VTable адреса нужных методов. Потом туды ставиши бряки, хуки...
     
  5. Mayor

    Mayor New Member

    Публикаций:
    0
    Регистрация:
    3 май 2004
    Сообщения:
    7
    Адрес:
    Ekb
    вообщето ты сильно переоценил мои способности в реверсинге, но в любом случае ты показал мне путь по которому нада искать инфу, и вроде я начал понимать что такое com интерфейс



    чертовски сложно



    зы-зы будет чем заняться на все выходные :)