Перейти к содержанию

Sergey99

Пользователи
  • Постов

    97
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Сообщения, опубликованные Sergey99

  1. 12 минут назад, imaginary сказал:

    Попробуй искать Изменилось/Не изменилось, неизвестное значение ?

    Проблема в том, что не где отсеивать, нельзя биндить клавиши и соответственно никак не найти адрес

  2. Всем привет ещё раз! На этот раз вопрос по поводу перехвата готовых команд в играх.

     

    К примеру есть игра CoD: MW3, там так же как и в MW2 есть консольные команды и если в 2 части их можно было отследить (допустим noclip), отсеивая значения состояния команды (0 - выкл; 1 - вкл), то в 3 части такой штуки нет (менять конфиг и биндить горячие клавиши), но есть умельцы которые нашли способ отсева или всё-таки перехвата.

     

    От сюда вопрос, как это сделать (какой-нибудь вариант найти значения состояния команды)??

  3. И так вот всё готовенько, сделал хук на D3D9 так как CoD: MW2 работает с ним.

    Вот ссылка на гит хаб хука: https://github.com/Pirate1953/D3D9_HOOK,, по сути всё что делаю это рисую меню сверху слева в окне игры с возможностью управления клавишами на клавиатуре.

    Теперь вопрос: как мне реализовать функцию, которая будет отключать текстуры, оставляя полигоны моделей (если такая вообще существует) или как отображать полигоны у всех моделей на карте (видны даже те, которые за стеной стоят)???

     

    Вот само меню:

    1.jpg

     

     

    • Плюс 1
  4. Исходя из документации выясняется, что DetourFunction - определяет адрес по которому наша DLL ищет функцию, но в новой версии есть DetourAttach. Как тогда переписать строчку для определения HOOK?

     

    Короче  нашёл древний заголовок detours v1.5 думаю сейчас с ним попробую для начала, а то так не интересно, когда мелгомягкие придумывают новые название и структуры для функций)

  5. Такс пришёл домой, решил писать заново всё и попутно справляться с ошибками (до тех которые не смог решить пока не дошёл).

    Итак вот часть моего творения с комментариями, поясните я правильно понял (комментирую) эту часть?

     

    /**
    	typedef для long HRESULT
    	WINAPI *имя - это указатель на функцию с соглашением вызова WINAPI, которая принимает параметры опредедлённых типов данных и возвращает HRESULT
    	WINAPI - это _stdcall (соглашение вызова)
    */
    typedef HRESULT(WINAPI *tSetStreamSource)(LPDIRECT3DDEVICE9 pDevice, UINT StreamNumber, IDirect3DVertexBuffer9 *pStreamData, UINT OffsetInBytes, UINT Stride);
    tSetStreamSource oSetStreamSource;	//Объявляем oSetStreamSource, это имя будет использоваться для вызова функции, указателем на которую является tSetStreamSource
    
    typedef HRESULT(WINAPI *tEndScene)(LPDIRECT3DDEVICE9 pDevice);
    tEndScene oEndScene;	//Объявляем oEndScene, это имя будет использоваться для вызова функции, указателем на которую является tEndScene
    
    typedef HRESULT(WINAPI *tDrawIndexedPrimitive)(LPDIRECT3DDEVICE9 pDevice, D3DPRIMITIVETYPE PrimType, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount);
    tDrawIndexedPrimitive oDrawIndexedPrimitive;	//Объявляем oDrawIndexedPrimitive, это имя будет использоваться для вызова функции, указателем на которую является tDrawIndexedPrimitive
    

     

     

    17 часов назад, Sergey99 сказал:

    typedef для long HRESULT

    Немножко не верно:

    typedef для объявления имени HRESULT для типа данных long для описания ошибки или предупреждения

    Вот так ок?

     

     

    Как я почитал в месте: WINAPI *tSetStreamSource мы объявляем указатель на метод SetStreamSource из класса IDirect3DDevice9, которая принимает параметры и вызывается из _stdcall, но не ясно для чего тогда typedef и зачем потом oSetStreamSource?

     

    Вот подробное описание этой конструкции:

    1) Объявляем тип указателя на метод

    2) tSetStreamSource - указатель на метод SetStreamSource, который принимает определённые параметры и возвращает HRESULT

    3) Объявялем указатель, принадлежащий типу tSetStreamSource

     

    Надеюсь всё ясно)

     

    НА дворе 2 часа ночи а тем временем дошёл до этой строчки:

    #define HOOK(func, addy) o##func = (t##func)DetourFunction((PBYTE)addy, (PBYTE)hk##func)

    Первую часть я понял, мы с помощью директивы препроцессора определяем константу или макрос HOOK, который судя по всему принимает, аргументы а что дальше. Кто может объяснить, что делает эта строчка?

     

    8 часов назад, Sergey99 сказал:

    DetourFunction

    Хотя пишут, что есть теперь DetourAttach, но в общем что вся строчка делает?

  6. Чтобы текстуры не отрисовывались, необходимо отключить какую-то функцию (или же изменить алгоритм рисования в D3D приложении) из D3D. Я располагаю Visual Studio 2017 и 2015 у меня есть DirectX SDK (June 2010), в которой есть необходимые файлы, но проблемы начинаются в самом начале, ведь даже не дают сделать хук на отрисовку меню поверх окошка прогаммы.

  7. Ок, это слишком сложно, тогда как отключить текстуры и оставить одни полигоны? Наверняка на c++ это делается.

    Желательно с примером и объяснением (стиль "Как нарисовать сову" не принимается, так как все исходники, которые я беру не работют так как не определы идентификаторы функций а символы и directx я подрубил всё пашет)

    И ещё прошу объяснить как оптимизировать под новые версии DirectX (11 например)?

  8. Здравствуйте, ни как и ни где не найду исходник логгера текстур на C++ и вытекающий от туда WH на DirectX, который ещё кенг делал. На гите его уже нет, как мне быть??

    Хочу сделать Chameleon для CoD: MW2 и не спрашивайте почему, потом всё видите как только закончу) Где мне взять исходник?

  9. 9 минут назад, partoftheworlD сказал:

    RVA - это сокращение от Relative Virtual Address, т.е. относительный виртуальный адрес. "Относительно чего?" - спросите вы. "Относительно Image Base" - отвечу я. Например, если какая-либо строка хранится в памяти по адресу 450000h, и Image Base = 400000h, то RVA этой строки равен 450000h - 400000h = 50000h

    Спасибо, это стоит запомнить :)

    12 минут назад, partoftheworlD сказал:

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

     

     

    Просто в некоторых играх адреса инструкций в наглую меняются при перезапуске, возможно я не помню, но тогда CE мне показывал полный адрес без прибавления смещения к базовому адресу, может быть такое?

  10. 4 минуты назад, partoftheworlD сказал:

     

     

     

    Магия реверса, по строкам находишь функцию регистрирующую команды, которая принимает как аргументы 

     

    
    Имя команды           "g_speed    "
    Минимальное значение  "190        "
    Маска 1               "0x80000000 "
    Маска 2               "0x7F7FFFFF "
    Максимальное значение "192        "
    Описание              "bla-bla-bla"

     

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


    В этой статье что-то похожее рассматривал уже.

     

    А вот теперь если представить имеется игра с динамическим распределением памяти, у неё инструкции расположены по адресам, мне CE, показывает, например, инструкцию сохранения координат по такому адресу: game.exe+842432, где game.exe = 00400000 - базовый адрес модуля, а 842432 - смещение до адреса с инструкцией.

    Может ли меняться смещение (в моём случае 842432) при динамическом распределении памяти и при статическом?

  11. 2 часа назад, partoftheworlD сказал:

    ? Конечно он ничего не найдет, ты ведь делаешь поиск сигнатур в ntdll модуле, а нужно выбрать модуль игры. Это во вкладке отладочные символы выбирается.

    Вы все не поверите, но я блин посмотрел настройки по умолчанию и выяснил следующее: раз уж при стандартных настройках параметр g_speed равен 190, то я нашёл его через CE методом тыка :)

    Но всё же, всё равно интересно, как вы нашли этот параметр, я видел что адрес состоит из нескольких значений и умножения на 4 (видимо это размер 4 байта, непонятно зачем там нужен оператор смещения >>)

    Я всё ещё не допёр как же найти эту метку и провести анализ, чтобы в итоге получить тот же адрес?

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

  12. 38 минут назад, partoftheworlD сказал:

    ? Конечно он ничего не найдет, ты ведь делаешь поиск сигнатур в ntdll модуле, а нужно выбрать модуль игры. Это во вкладке отладочные символы выбирается.

    Загрузил в модуль, теперь у меня вот это окно, правильно двигаюсь?

    https://imgur.com/AagL2I7

  13. 27 минут назад, partoftheworlD сказал:

    Если картинка в буфере - CTRL+V, если в файле - то куда-нибудь на imgur и вставлять ссылку. Если картинок больше 1, то под спойлер.

    Вот как я делаю когда присоединил отладчик к процессу игры, ведь правильно?

  14. 1 час назад, partoftheworlD сказал:

     

    Многие игры распаковывают различные данные только после запуска, а взлом не запуская игру сравним с гаданием по солнцу с закрытыми глазами.

    Есть способ тут картинку к сообщению присобачить, чтобы проще ориентироваться по ходу?

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

    18 минут назад, partoftheworlD сказал:

     

    Многие игры распаковывают различные данные только после запуска, а взлом не запуская игру сравним с гаданием по солнцу с закрытыми глазами.

    Тогда будем присоединять отладчик уже к процессу

  16. 7 минут назад, Xipho сказал:

    На анализ нужно открывать сдампленный файл, а не основную версию.

    Я просто привык к стандартному отладчику СЕ и Olly, к тому же процесс игры не запускаю.

    Как мне здесь сделать дамп файла? Видимо буду теперь привыкать к новому отладчику :)

  17. 5 минут назад, partoftheworlD сказал:

    Поиск по сигнатуре делай. ПКМ по листингу Поиск в текущем модуле -> Шаблон. Ах, да шаблон надо исправить, вместо "?" должно быть "??"

    Это точно нужно искать в листинге, где дизассемблированный код файла лежит, где адреса, инструкции и байты?

  18. 2 минуты назад, partoftheworlD сказал:

     Нет, это адрес указывающий на индекс команды с которой функция работает в настоящее время. 

    Ок, я как раз поставил отладчик x64dbg, тот самый, пока привыкать буду :) 

    Я так полагаю версии у нас разные поэтому мне сперва надо найти текстовую метку g_speed?

    Сейчас у меня открыт именно файл .exe игры, а не присоединён к процессу

  19. Ок, вижу что адрес получен в результате математической операции, можете сказать от куда начали реверс? Если ставили отладчик на проверку "какая инструкция пишет в этот адрес", то в какой, где координата хранится или что-то другое?

    И не совсем понятно от куда нашлось число 1233 (0x4D1) и зачем сдвигать операнд влево через  оператор <<, если можно объясните подробнее, чтобы я понял :)

  20. 2 часа назад, partoftheworlD сказал:

    Пора про неё забыть, это инструмент наших предков, есть современная альтернатива - x64dbg

     

    Ой да ладно вам, Olly живи :) 

    Однако более детального способа найти скорость персонажа ещё не нашёл, может быть всё очень замудрено там в игре?

    Есть ли кто-нибудь ещё по мимо меня, кто увлекается CoD MW2, кто более прошарен чем я, подскажите в какую сторону копать, чтобы найти "некую константу для скорости персонажа", на наглядном примере (у кого игра сейчас имеется при себе).

  21. 2 минуты назад, partoftheworlD сказал:

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

    В зависимости от размера кадра стека для текущей функции твое значение может быть локальной переменной.

     

    К примеру возьмем кадр стека размером 78 байт(в прологе функции можно посмотреть, сколько выделяет памяти под кадр инструкция sub esp, <размер>, тогда получается так.

    
    esp = ebp - 78 является верхушкой стека
    
    ...
    ...
    ...
    ...
    esp+70 = ebp-8 = 1337
    
    ...
    ...
    ebp = esp+78 указатель на базовый адрес стека. 

     

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

    Думаю это легче через Olly делать, а то я это в CE брейки ставил

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.