[gamehacking] D3D9 hook - Часть 2

preview_player
Показать описание
Разбираем новый алгоритм перехвата, прикручиваем шрифты. :)

Рекомендации по теме
Комментарии
Автор

Спасибо за урок, Кенг. Очень грамотно объяснил, сейчас попробую сделать хук с EndScene функцией =)

muutalol
Автор

Рад стараться! С EndScene будет практически то же самое, кроме смещения до самой функции (17 для Present, какое-то другое для EndScene) и описания самой функции - аргументы там другие. Смещение можно посмотреть в заголовочных файлах (d3d9.h), или же нагуглить.

mremizov
Автор

Ну, я начитался когда-то исходников, в которых использовался сканер сигнатур, но не считаю такое решение достаточно универсальным. С одной стороны - да, это попроще, зная сигнатуру, но всегда есть шанс, что сигнатура изменится - вариант не самый надёжный. С точки зрения же библиотеки буфер можно курочить совершенно безболезненно, т.е. в цепочку "BeginScene - EndScene - Present" можно вклиниваться в любом месте, лишь бы эта цепочка сохранялась.

mremizov
Автор

По-идее, должна быть, но пока никак себя не проявила. Это легко лечится, покажу в следующем видео, как. Спасибо за внимательность. :)

mremizov
Автор

нет, Михаил спасибо тебе огромное, что записал эти уроки!!! 
Блин на Delphi искал что-нибудь подобное ничего нету... какие-то убогие примеры есть, но все бес мысленно, т.к. они не рабочие а тут все таки показана суть!!! Жаль, что вы упустили особый момент!!! DLL загружена в память и поэтому до таблицы методов тоже самое смещение!!! 

MrAirrussia
Автор

Если винда старше 7 версии, то ставьте в свойствах экзешника, в который будете инжектить, совместимость с windows xp.

gim_y
Автор

Плюс, на производительности сказывается только кривость алгоритма рисования - т.е. вся цепочка (Begin - End - Present) в любом случае выполнится, но если там будет какой-нибудь ресурсоёмкий код - само собой, будут и проседания производительности, независимо от того, в какой функции это будет выполнено.

mremizov
Автор

Спасибо огромное за видео.
Писал свой hook, но на C#. В итоге не мог никак понять что не так, оказалось у меня неправильная логика работы была: нету вызова перехваченного Present и перед вызовом восстановление старых байтов. Вместо этого я просто выделял 1 раз asm код, где вызывал свою функцию в своей программе, а дальше в этом же asm были восстановленные биты, которые я затер + jmp на затертые биты + их длина.

В итоге, получалось так, что при хуке экран просто вставал на 1 картинке (стопался), пока не убирал хук...

Но, в этом коде у вас ошибка: если посмотрите количество потребляемой памяти хукнутой игрой, то заметите, что память бесконечно выделяется до тех пор, пока она не забьется полностью (примерно за несколько минут). А дальше вылезет внутри игровая ошибка о невозможности выделить память. Ошибку эту я пока не заметил, т.к. знания С++ у меня на уровне универа - когда то использовал для лабораторных работ.

СтасПеченских
Автор

Ага, я уже нагуглил. Весёлая штука, будет особнячком стоять для новых уроков. ;)

mremizov
Автор

How to stop memory from leaking with this source?

unknownunknown
Автор

кстати, что! а то что смещение до каждого метода в DirectX определенной версии штука постоянная! И не нужна получается функция GetDevice9Methods(), она фактически должна просто возвращать адреса смещения до нужного нам метода в зависимости от версии DirectX!
А создание окна и т.п. это лишнее!!! Возможно я чего то не раздуплил, но на моей машине смещение константа, экспериментирую с DirectX8 т.к. есть одна игра которая никак не умирает! 

MrAirrussia
Автор

Помогите, возникает ошибка при компиляции: error: invalid conversion from 'PRESENT9 {aka long int (__attribute__((__stdcall__)) *)(IDirect3DDevice9*, const tagRECT*, const tagRECT*, HWND__*, void*)}' to 'const void*' [-fpermissive]

KirillKabanov-vdmd
Автор

Я пробовал тестировать эту DLL на своей программе и она крашится при иньекции с ошибкой из-за того что при вызове d3dDevice->Release(); d3dDevice это нуль-указатель. Не знаю как пофиксить.

theslavscav
Автор

У меня крашутся игры с этой DLL примерно через 3-5 минут) А тестовый проект сразу при инжекте крашится. В чем может быть косяк ? Винда 7 x64, студия 2012 ultimate, DX SDK такой же как у тебя

Stenrus
Автор

А DIP - это? Я не силён в терминологии, а в гугле толкового определения не нашлось. :D

mremizov
Автор

Привет. Для кого простенько исправить утечку в D3DXCreateFont, а для кого нет, раз десять жмакаю F1 и игра уходит в штопор, причем любая.

Greg
Автор

Код проще потому что так намного легче, всего получение адреск и хук. Почеме меню в ЕС? Так надо, во избежание вылетов игр... да и само меню будет иметь быстрый отклик и грузить систему не будет

Fedja
Автор

у меня есть смещения всех функций =) у ендсцен это 42ая

muutalol
Автор

Исходный код плз, иначе толку мало от видео, не хочется переписывать с экрана код... (это мое мнение)

mirokko
Автор

Заставляет мозг напрячься про указатели!!! Вроде расдублил тему понял, что к чему, на самом деле 

самое ключевое место к понимаю!!! 

MrAirrussia