Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2011, 07:50   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Вопрос Как перехватить DirectX 8...

Вот тут не кто не отвечает, помогите ребята:
http://programmersforum.ru/showthread.php?t=157926
VintProg вне форума Ответить с цитированием
Старый 22.06.2011, 09:22   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

А вот тут написано, чего нельзя делать
http://www.programmersforum.ru/rules.php
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 22.06.2011, 12:03   #3
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Да блин все молчат фик кто скажет как перехватить Directx 8 и вывести спрайт свой в приложение игры...
VintProg вне форума Ответить с цитированием
Старый 22.06.2011, 14:55   #4
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Немного не понял, может ты имеешь ввиду перехватить определенную DirectX функцию в приложении?
coNsept вне форума Ответить с цитированием
Старый 22.06.2011, 14:56   #5
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Да! Перехватить функцию, и вывести спрайт.
VintProg вне форума Ответить с цитированием
Старый 22.06.2011, 15:06   #6
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

1) http://www.rsdn.ru/article/baseserv/IntercetionAPI.xml
2) Вот как я перехватываю gl функцию, в принципе не важно суть одна и та же.

Код:
const int MAX_OBJ = 50;

#pragma pack(push, 1)
struct Trampoline 
{
 BYTE Push;
 DWORD Addr; 
 BYTE Ret;
};
#pragma pack(pop)

struct MyBuffer
{
 BYTE lpBuffer[6];
};

Trampoline MyJmp[MAX_OBJ];
MyBuffer Buf[MAX_OBJ];
DWORD nBytesRead;

typedef void (APIENTRY *ptr_glEnable)(GLenum);
ptr_glEnable glEnable_Real = (ptr_glEnable)&glEnable // Ну или адрес можно указать явно

void Intercept_MyFoo(DWORD dwMyFoo_Real, DWORD dwMyFoo_Fake, int iObj) {
 // ----
 MyJmp[iObj].Push = 0x68;
 MyJmp[iObj].Addr = dwMyFoo_Fake; 
 MyJmp[iObj].Ret  = 0xC3;
 // ----
 ReadProcessMemory(GetCurrentProcess(), (void*)dwMyFoo_Real, (void*)&Buf[iObj].lpBuffer, 6, &nBytesRead);
 WriteProcessMemory(GetCurrentProcess(), (void*)dwMyFoo_Real, (void*)&MyJmp[iObj], sizeof(MyJmp[iObj]), &nBytesRead);
}

BOOL APIENTRY glEnable_Fake(GLenum cap) 
{
 WriteProcessMemory(GetCurrentProcess(), (void*)glEnable_Real, (void*)&Buf[0].lpBuffer, 6, &nBytesRead);
 // Например включаю туман
 ((BOOL (APIENTRY*)(GLenum cap))glEnable_Real)(GL_FOG); 
 // Еще какие-нить твои действия
 WriteProcessMemory(GetCurrentProcess(), (void*)glEnable_Real, (void*)&MyJmp[0], 6, &nBytesRead);
 return TRUE;
}

void Hook_MyInterceptFoo() 
{
 Intercept_MyFoo((DWORD)glEnable_Real, (DWORD)glEnable_Fake, 0);
 Intercept_MyFoo((DWORD)someAnotherFoo_Real, (DWORD)yourFoo_Fake, 1);
}

Последний раз редактировалось coNsept; 22.06.2011 в 15:13.
coNsept вне форума Ответить с цитированием
Старый 22.06.2011, 16:31   #7
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Спасибо тебе!!!
VintProg вне форума Ответить с цитированием
Старый 22.06.2011, 16:36   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тока аккуратнее, там всетаки интерфейсы, а не статические функции.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 23.06.2011, 05:06   #9
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Вот по пробуйте скомпилировать:
http://gtaexe.3dn.ru/gtahud.rar
VintProg вне форума Ответить с цитированием
Старый 23.06.2011, 12:54   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну скомпилировал, правда не уверен работает ли оно(пришлось одно изменение вносить, но сутя по отсутствию ошибок, так оно должно было быть)
Вложения
Тип файла: rar sahud_bin.rar (2.77 Мб, 10 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить DirectX 8... VintProg Visual C++ 0 19.06.2011 14:46
Как перехватить событие формы (Движение) ImmortalAlexSan Общие вопросы Delphi 12 02.01.2011 11:36
как перехватить чужой процесс Assemblerru Win Api 8 28.09.2010 20:07
Как перехватить обращения к принтеру? Classic Win Api 2 16.08.2007 11:07
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12