SiriusED Опубликовано 15 августа, 2014 Поделиться Опубликовано 15 августа, 2014 Собственно сабж.Вот код на пример:bool APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved){if (dwReason == DLL_PROCESS_ATTACH){ LPDIRECT3DDEVICE9 pDevice; pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28; If (pDevice is D3DDevice) // Типа вот так}} Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 15 августа, 2014 Поделиться Опубликовано 15 августа, 2014 /*---------------------------------------------------------------------------*/Привет!Исходя из [документации], функция CreateDevice должна вернуть D3D_OK в случае успеха. Это если я тебя правильно понял. Если не совсем правильно и это уже готовый адрес d3ddev, что (в моём понимании) является волшебством и магией, то попробуй обратиться к какому-нибудь методу - если не получится, значит что-то пошло не так./*---------------------------------------------------------------------------*/ Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 15 августа, 2014 Автор Поделиться Опубликовано 15 августа, 2014 Да, все верно Вы поняли. Я просто тут сейчас раздупляюсь с темой DX hook'а, И нашел вот этот вот код, но он почему-то не работает, ну вернее я знаю почему он не работает а именно потому, что тут указатель на девайс задается статически "pDevice = (PDIRECT3DDEVICE9) *(int*) 0x21BEC28; ". Черт знает как у того чувака он работал, может быть он под его игру суто его подобрал просто я хз.Ну одним словом я заменил эту часть кода на поиск адреса девайса по паттерну(ну который в ольке делается), паттерн тоже нашел в инете кстати. ну и во общем после этого все заработало. И я на конец то хоть чуток догнал каким образом это все работает, а надо было просто найти рабочий код и прочесть его а не читать всякие гамнотуториалы...Во общем на счет функции спасибос, попробую все равно этот способ.Ну и еще пару вопросов по этой теме:1. Правильно ли я понял что существует всего лишь два способа найти адрес DX девайса, а именно через создание своего девайса в нужном процессе, ну и собственно по паттерну в d3d модуле нужного процесса или есть еще какие способы?2. И я вот сейчас сделал поиск по паттерну для d3d9 а есть у кого для d3d10 и 11 может паттерны, очень был бы признателен за них. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 15 августа, 2014 Поделиться Опубликовано 15 августа, 2014 /*---------------------------------------------------------------------------*/По поводу пары вопросов:1. По паттерну.2. Подмена оригинальной d3d9.dll во всей системе.3. Подмена d3d9.dll в папке с программой.4. Загрузчик для программы.5. Создание своего девайса в нужном процессе (или в своём) и поиск по этому адресу - в куче или прочими вариантами этого же способа.Если нашёл статический адрес в коде, то скорее всего этот код адаптирован под конкретную игру./*---------------------------------------------------------------------------*/ Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 15 августа, 2014 Автор Поделиться Опубликовано 15 августа, 2014 Да, подменять d3d9.dll мне предлагали тоже на одном форуме...Ну а так в принципе понял все кроме "4. Загрузчик для программы.". И как вижу оригинального способа нету в любом случае нужно сначала узнавать версию DX, и потом уже исходя из этой информации искать адрес устройства. Ну в таком случае 5й вариант так ниче выглядит... Просто хочу сделать информен аля RivaTuner overlay что б его было видно во всех играх независимо от версии используемых ими DX.И да я тоже так думал что статик адресс был запилен именно под ту игру что он демонстрировал. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 15 августа, 2014 Поделиться Опубликовано 15 августа, 2014 -Ставить глобальный хук SetWindowsHookEx на запуск процесса-Запускаем игру-Выбираем процесс по названию или сигне в его памяти-Ищем там dll-ку какой-либо версии-Создаешь пустышку версии D3DX и ищешь по vtable адрес EndSceneIDirect3DDevice9* pTempDev = ...;const int EndSceneIndex = 26 (?);typedef HRESULT (IDirect3DDevice9::* EndSceneFunc)( void );BYTE* pVtable = reinterpret_cast<void*>( pTempDev );EndSceneFunc = pVtable + sizeof(void*) * EndSceneIndex;- Патчишь EndScene на свою функцию c рисованием и затем вызываешь EndScene ориниальную- Под разные версии d3dx в том числе 32 разрядные или 64 разрядные писать дополнительные условияОб этом способе и также кратко о других можно найти здесь или в поисковике в Интернете. Надо просто хотеть найти и все найдешь. Ничего спрашивать не придется, делать молча и все получится. День, два, три... ну не знаю неделю добиться цели... все получится. Примеры в сети можно найти, они рабочие. Самостоятельно разобраться и все. Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 15 августа, 2014 Автор Поделиться Опубликовано 15 августа, 2014 Не ну я собственно так и делаю, особенно хорошо получается когда есть реально рабочий код, мне реально проще код читать, изменять и смотреть результат чем читать туториалы...Но все равно иногда что б прямо наверняка уже закрепить инфу надо спросить у профи Ну а так ищу инфу на забугровых ресурсах нашел несколько форумов а один так во обще чисто по директу и хукам по нему... так что по техоньку вьезжаю в тему...Просто не понимая ничерта очень сложно так вот сразу разобратся в терминах итд, А обычно все видосы и мануалы делаются что б показать как умело и легко их авторы умеют делать ту или иную вещь, но еденицы из них перед написанием кода объясняют логику работы и даже рисуют картины(пример: Keng) что б не знающий человек понял не как писать код а каким образом это все работает, вот этим людям огроменное спасибо, просто от души.Ну и по теме еще, во общем на данный момент написал dll на C++ которая инжектится в D3D9 приложение и выводит там заданный текст по координатам. И такой вопрос, а как мне эти значения изменить, на пример что б значение выводимой строки не было статическим а данные брались от куда то и выводились, ну если грубо так сказать то как мне управлять этой dll'кой то? Одно что я придумал пока что это читать данные из файла или регистров, но это же не то я уверен...Инфы даже пока по этому не искал так что это стандартная тема и полно инфы в гугле извеняйте.. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 17 августа, 2014 Поделиться Опубликовано 17 августа, 2014 /*---------------------------------------------------------------------------*/А что значит "откуда-то"? Ты волен задавать координаты и текст самостоятельно, переменными, например. А откуда при этом их брать - твоё дело. Не совсем понял, что ты имеешь ввиду./*---------------------------------------------------------------------------*/ Ссылка на комментарий Поделиться на другие сайты Поделиться
SiriusED Опубликовано 21 августа, 2014 Автор Поделиться Опубликовано 21 августа, 2014 Тема более неактуальна, все порешал в другой теме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения