научите делать читы

Тема в разделе "Общение для CrossFire", создана пользователем Тоха Плюхин, 31 дек 2012.

Статус темы:
Закрыта.
  1. Оффлайн

    Тоха Плюхин ст. рядовой

    На форуме с:
    21 ноя 2012
    Сообщения:
    4
    Симпатии:
    7
    Баллы:
    2
    хочу научится делать читы помогите что сделать надо что скачать плизз завалю симпатиями и тд.
     
  2.  
  3. Оффлайн

    ⓈⓌⒶⒼ™

    На форуме с:
    23 дек 2012
    Сообщения:
    1.044
    Симпатии:
    1.422
    Баллы:
    640
    Пол:
    Мужской
    skype:
    barsuk690
    Хорошо, таким существам, что это было предложено, я решил написать это. Я надеюсь, это поможет кому-то и если нет, то извините первых, и для большинства, этот учебник предназначен только для DirectX 9, и я гарантирую вам, что не будет работать и для других версий без некоторых крупных редактирования в обертку. В конце этого я также будет включать некоторые инструкции о том, как превратить эту вводят крючок в оболочку до точки, где можно просто скомпилировать его как d3d9.dll и поместите его в каталог игры и запустить его с помощью этого метода тоже.
    (Я предлагаю "обертку" метод, поскольку большинство обмануть обнаружений не находят его как взломать из-за некоторых машинах нуждающиеся d3d9.dll в этой папке, чтобы работать.)

    Я пишу это руководство для работы с C + +, но вы можете перевести его на что когда-либо язык, который вы хотите запрограммировать в качестве это довольно простой и не слишком крупный.Обертка, где большая часть работы приходит играть так что вам придется сделать это по своему усмотрению. Извините, я не знаю других языков вне С + +, MASM, и VB2010 так что вы можете самостоятельно при переводе.

    Часть 1. Введение и такие
    Прежде чем мы начнем, позвольте мне переправиться, что это делает и как он работает. Во-первых, это основной метод учебник через инъекции. Это нужно, создает удаленный поток в процессе в качестве отправной и вводит свой ​​крюк и вызывает его DllMain (или основная функция DLL) и крючки Direct3D9Create функции. Оттуда, когда игру или приложение DX вы используете вызовы Direct3D9Create, он вызовет ваш перехваченной функции, а не оригинала. Когда это произойдет, вместо того чтобы использовать стандартные функции DirectX, он будет использовать оболочку "прокси" функций, которые были изменены с вашими потребностями и тому подобное. Это позволяет добавить в игру или приложение, например, каркасные, цветные примитивов и т.д. Такие вещи, которые вы видите в хаки и так далее.

    Вместе с тем, он открывает окно для любых других дополнительных функций (ы), вы можете придумать сами.Границы маленькие, только то, что вы в состоянии сделать и такой.

    Этот учебник будет объяснить, как сделать основы, создать крюк, показать пример обертки, и объяснить несколько небольших деталей, вместе с крючком. Я буду включать полный пример, как хорошо, что я найду некоторые случайные бесплатная программа, чтобы показать вам, как это работает, и таких в а. Я добавлю каркасном режиме, чтобы клавиши переключения, чтобы показать вам, как добавить некоторые из Ваших собственных код на крюк, а также

    Часть 2. Инструменты, необходимые
    Это небольшой список вещей, которые вы должны иметь возможность использовать этот учебник.
    Microsoft Visual Studio 2010
    Вам не нужно полную версию, чтобы создавать вещи, вы можете использовать издание выразить, насколько я знаю, чтобы скомпилировать некоторые вещи, если они не являются коммерческими (от того, что мне сказали). Если нет, то найти полную версию на сайт с варезом или хорошо, и купить его
    LINK MVC + +2010

    Microsoft Detours библиотека 1,5
    Скачать с MS
    Из-за неизвестной причине, создатели библиотеки Detours удалили функций, используемых в данном учебнике из новой версии. Таким образом, вы будете должны загрузить готовую версию здесь

    Microsoft DirectX 9.0c SDK
    И снова, еще один бесплатно скачать с Microsoft для разработчиков. (Разве они не так приятно программистов)
    LINK DirectX
    Примечание: Вы должны иметь реальную версию Windows, для этого скачать так что если вы не знаете, то Google вокруг для него. Я не думаю, что версия вопросам.
    Я использовал в июле 2005 г. обновления для большинства моих старых проектов, но установили Май 2009 версии и мои вещи по-прежнему отлично компилируется так как должно быть в порядке.

    Разные инструменты
    Мозга, терпение, готовы читать и изучать, кофе.

    Part 3. Installing The Tools
    Во-первых, все инструменты находятся в установщики, поэтому просто установите их на уважаемых местах. НО! Я предлагаю вам установить Visual Studio во-первых, как некоторые другие инструменты могут устанавливать переменные и пути для Вас, чтобы легко включить вещи в свой проект без много работы, дерьмо и тому подобное. Таким образом, установить VS2010, а затем других.

    VS2010 устанавливается по умолчанию C: Program FilesMicrosoft Visual Studio 82010
    DX SDK устанавливается по умолчанию C: Program FilesMicrosoft DirectX9 SDK (м / г)

    Добавление путей к VS2010
    Далее нам нужно добавить пути к дополнительной используемых файлов в объезд и DirectX SDK папки. Это, так что вам не придется долго задницу включают линии в вашем проекте, но вместо этого компилятор будет заглянуть внутрь сказал папки для включаемых файлов в проекте, в первую очередь. (Но будьте осторожны, это может привести к конфликтам, если вы используете более 1 версии то, что имеет те же имена файлов!)
    Откройте Visual Studio и перейти Сервис -> Параметры, затем щелкните + рядом с VC + +. Справа, щелкните раскрывающийся список в разделе "Каталоги Показать Для" и выберите "Включить файлы. Затем щелкните значок папки, а затем кнопку, которая появляется в списке, который говорит ". . ». и указать его в папку:
    C: Program FilesMicrosoft DirectX SDK (лето) включить
    (Изменение пути для любого из этих, если они отличаются)

    Затем выберите "Библиотека файлов с правого выпадающего списка, а затем щелкните значок папки снова, то '. . ». кнопку и укажите в нем:
    C: Program FilesMicrosoft DirectX SDK (летом) Libx86
    (Изменение пути, если они отличаются)

    Установка Detours
    Это обновленная шаг теперь из-за проблемы с Detours 2.1. Для установки Detours, вы могли бы поставить и detours.h. Библиотека файлов, где бы Вы не хотите в вашей системе, только не забудьте добавить их пути к VS2010 IDE, как вы делали для DX SDK выше. Или, как я буду использовать в этом уроке, сделать новую папку в папке проектов с других исходных файлах (. Ч. Срр-файлы) и назовите его 'Detours "и поместить файлы туда. Вероятно, это будет самый простой способ их использовать.

    Теперь ваш IDE должен быть настроен для использования DX SDK файлы с легкостью.
    Если у вас возникли вопросы, в дальнейшем, просто опубликовать ошибку и я постараюсь помочь вам в меру моих способностей.
    Я не Иисус, так что не ждите меня, чтобы исправить все ошибки.

    Часть 4. Создание Крюк

    Для начала крюка, создать новый проект DLL в VS2010. Чтобы сделать это, откройте VS2010. Затем переходим File -> New -> Project. Выберите VC + + из левого поля, то на правом выбрать Win32 Project. Выберите имя для вашего проекта и место для него.

    Примечание: для этого урока я буду называть моим dxhook и местоположение будет на моем рабочем столе. Я также предлагаю оставить Создать каталог для решения проверяется.

    Теперь мастера приложений Win32 должны придумать. Нажмите на параметры приложения слева, выберите DLL под типа приложения и выберите Пустой проект под Дополнительные опции. Нажмите кнопку Готово. Вы будете сбрасываться в IDE из VS2010 в новой пустой решение.

    Хотя у нас будет предварительно скомпилированных заголовков выключен, мы собираемся сделать stdafx.cpp / .h файлы в любом случае, так как они хорошо иметь за что включает в себя несколько файлов будет использовать. Так что давайте пойдем дальше и добавим основные файлы, которые мы будем использовать в этом.

    Для добавления новых файлов в проект, щелкните правой кнопкой мыши в обозревателе решений и выберите пункт Добавить, затем выберите пункт Новый элемент из подменю. Вы будете хотеть добавить 2 срр файлов и один файл заголовка. Итак:

    Add->New Item-> Header File, name it stdafx.h
    Add->New Item-> C++ File, name it stdafx.cpp
    Add->New Item-> C++ File, name it main.cpp

    Таким образом, вы должны иметь 3 файла в ваше решение сейчас.

    stdafx.cpp
    Давайте заботиться о файле легче первой. Открытое stdafx.cpp, дважды щелкнув его в обозревателе решений, чтобы открыть его в окне кода в центре IDE. Этот файл должен 1 строку кода.

    #include "stdafx.h"

    Сохраните и закройте этот файл сейчас. Вы не должны редактировать этот файл, когда-либо снова.

    stdafx.h
    Далее, позволяет заботиться о базовых потребностей в stdafx.h файл, который будет использоваться для запуска этого проекта. Так дважды щелкните на stdafx.h в Solution Explorer и позволяет добавить код.

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

    Первая строка кода мы хотим, чтобы добавить к stdafx.h это:

    #pragma once

    Это говорит компилятору только добавить этот файл один раз, чтобы проект, а не добавлять его каждый раз его просили. Это будет добавлен первым, поэтому никаких проблем возникнуть не должно при использовании этого параметра.

    Далее, мы хотим, чтобы сообщить компилятору, какая версия DXinput использовать для SDK, а также версии для Windows, чтобы остановить раздражает фигня, что происходит, когда это не автоматически обнаружен в компилятор. Чтобы сделать это добавить:

    #define DIRECTINPUT_VERSION 0x0900
    #define _WIN32_WINNT 0x0500

    Теперь, когда мы больше не нужны, определяет в этом файле, то мы готовы добавить наш включает в себя.Первая включает в стандартных окон включают файл, который используется для большинства программ, которые требуют определенных заголовков, которые являются производными внутри файла windows.h. Наряду с этим, мы должны будем tchar.h для некоторых макросов, а также работать с юникодом строк. (Да, я делаю свою работу в юникоде).

    Так кода мы хотим добавить это:

    #include <windows.h>
    #include <tchar.h>

    Теперь вы можете добавить объезды включают и такие здесь, но так как это нигде не используется, но в один файл, я предлагаю лишь добавить его к следующему файлу. Нет смысла давать всем доступ к нему, когда только одна вещь в ней нуждается.

    Сохранить и закрыть stdafx.cpp файл.

    main.cpp
    Затем откройте файл main.cpp. Это где подключение происходит. Мы будем использовать Detours для нашего подключения функции, потому что это бесплатный и простой в использовании. Я не гарантирую, что он будет незамеченным для вашей игры, поэтому будьте осторожны при тестировании.

    Первая строка кода мы хотим добавить в этот файл должен включать файл stdafx.h как она включает в себя, которые будут необходимы для этого файла. Так что добавьте:

    #include "stdafx.h"

    Далее мы должны добавить нашу включать и файл библиотеки для обходных путей. Я сам предпочитаю использовать прагма параметра Thats использоваться с Visual Studio, а затем добавив Библиотека файлов в свойствах проекта, но если вы не используете VS2010 просто удалить Прагма линию я собираюсь показать и добавить Библиотека файла в окне свойств в компилятор для проекта, чтобы включить, когда он связывает и объединяет.

    #pragma comment(lib, "Detours/detours.lib")
    #include "Detours/detours.h"

    Далее я предлагаю добавить эту переменную в верхней под включает в себя, объезды отслеживать дескриптор модуля упаковывают вам это нужно в другом месте кода. Я думаю, никто не должен когда-либо действительно в ней нуждается для своего вещь, а не быть в состоянии получить его другим способом, но это только он закончит.

    Таким образом, мы добавим:

    HANDLE HookHandle = NULL;

    Теперь нам нужно будет добавить батут для наших перехваченной функции, Direct3DCreate9. Так во-первых, вы, вероятно, говорить WTF является трамплином в кодировании? Его так же, как код пещеру. Когда вы что-нибудь через крюк Detours, код целевой функции помещается в батут и батуты адрес помещается в указатель цели. Как сказано в книге прочел мне, мы можем либо заменить целевой функции целиком или просто добавить на него.

    Код для батута выглядит следующим образом:

    DETOUR_TRAMPOLINE(IDirect3D9* WINAPI Real_Direct3DCreate9(UINT SDKVersion), Direct3DCreate9);

    Но так как нам нужно эту функцию, чтобы оставаться полезной после составлен мы должны сообщить компилятору не "кромсать" идентификатор. Для этого нам нужно, чтобы охватить наш код с внешних "C" код. Таким образом, наш целый блок кода для батута будет:

    #ifdef __cplusplus
    extern "C"
    {
    #endif
    DETOUR_TRAMPOLINE(IDirect3D9* WINAPI Real_Direct3DCreate9(UINT SDKVersion), Direct3DCreate9);
    #ifdef __cplusplus
    }

    Следующим шагом после создания батут будет заключаться в создании нашей новой функции для Direct3DCreate9. Что мы хотим сделать функцию вместо создания нормальных экземпляр Direct3D состоит в создании нового экземпляра нашего обертку. (Мы еще не написали оболочку, но тот еще дальше.) Итак, что мы собираемся нужно сделать, это есть функция думаю, что это создание нормальных экземпляр Direct3D, но вместо этого он создает новый экземпляр нашей обертку

    IDirect3D9* WINAPI Mine_Direct3DCreate9(UINT SDKVersion)
    {
    IDirect3D9* Direct3D = Real_Direct3DCreate9( SDKVersion );
    IDirect3D9* Mine_Direct3D = new Direct3D9Wrapper( Direct3D );
    return Mine_Direct3D;
    }

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

    Теперь это следующая часть является обязательным, но я предлагаю делать это, чтобы держать DllMain функция хороший, чистый и легко читается. Я создал, чтобы функции, которые вызываются из DllMain которых являются: HookAPI и UnhookAPI. Оба являются простыми функциями недействительным, так как они возвращают ничего. Для HookAPI мы имеем:

    void HookAPI()
    {
    DetourFunctionWithTrampoline( (PBYTE)Real_Direct3DCreate9, (PBYTE)Mine_Direct3DCreate9 );
    }
    А для UnhookAPI мы имеем:

    Код:
    void UnhookAPI()
    {
    DetourRemove( (PBYTE)Real_Direct3DCreate9, (PBYTE)Mine_Direct3DCreate9 );
    }

    Теперь для последней части нашего main.cpp, мы должны функция DllMain. Для тех, которые являются новыми для C + +, каждая DLL имеет отправной точкой которого является то, что сначала вызывается при загрузке модуля. Эта точка входа вызывается DllMain функции. (Некоторые компиляторы позволит вам изменить имя, но я использую стандарт.) Внутри нашей DllMain вступления мы хотим модуль, когда его впервые загружен, чтобы позвонить HookAPI, и когда его выгрузки, называть UnhookAPI. Это очень простой и очень легко. Для этого мы используем:

    BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
    {
    if (ul_reason_for_call == DLL_PROCESS_ATTACH)
    {
    DisableThreadLibraryCalls(hModule);
    HookHandle = hModule;
    HookAPI();
    }
    else if (ul_reason_for_call == DLL_PROCESS_DETACH)
    {
    UnhookAPI();
    }
    return TRUE;
    }

    Также обратите внимание на переменную HookHandle используется там? Мы храним ручку модуля, который будет использоваться в дальнейшем упаковывают вам это нужно еще где. Наряду с этим у нас в DisableThreadLibraryCalls там же. Это устраняет вызовы DLL_THREAD_ATTACH и DLL_THREAD_DETACH минимизировать рабочий код библиотеки. (Помогает сохранить размер вниз.)

    Теперь наши main.cpp сделано. Но! Мы должны вернуться назад и изменить stdafx.h. Я оставил этот код, чтобы показать вам, как работать с включает в себя, что вам нужно, и добавить их в случае необходимости.

    Итак, давайте вновь открыть stdafx.h В последние включают, которые должны быть tchar.h мы хотим добавить включает для DirectX 9. Они будут использоваться в нашей обертки, а также в main.cpp, как вы можете видеть из приведенного выше кода. Поэтому мы хотим добавить:

    #pragma comment(lib,"d3d9.lib")
    #include <d3d9.h>
    #include <d3dx9.h>

    Опять же, я использую # Прагма потому что это быстро и легко добавлять библиотеки к проекту без необходимости возиться с свойствах проекта. Я не думаю, что любой компилятор, но Microsoft поддерживает эту поэтому вам может понадобиться сделать это другой метод, чтобы добавить библиотеку к проекту.

    Часть 5 [Wrapper]
    В первую очередь мы собираемся нужно добавить некоторые новые файлы в проект. Точно так же как мы делали раньше вы собираетесь создать следующие новые файлы:

    ID3D9Wrapper.h
    ID3D9Wrapper.cpp
    ID3D9Wrapper_Device.h
    ID3D9Wrapper_Device.cpp

    Я предлагаю сделать новый фильтр в обозревателе решений и (Новая папка) для хранения файлов обертки. Назовите его D3DWrapper или что-то легко поддерживать решение организованы и легко найти то, что нужно изменить в дальнейшем. Добавление большого количества файлов может начать, чтобы сделать его трудно найти то, что вы ищете.

    Мы собираемся начать с ID3D9Wrapper.h и. Срр вот основные Direct3D обертки, где, как _Device файлы для упаковки функций устройства. (Читайте на DirectX, если вы не знаете, как все, с ним работает. Я не могу объяснить все причины, которые были бы совсем другой урок.)

    ID3D9Wrapper.h
    Сначала мы хотим, чтобы открыть блокнот и откройте файл расположен по адресу:
    C: Program FilesMicrosoft DirectX DSDK (летом) Included3d9.h
    (Могут отличаться для вашей версии SDK, но она будет называться d3d9.h)
    Теперь мы закончили с этим, сохраните и закройте этот файл.

    Мы открываем это, потому что этот файл содержит функции, которые нам нужно добавить в наш обертку. Это где мы получаем информацию, мы должны понимать, что каждая часть DirectX делает функция мудрым. Так прокрутите вниз в этом файле, и вы должны найти несколько вещей, которые мы уже сделали выше. Такие, как наш новый ЬурейеЕ, она также используется в этом файле, а также функция создания экземпляра Direct3D. Держите прокрутки, пока не найдете

    DECLARE_INTERFACE_(IDirect3D9, IUnknown)

    Это начало основного интерфейса для Direct3D9. Мы хотим использовать в основном точный код Thats Infront из нас. Во-первых, давайте создадим класс внутри нашего кода файла. Так внутри ID3D9Wrapper.h добавить:

    #include "stdafx.h"

    class Direct3D9Wrapper : public IDirect3D9
    {
    public:

    Direct3D9Wrapper( LPDIRECT3D9 pDirect3D );
    virual ~Direct3D9Wrapper();

    IDirect3D9* Direct3D9;
    };

    [C + +] Подключение через D3D9 Detours

    Глава 2
    Это начало нашего класса. Мы включаем stdafx.h, поскольку она включает в себя DirectX 9 включает в себя и такие, что нам нужно в этом файле и другие скоро прийти. Далее, еще в блокнот окна d3d9.h позволяет копировать и вставлять несколько строк.

    /*** IUnknown methods ***/
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;

    /*** IDirect3D9 methods ***/
    STDMETHOD(RegisterSoftwareDevice)(THIS_ void* pInitializeFunction) PURE;
    STDMETHOD_(UINT, GetAdapterCount)(THIS) PURE;
    STDMETHOD(GetAdapterIdentifier)(THIS_ UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier) PURE;
    STDMETHOD_(UINT, GetAdapterModeCount)(THIS_ UINT Adapter,D3DFORMAT Format) PURE;
    STDMETHOD(EnumAdapterModes)(THIS_ UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode) PURE;
    STDMETHOD(GetAdapterDisplayMode)(THIS_ UINT Adapter,D3DDISPLAYMODE* pMode) PURE;
    STDMETHOD(CheckDeviceType)(THIS_ UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed) PURE;
    STDMETHOD(CheckDeviceFormat)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat) PURE;
    STDMETHOD(CheckDeviceMultiSampleType)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels) PURE;
    STDMETHOD(CheckDepthStencilMatch)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat) PURE;
    STDMETHOD(CheckDeviceFormatConversion)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat) PURE;
    STDMETHOD(GetDeviceCaps)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps) PURE;
    STDMETHOD_(HMONITOR, GetAdapterMonitor)(THIS_ UINT Adapter) PURE;
    STDMETHOD(CreateDevice)(THIS_ UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,IDirect3DDevice9** ppReturnedDeviceInterface) PURE;

    И вставьте его в ID3D9Wrapper.h между виртуальной функции и IDirect3D9 * переменной. Если вы вставили в нужном месте в последнюю очередь в обертку должна быть:

    IDirect3D9* Direct3D9; };

    Следующим шагом мы должны сделать, это удалить PURE определить из каждой функции. Просто удалите слово PURE поэтому последнее, что на каждой линии); простой способ сделать это нажать Ctrl + H, в поле Найти, говоря: "PURE;" (без кавычек, но с пространством спереди) и в Заменить говоря: ";" (без кавычек) и убедитесь, что выбран текущий документ под Look In. Затем нажмите заменить все.

    Все сделано, сохраните и закройте этот файл.

    ID3D9Wrapper.cpp

    Теперь для этого файла, я не пишу все, что будет в этом здесь, на форумах, потому что его дерьмо тонны кода. Вы должны переписать все функции, которые мы только что добавили. Файла ч. Но не волнуйтесь, ее очень легко. Вы просто создание функции для возвращения нормального значения, как будто это был реальный Direct3D инстанции.

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

    Так внутри ID3D9Wrapper.cpp включает в себя вы будете хотеть, являются:

    #include "ID3D9Wrapper.h"

    Затем у нас есть наша конструкция класса. Мы хотим, чтобы хранить указатель Direct3D для использования внутри класса, поэтому мы используем:

    Direct3D9Wrapper:irect3D9Wrapper(LPDIRECT3D9 pDirect3D)
    {
    Direct3D9 = pDirect3D;
    }

    И в наши деконструировать не нужно ничего делать так:

    Direct3D9Wrapper::~Direct3D9Wrapper() {}

    Далее идет функций. Вы можете просто просто идти вниз по каждой функции и добавить их сами легко. Я покажу вам пример того, как сделать это самостоятельно. (Вы также можете посмотреть в нашем примере, если вы не понимаете.)

    Наша первая функция в список:

    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj);

    Чтобы понять это, STDMETHOD это макрос, который что-нибудь внутри государств () будет возвращать HRESULT. Что же касается STDMETHOD_ это как расширенная версия макросов в котором говорится, первое значение внутри () является тип возвращаемого значения, а вторая является именем функции.

    Так, глядя на эту линию, мы знаем, QueryInterface возвращает HRESULT. . Таким образом, наши функции внутри файла срр будет выглядеть следующим образом:

    HRESULT Direct3D9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
    {
    return Direct3D9->QueryInterface(riid, ppvObj);
    }

    Просто не так ли?

    Примером функции, используя STDMETHOD_ будет выглядеть так

    STDMETHOD_(ULONG,AddRef)(THIS);

    Таким образом, наша функция будет выглядеть так:

    ULONG Direct3D9Wrapper::AddRef()
    {
    return Direct3D9->AddRef();
    }

    Как только вы получите в CreateDevice, остановитесь. Это функция, мы должны изменить из исходного кода. Это потому, что, если мы не будет просто создать регулярную Direct3DDevice9 интерфейс. Вместо этого, мы хотим, чтобы создать экземпляр нашего Direct3DDevice9Wrapper класса.

    Таким образом, наш CreateDevice функция будет выглядеть следующим образом:

    HRESULT Direct3D9Wrapper::CreateDevice(UINT Adapter, D3DDEVTYPE DeviceType,HWND hFocusWindow, DWORD BehaviorFlags,D3DPRESENT_PARAMETERS *pPresentationParameters,IDirect3DDevice9 **ppReturnedDeviceInterface)
    {
    IDirect3DDevice9* pDirect3DDevice9;
    HRESULT hRes = Direct3D9->CreateDevice( Adapter, DeviceType, hFocusWindow, BehaviorFlags, pPresentationParameters, &pDirect3DDevice9 );
    *ppReturnedDeviceInterface = new Direct3DDevice9Wrapper( pDirect3DDevice9, this, pPresentationParameters );
    return hRes;
    }

    Как вы можете видеть, вместо того чтобы вернуться регулярные устройства, используемого в CreateDevice, мы устанавливаем наш обертки устройство указатель, который используется в ppReturnedDeviceInterface. Это связано с тем, что она использует наши обертку вместо обычных функций Direct3DDevice.

    И вы сделали с этим файлом сейчас. Таким образом, вы можете сохранить и закрыть его.

    ID3D9Wrapper_Device.h

    Так же, как другие. Ч файл для обертки, вам нужно найти функции, которые используются оригинальные Direct3DDevice9 интерфейс. Чтобы сделать это, вернитесь в свой ​​блокнот, который d3d9.h открытым и прокрутите вниз, дальше от последнего места мы скопировали код. Не намного дальше, вниз, откуда мы только что были в этот файл, вы должны найти:

    DECLARE_INTERFACE_(IDirect3DDevice9, IUnknown)

    Это начало Direct3DDevice9 интерфейс, который нам потребуется код. Как я уже сказал выше, это файл, который содержит наиболее код в этой книге и учебник. Я не буду показывать вам все, чтобы скопировать здесь причина это будет способ долго, но, я покажу вам, где для запуска и остановки:
    Начать копирование по адресу:

    /*** IUnknown methods ***/
    STDMETHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;

    Скопируйте все, включая то, что я только что показал вам выше, вплоть до, и в том числе:

    STDMETHOD(DrawTriPatch)(THIS_ UINT Handle,CONST float* pNumSegs,CONST D3DTRIPATCH_INFO* pTriPatchInfo) PURE;
    STDMETHOD(DeletePatch)(THIS_ UINT Handle) PURE;
    STDMETHOD(CreateQuery)(THIS_ D3DQUERYTYPE Type,IDirect3DQuery9** ppQuery) PURE;

    Да, это многое, но, легко писать их. Они просто сквозной функции, поэтому вам не нужно добавлять код внутри них другие, то возвращается, если вы не изменяя их для ваших нужд.

    Хорошо, что, как говорится, скопировать и вставить этот код в ID3D9Wrapper_Device.h то вам нужно, чтобы охватить эти, как и другим заголовком, в классе. Во-первых, нам нужны наши включает в себя

    #pragma once
    #include "stdafx.h"

    Далее, класс определяют:

    class Direct3DDevice9Wrapper : public IDirect3DDevice9
    {
    public

    Далее, построим / деконструировать, которые будут добавлены после строки, которая говорит общественности:

    Direct3DDevice9Wrapper(IDirect3DDevice9* pDirect3DDevice9, IDirect3D9* pDirect3D9, D3DPRESENT_PARAMETERS *pPresentationParameters);
    virtual ~Direct3DDevice9Wrapper();

    Затем в конце файла, то вам нужно закрытия класса. Но вам также понадобится три переменные, которые будут использоваться внутри этого класса. Какие переменные, которые содержат указатель на устройство и переменную для отслеживания успехов.

    IDirect3DDevice9* Direct3DDevice9;
    IDirect3D9* Direct3D9;

    UINT m_Stride;
    };

    Далее, вам нужно удалить чистые линии еще раз. Как и раньше, нажмите CTRL + H, в верхнем окне введите "PURE; 'в том числе пространства, но не цитаты, а в нижней,'; 'не включая кавычки. Затем нажмите Заменить все, которые должны заменить, как 115-120 вещей. Теперь вы сделали с этим файлом на данный момент, так что сохранить и закрыть.

    ID3D9Wrapper_Device.cpp
    Ах, мать-загрузить файл. Этот файл содержит самый код, как я сказал, но опять же, как я уже сказал, это просто передать через функции, сначала, пока вы добавляете вещи самостоятельно. Так позволяет начать работу ..

    Во-первых, нам нужны наши включает в файл:

    #include "ID3D9Wrapper_Device.h"

    Нам нужно только это, потому что. Ч файл уже включает в себя stdafx.h, который содержит другие включает в себя, которые будут необходимы. Далее, нам необходимо построить нашу / деконструировать этого класса:

    Direct3DDevice9Wrapper:irect3DDevice9Wrapper(IDi rect3DDevice9 *pDirect3DDevice9, IDirect3D9 *pDirect3D9, D3DPRESENT_PARAMETERS *pPresentationParameters)
    {
    Direct3DDevice9 = pDirect3DDevice9;
    Direct3D9 = pDirect3D9;
    }

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

    Далее, вам необходимо пройти через список функций и записывать их так же, как вы делали с другой файл. Помните, STDMETHOD означает возвращение типа HRESULT и STDMETHOD_ означает возвращение тип первой переменной в круглых скобках.

    Снова Херес несколько примеров, чтобы помочь вам в этом шаге:

    HRESULT Direct3DDevice9Wrapper::QueryInterface(const IID &riid, void **ppvObj)
    {
    return Direct3DDevice9->QueryInterface( riid, ppvObj );
    }

    ULONG Direct3DDevice9Wrapper::AddRef()
    {
    return Direct3DDevice9->AddRef();
    }

    ULONG Direct3DDevice9Wrapper::Release()
    {
    return Direct3DDevice9->Release();
    }

    [C + +] Подключение через D3D9 Detours

    Глава 3
    Теперь нам нужно внести некоторые правки в код, который вы только что сделали. Ничто не мажор, просто некоторые незначительные вещи. Во-первых, для Stride регистратора, вы хотите изменить SetStreamSource чтобы выглядеть следующим образом:

    HRESULT Direct3DDevice9Wrapper::SetStreamSource(UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride)
    {
    if( StreamNumber == 0 )
    m_Stride = Stride;

    return Direct3DDevice9->SetStreamSource(StreamNumber, pStreamData, OffsetInBytes, Stride);
    }

    Далее, вам необходимо изменить GetDirect3D, вместо того, чтобы позволить ему установить переменную в исходный указатель, мы хотим, чтобы установить его в нашей обертки, поэтому мы используем:

    HRESULT Direct3DDevice9Wrapper::GetDirect3D(IDirect3D9 **ppD3D9)
    {
    *ppD3D9 = Direct3D9;
    return D3D_OK;
    }

    И еще одна корректировка QueryInterface:

    {
    HRESULT hRes = Direct3DDevice9->QueryInterface(riid, ppvObj);
    if( hRes == S_OK )
    *ppvObj = this;
    else
    *ppvObj = NULL;

    return hRes;
    }

    Хорошо, теперь мы должны покончить с этим файлом, а также. Так сохранить и закрыть. Далее, нам необходимо вернуться назад и отредактировать некоторые первые несколько файлов для обработки изменений с новой обертке. Итак, первое открытое позволяет stdafx.h

    В нижней части stdafx.h нужно добавить еще включают в себя:

    #include "ID3D9Wrapper_Device.h"

    Затем вы можете сохранить и закрыть этот файл.

    Далее, в main.cpp, вам нужно добавить включают также:

    #include "ID3D9Wrapper.h"

    Это надо идти под включать, stdafx.h (Приказ имеет значение в некоторых случаях.) Затем сохранить и закрыть main.cpp.

    Далее нам нужно добавить определение файла в проект, чтобы сделать его так, что Direct3DCreate9 доступна программа называя его, и что его не все giberish когда компилятор связывает его. Это еще один шаг, который может понадобиться различные работы, если вы не используете VS2010. Я не знаю, если бы. DEF файлы являются стандартными для других компиляторов, но это должно быть. Возможно, вам придется работать различные собрать один в ваш проект все же.

    Для людей, использующих VS2010, просто сделайте следующее:
    - In the solution explorer, right click on 'Source Files' and goto:
    - Add -> New Item
    - Select 'Module-definition' file from the popup and name it the same name as the project. In my case, it will be called, 'dxhook.def'

    Теперь, если файл не открывается уже само по себе, просто дважды щелкните по нему. Этот файл экспортировать файл, который будет содержать никаких экспорта нам нужно, чтобы и другие программы прямого доступа. В нашем случае, только один на данный момент является Direct3DCreate9. Но вместо того чтобы просто говорить, экспорт, мы хотим, чтобы установить Direct3DCreate9 нашим перехваченной функции. Таким образом, наш DEF файл кода будет

    LIBRARY "dxhook"
    EXPORTS
    Direct3DCreate9 = Mine_Direct3DCreate9

    Теперь, VS2010 следует добавить DEF файл в свойствах проекта автоматически до тех пор, как вы добавили его так, как я показал выше. Сохраните и закройте этот файл сейчас.

    Поздравляю!
    Крюк / обертку все готово! Возьмите передышку на несколько, прежде чем писать быстрого запуска для этой трубки.

    Часть 6. Инжектор
    Хорошо, прежде всего, позвольте начать с того, что это очень простой инжектор. Есть много способов, чтобы переписать и такой, и я настоятельно рекомендую, что вы делаете. Есть очень хорошие библиотеки вы должны использовать такие как ForceLib и CRC32 пере держать крючок незамеченными и такой. Это лишь небольшой пример, чтобы показать вам, как придать использованием обходных путей.

    Detours поставляется с функцией, которая надстроена CreateProcessEx и внедряет модуль, который вы даете ему, для вас. Вы можете сделать это самостоятельно, а с помощью CreateProcess / Ex то паузы процесс, создавая новую тему, и потребителей инъекционных код в потоке, то вызов DllMain себя и такой. Опять же, Theres много способов сделать это, так что вы можете выбрать, какой вы хотите использовать.

    Для этого я буду использовать простое приложение консоли. Ничто не мажор, 1 файл, не так много кода.

    Для начала, давайте создадим новый проект, так что открыть еще один экземпляр VS2010 и перейти: File -> New -> Project выберите Win32 проекта из коробки, назовите его dxlauncher или то, что вы хотите. Снова держать "Создать каталог для решения" проверили, как он держит вещи красиво и аккуратно. Нажмите кнопку ОК.

    Когда Мастер приложений появляется, нажмите на ссылку Настройки приложения слева, затем выберите следующие параметры
    помогло ставь мне нравится плииз это же легкоcoool
     
    денис40, warcry, orgrimpro и 7 другим нравится это.
  4. Оффлайн

    heres111 ст. сержант

    На форуме с:
    10 янв 2013
    Сообщения:
    92
    Симпатии:
    97
    Баллы:
    21
    Пол:
    Мужской
    ого много написал=====)))))))))
     
    warcry, VremaLegkO, OJFK и ещё 1-му нравится это.
  5. Оффлайн

    ⓈⓌⒶⒼ™

    На форуме с:
    23 дек 2012
    Сообщения:
    1.044
    Симпатии:
    1.422
    Баллы:
    640
    Пол:
    Мужской
    skype:
    barsuk690
    устал писать же"
     
    warcry, orgrimpro, OJFK и 2 другим нравится это.
  6. Оффлайн

    крестоносець1 сержант

    На форуме с:
    6 фев 2013
    Сообщения:
    46
    Симпатии:
    16
    Баллы:
    6
    Пол:
    Мужской
    БЛИН ЕТО НЕДЛЯ МОИХ МОЗГОВ bl1 БЛИН Я И ТУПОЙki4 ОБИДНО
     
    afrigaherka и VremaLegkO нравится это.
Статус темы:
Закрыта.

Поделиться этой страницей

Уважаемый пользователь!

Мы обнаружили, что вы блокируете показ рекламы на нашем сайте.

Просим внести его в список исключения или отключить AdBlock.

Наши материалы предоставляются БЕСПЛАТНО и единственным доходом является реклама.

Спасибо за понимание!