Подскажите как из окна игрушки получить участок изображения ( как называется документация и какие API функции искать и из какой dll) и как определится с bpp и размерами экрана На данном этапе я в тупике мне показали работающий листинг, там на С струтуры LPDIRECTDRAW... такого в MSDN нет, скачал DirectX SDK потом мне правда сказали что DirectDraw вывели из его состава. на поиске в MSDN на lpdirectdraw7 тоже что то не то сыплется.
Из конкретной игрушки, или вообще? DirectDraw наиболее полно описан в DX7 SDK, хотя в MSDN (2003APR) тоже кое-что есть, просто микрософт любят тарабарщину мешающую поиску: typedef struct IDirectDraw FAR *LPDIRECTDRAW; Из "API функций" толко DirectDrawCreate(Ex) используется, а дальше.. пойдут COM интерфейсы ;( Определиться с bpp и размерами экрана поможет IDirectDraw::GetDisplayMode
из CS просто я видел проги способные перевести курсор в точку экрана сопределенным цветом, но похоже я на такое не способен, а так то замутка полезная для реализации любого бота Ладно спасибо за совет пока мне остается только header изучать у меня MSDN July 2003 там уже DirectX из ее состава вывели. А DirectX SDK у меня 9с, DirectDraw уже вроде говорят в составе 8 не было Но в любом случае указаные API мне сильно облегчат поиск, и может настанет день когда я начну изучать COM интерфейс
CS == CounterStrike ? Я эту штуку не видел (гы-гы, серьёзно) Для начала определись с версией интерфейса - см. DirectDrawCreate(Ex). Код (Text): HRESULT WINAPI DirectDrawCreateEx( GUID FAR *lpGUID, LPVOID *lplpDD, REFIID iid, IUnknown FAR *pUnkOuter ); Смотри адрес передаваемый 2м параметром: (если интерфейс < 7, то будет DirectDrawCreate - то же, но 3го параметра iid нет) Далее, будут вызововы методов этого интерфейса, наиболее интересен из них IDirectDraw::CreateSurface (он есть в MSDN). Таких вызовов может быть несколько, интересует создающий PRIMARYSURFACE. В ddraw.h находишь объявление интерфейса - CreateSurface это 7й по счёту метод. Значит, вызов будет чем-то вроде этого: Код (Text): mov eax, [esi+1C] ; <- этот же адрес был 2м параметром DirectDrawCreate mov [dword epb-8], 1 ; DDSURFACEDESC::dwFlags = DDSD_CAPS push edi lea ebx, [esi+20] ; по этому адресу запишется указатель на интерфейс IDirectDrawSurface, он и нужен. push ebx lea edx, [epb-С] ; адрес структуры DDSURFACEDESC (lpDDSurfaceDesc) push edx mov [dword ebp+5c], 200 ; DDSCAPS_PRIMARYSURFACE 0x00000200l mov ecx, [eax] ; вызов метода COM интерфейса push eax call near [ecx+[b]18[/b]] ; 18h = 7*4 (7й метод в VTable) test eax, eax ; как правило всегда есть праверка ошибок, там могут быть полезные текстовые подсказки ;) je short 004012EE Теперь, когда есть адрес указателя на первичную поверхность, можно делать IDirectDrawSurface::Lock и читать содержимое памяти. Где-нибудь в районе вызова IDirectDrawSurface::Flip (ищется по аналогии с предыдущим, бряки на чтение из "адреса указателя на первичную поверхность" помогут) А вообще, реальные адреса методов в ddraw.dll можно определить и другим путём - сам создаёшь нужные интерфейсы и читаешь из VTable адреса нужных методов. Потом туды ставиши бряки, хуки...
вообщето ты сильно переоценил мои способности в реверсинге, но в любом случае ты показал мне путь по которому нада искать инфу, и вроде я начал понимать что такое com интерфейс чертовски сложно зы-зы будет чем заняться на все выходные