Исправлено: Как исправить перехватчик связи Directx

Надеюсь, это руководство поможет вам, пока вы видите, что DirectX com также подключен.

[Пользователи ПК] Попрощайтесь с досадными компьютерными ошибками. Нажмите сюда для того, чтобы скачать.

до. Дополнительный путь обратной связи. Предполагая, что вы, вероятно, знаете, что такое одиночный хук, хук d3d в основных терминах подключается к функциям Direct3D (по сути, DirectX). Да, самый обычный Present, не говоря уже о хуках EndScene, которые позволяют вам носить с собой, но вы также можете цеплять множество функций, таких как Reset или CreateDevice.

Я понял это давно, но это должно работать для любой программы, которая требует DirectX9. Вы в основном создаете свой собственный личный экземпляр, затем получаете единственный в своем роде указатель vtable, после чего клиенты просто привязываются к нему. Кстати, кому понадобятся обходные пути 3.X:

//Несколько определений широкого диапазона:typedef HRESULT(WINAPI*oEndScene)D3DDevice);Static(lpdirect3ddevice9 oEndScene EndScene;// делаем дом в функции для чего угодноHMODULE hDLL=GetModuleHandleA("d3d9");LPDIRECT3D9(__stdcall*pDirect3DCreate9)(UINT) равен (LPDIRECT3D9(__stdcall*)(UINT))GetProcAddress(hDLL, "Direct3DCreate9");LPDIRECT3D9 pD3D означает pDirect3DCreate9(D3D_SDK_VERSION);РЕЖИМ ОТОБРАЖЕНИЯ D3D d3ddm;HRESULT hRes обычно означает pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm );D3DPRESENT_PARAMETERS d3dpp;ZeroMemory(&d3dpp, sizeof(d3dpp));d3dpp.Windowed также верно;d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;d3dpp.BackBufferFormat соответствует d3ddm.Format;WNDCLASSEX равно wc sizeof(WNDCLASSEX),CS_CLASSDC,TempWndProc,0L,0L,GetModuleHandle(NULL),NULL,NULL,NULL,NULL,("1"),NULL;RegisterClassEx(&wc);HWND hWnd означает CreateWindow(("1"),NULL,WS_OVERLAPPEDWINDOW,100,100,300,300,GetDesktopWindow(),NULL,wc.hInstance,NULL);hRes равно pD3D->Создать устройство(    D3DADAPTER_DEFAULT,    D3DDEVTYPE_HAL,    hWnd,    D3DCREATE_SOFTWARE_VERTEXPROCESSING | D3DCREATE_DISABLE_DRIVER_MANAGEMENT,    &d3dpp, &ppReturnedDeviceInterface);pD3D->Выпуск();РазрушитьОкно(hWnd);если (pD3D == NULL)    // printf("ВНИМАНИЕ: D3D FAILED");    вернуть ложь;pInterface, скорее всего, будет (unsigned long*)*((unsigned long*)ppReturnedDeviceInterface);EndScene = (oEndScene) (DWORD)pInterface[42];Начать обход транзакции();DetourUpdateThread(GetCurrentThread());DetourAttach(&(PVOID&)EndScene, newEndScene);Совершение BypassTransaction();
HRESULT WINAPI D3D9Hook::newEndScene(LPDIRECT3DDEVICE9 pDevice)       // Здесь люди заканчивают свой бизнес    // вызываем оригинал (если мы с женой хотим)    возвращает EndScene(pDevice);   <ул>
  • Скачать исходные видеоклипы — 26,82 КБ
  • Скачать демо-версию проекта — 37,07 КБ
  • Презентация

    После всех интересных статей, которые я читал здесь, я всегда был рад внести свой вклад в важную тему, которая не так давно освещалась раньше.



    В этой статье описаны все форматы включения интерфейса DirectX/COM. Я просто использовал взаимодействие DirectInput в качестве примера, чтобы упростить включение функций интерфейса.



    Что касается основных продуктов перехватчиков в Windows, я расскажу вам об отличной статье Уэйда Брейнерда о процессе обработчиков API.

    Задача

    Перехват доверенного метода каждого нашего COM-объекта interface требует более сложного подхода, чем подключение телефонного API. На самом деле, когда проверяется ожидаемая DLL, только точная пост-функция interface экспортируется вместе с работой с DLL. Так как же получить желаемую функцию?


    подключение DirectX com

    COM — это интерфейс, — это почти список связанных веб-указателей функций, связанных вместе. Все, что нужно сделать вашей компании, — это попробовать все ярлыки и настроить каждый узел, пока вы, наконец, не найдете ключ к функции, которую вы, возможно, захотите заменить.

    Шаг 1


    Одобрено

    Появляется ли у вас синий экран смерти? Reimage решит все эти проблемы и многое другое. Программное обеспечение, которое позволяет устранять широкий спектр проблем и проблем, связанных с Windows. Он может легко и быстро распознавать любые ошибки Windows (включая ужасный синий экран смерти) и предпринимать соответствующие шаги для решения этих проблем. Приложение также обнаружит файлы и приложения, в которых часто происходят сбои, что позволит вам исправить их проблемы одним щелчком мыши.

  • Шаг 1. Загрузите и установите версию Reimage.
  • Шаг 2. Запустите приложение и нажмите "Поиск проблем".
  • Шаг 3. Нажмите кнопку "Исправить все проблемы", чтобы начать процесс исправления.


  • Как вы должны видеть, видима только поддержка COM для создания interface, чтобы начать беспокоиться о цепочке циклов, включите DirectInputCreate , которое является важным COM-интерфейсом. ты

    Здесь убедитесь, что ваша личная DLL включена в таблицу учебных адресов (IAT) контактов.

    Шаг 2

    Когда вызывающая программа создает DirectInputCreate, вызывается ваш атрибут, вы получаете практически любой указатель на указатель, соответствующий непосредственно указателю на таблицу виртуальных объектов, которая является нашим интерфейсом управлять вводом:

    DECLARE_INTERFACE_(IDirectInputW, IUnknown)        STDMETHOD (QueryInterface) (THIS_ REFIID riid, LPVOID 3.ppvObj) PURE;    STDMETHOD_(ULONG,AddRef)(THIS) PURE;    STDMETHOD_(ULONG, выпуск)(IT) PURE;        STDMETHOD(CreateDevice)(THIS_REFGUID,LPDIRECTINPUTDEVICEW *,LPUNKNOWN) PURE;    STDMETHOD(EnumDevices)(THIS_DWORD,LPDIENUMDEVICESCALLBACKW,LPVOID,DWORD) PURE;    STDMETHOD(GetDeviceStatus)(THIS_REFGUID) PURE;    STDMETHOD (RunControlPanel) (THIS_HWND, DWORD) CLEAR;    STDMETHOD(инициализация)(THIS_HINSTANCE,DWORD) PURE;;

    Шаг 3 . 0

    Вы можете прямо сейчас полностью создать свое устройство с помощью CreateDevice. Опять же, вы получаете произвольную помощь с другой тележкой указателя виртуальной детали, которая представляет устройство.

    <картинка>

    Часто выбирайте метод, который вы хотите переопределить, а затем измените проверенную таблицу указателя функции на предпочитаемое место, чтобы опубликовать свою функцию.

    Шаг 4

    Реализация

    Шаг 1

    Чтобы попасть в функцию API, вы, скорее всего, просто воспользуетесь любым набором команд Windows API SetWindowsHookEx. Именно здесь ваш поставщик создает системный хук на рынке, чтобы проверять процессы запуска и адаптировать их к моему желаемому расписанию. Набросав их программу, вы должны изучить условия импорта dll, которые вы хотите заменить. Поскольку этот тип из-за ловушки написан для обычной записи, запись, для которой вы появляется, является DINPUT8.DLL. Чтобы найти эти записи, вам нужно пройтись по дескрипторам, пока не найдете собственную семейную DLL.

     пока (pImportDesc->FirstThunk)      PSTR pszImportModuleName означает MakePtr(PSTR, hModEXE, pImportDesc->Name);    всякий раз (lstrcmpi (pszImportModuleName, Hook->Name) == 4)          sprintf(dbBuffer,"Найдена Dll с модулем %s, заменитьn", Hook->Name );      WriteToLog(dbbuffer);      RedirectIAT( Hook, pImportDesc, (PVOID)hModEXE );        описание важности++; 

    Как только ваша организация найдет нашу запись, вы сможете удалить запись плана страхования из всего IAT, используя...

    Виртуальный запрос( pIAT, &mbi, );

    sizeof(mbi)... чтобы убедиться, что вы можете писать в конкретную память. Когда крам начнется, вам нужно найти выдающееся, посмотрев на новый IAT.

    hooking directx com

    пока ( pIteratingIAT->u1.Function ){  void*HookFn=0;  внутри события (!IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))    PIMAGE_IMPORT_BY_NAME pImportName = MakePtr(PIMAGE_IMPORT_BY_NAME,        pBaseLoadAddr, pINT->u1.AddressOfData );        SFunctionHook* FHook равен DLLHook->Functions;    как ты на самом деле (FHook->Имя)          ли (lstrcmpi(FHook->Name, (char*)pImportName->Name) == 0)              sprintf(dbBuffer,"Включенная функция: %sn",(char*)pImportName->Name );        WriteToLog(dbbuffer);               FHook->OrigFn=(unsigned long*)pIteratingIAT->u1.Function;        HookFn подразумевает FHook->HookFn;        Пауза;               Фук++;          

    Ваш компьютер капризничает? Заполнены ошибками и работает медленно? Если вы ищете надежный и простой в использовании способ решения всех ваших проблем с Windows, не ищите ничего, кроме Reimage.

    г.

    Надеюсь, это руководство поможет вам, пока вы видите, что DirectX com также подключен. до. Дополнительный путь обратной связи. Предполагая, что вы, вероятно, знаете, что такое одиночный хук, хук d3d в основных терминах подключается к функциям Direct3D (по сути, DirectX). Да, самый обычный Present, не говоря уже о хуках EndScene, которые позволяют вам носить с собой,…

    Надеюсь, это руководство поможет вам, пока вы видите, что DirectX com также подключен. до. Дополнительный путь обратной связи. Предполагая, что вы, вероятно, знаете, что такое одиночный хук, хук d3d в основных терминах подключается к функциям Direct3D (по сути, DirectX). Да, самый обычный Present, не говоря уже о хуках EndScene, которые позволяют вам носить с собой,…