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

  Рет қаралды 13,132

Михаил Ремизов (keng)

Михаил Ремизов (keng)

Күн бұрын

Пікірлер: 41
@muutalol
@muutalol 12 жыл бұрын
Спасибо за урок, Кенг. Очень грамотно объяснил, сейчас попробую сделать хук с EndScene функцией =)
@mremizov
@mremizov 12 жыл бұрын
Рад стараться! С EndScene будет практически то же самое, кроме смещения до самой функции (17 для Present, какое-то другое для EndScene) и описания самой функции - аргументы там другие. Смещение можно посмотреть в заголовочных файлах (d3d9.h), или же нагуглить.
@mremizov
@mremizov 12 жыл бұрын
Ну, я начитался когда-то исходников, в которых использовался сканер сигнатур, но не считаю такое решение достаточно универсальным. С одной стороны - да, это попроще, зная сигнатуру, но всегда есть шанс, что сигнатура изменится - вариант не самый надёжный. С точки зрения же библиотеки буфер можно курочить совершенно безболезненно, т.е. в цепочку "BeginScene - EndScene - Present" можно вклиниваться в любом месте, лишь бы эта цепочка сохранялась.
@MrAirrussia
@MrAirrussia 11 жыл бұрын
нет, Михаил спасибо тебе огромное, что записал эти уроки!!! Блин на Delphi искал что-нибудь подобное ничего нету... какие-то убогие примеры есть, но все бес мысленно, т.к. они не рабочие а тут все таки показана суть!!! Жаль, что вы упустили особый момент!!! DLL загружена в память и поэтому до таблицы методов тоже самое смещение!!!
@PaxBeach
@PaxBeach 7 жыл бұрын
Что-нибудь получилось на Delphi с этим примером? Почему-то в DLL CreateDevice всегда возвращает nil устройство, а в обычном приложении устройство создается нормально. Помоги с примером пожалуйста.
@MrAirrussia
@MrAirrussia 7 жыл бұрын
Получилось, давно это было, всех нюансов сейчас не помню, кидай почту или другой контакт мне в личку скину свой говнокод. :-)
@mremizov
@mremizov 12 жыл бұрын
Плюс, на производительности сказывается только кривость алгоритма рисования - т.е. вся цепочка (Begin - End - Present) в любом случае выполнится, но если там будет какой-нибудь ресурсоёмкий код - само собой, будут и проседания производительности, независимо от того, в какой функции это будет выполнено.
@mremizov
@mremizov 12 жыл бұрын
Ага, я уже нагуглил. Весёлая штука, будет особнячком стоять для новых уроков. ;)
@mremizov
@mremizov 12 жыл бұрын
По-идее, должна быть, но пока никак себя не проявила. Это легко лечится, покажу в следующем видео, как. Спасибо за внимательность. :)
@gim_y7639
@gim_y7639 4 жыл бұрын
Если винда старше 7 версии, то ставьте в свойствах экзешника, в который будете инжектить, совместимость с windows xp.
@gabriel_9572
@gabriel_9572 8 жыл бұрын
Куда ты исходник выложил ???
@Sten37rus
@Sten37rus 12 жыл бұрын
У меня крашутся игры с этой DLL примерно через 3-5 минут) А тестовый проект сразу при инжекте крашится. В чем может быть косяк ? Винда 7 x64 , студия 2012 ultimate , DX SDK такой же как у тебя
@СтасПеченских
@СтасПеченских 8 жыл бұрын
Спасибо огромное за видео. Писал свой hook, но на C#. В итоге не мог никак понять что не так, оказалось у меня неправильная логика работы была: нету вызова перехваченного Present и перед вызовом восстановление старых байтов. Вместо этого я просто выделял 1 раз asm код, где вызывал свою функцию в своей программе, а дальше в этом же asm были восстановленные биты, которые я затер + jmp на затертые биты + их длина. В итоге, получалось так, что при хуке экран просто вставал на 1 картинке (стопался), пока не убирал хук... Но, в этом коде у вас ошибка: если посмотрите количество потребляемой памяти хукнутой игрой, то заметите, что память бесконечно выделяется до тех пор, пока она не забьется полностью (примерно за несколько минут). А дальше вылезет внутри игровая ошибка о невозможности выделить память. Ошибку эту я пока не заметил, т.к. знания С++ у меня на уровне универа - когда то использовал для лабораторных работ.
@СтасПеченских
@СтасПеченских 8 жыл бұрын
т.е. у меня было так jmp [мой asm адрес] -> call [функция в моей программе], восстановленные затертые байты, jmp [старый адрес + длина затертых байт] Внимание: не верная логика - зависает!
@СтасПеченских
@СтасПеченских 8 жыл бұрын
Утечка памяти оказалась в DrawIndicator при прорисовке текста, а именно в создании шрифтов и не освобождении памяти уже использованного шрифта m_font->Release() На данный момент я тестирую на игре WoW TBC 2.4.3. Как выяснилось, через некоторое время крашится игра с ошибкой "The memory could not be write" на очень низкий адрес, скажем 0х0000002A. Т.е. есть либо ошибки с соглашением вызовов, либо в моем случ. просто не JMP [address] - оригинальные мнемокоды, и поэтому нужно либо не 5 байт считывать, а больше, либо искать точку входа с небольшим смещением от present9.
@СтасПеченских
@СтасПеченских 8 жыл бұрын
Изучил ошибку. По адресу [dD3D + present9], там где мы предполагаем, что это начало функции Present идут такие 5 байт мнемокодов: mov edi,edi push ebp mov ebp,esp Которые мы заменяем на jmp [address] и восстанавливаем каждый кадр. Ошибка оказалась по адресу: d3d9.dll+12B65C dword ptr[esi], 00 где ESI=00000002 Поэтому игра выдает ошибку: The instruction at "70A7B65C" referenced memory at "0x00000002". The memory could not be written. ПС: наз разбираться почему ESI получается такой...
@СтасПеченских
@СтасПеченских 8 жыл бұрын
По поводу крашей - это моя вина. Каюсь. Я в DrawIndicator зачем то дописал dev->Release(). ^_^ Спасибо еще раз. Очень сильно помог.
@localehost2602
@localehost2602 6 жыл бұрын
Стас, получилось тогда ? :)
@unknownunknown2127
@unknownunknown2127 7 жыл бұрын
How to stop memory from leaking with this source?
@mremizov
@mremizov 12 жыл бұрын
А DIP - это? Я не силён в терминологии, а в гугле толкового определения не нашлось. :D
@KirillKabanov-vd8md
@KirillKabanov-vd8md 9 жыл бұрын
Помогите, возникает ошибка при компиляции: error: invalid conversion from 'PRESENT9 {aka long int (__attribute__((__stdcall__)) *)(IDirect3DDevice9*, const tagRECT*, const tagRECT*, HWND__*, void*)}' to 'const void*' [-fpermissive]
@theslavscav
@theslavscav 8 жыл бұрын
Я пробовал тестировать эту DLL на своей программе и она крашится при иньекции с ошибкой из-за того что при вызове d3dDevice->Release(); d3dDevice это нуль-указатель. Не знаю как пофиксить.
@БрутальныйПоцик
@БрутальныйПоцик 4 жыл бұрын
Наверное я немного запоздал , но если windows старше 7 версии то , нужно поставить совместимость с win xp например и всё будет работать , мне помогло на win 10
@MrAirrussia
@MrAirrussia 11 жыл бұрын
кстати, что! а то что смещение до каждого метода в DirectX определенной версии штука постоянная! И не нужна получается функция GetDevice9Methods(), она фактически должна просто возвращать адреса смещения до нужного нам метода в зависимости от версии DirectX! А создание окна и т.п. это лишнее!!! Возможно я чего то не раздуплил, но на моей машине смещение константа, экспериментирую с DirectX8 т.к. есть одна игра которая никак не умирает!
@Greg798100
@Greg798100 11 жыл бұрын
Привет. Для кого простенько исправить утечку в D3DXCreateFont, а для кого нет, раз десять жмакаю F1 и игра уходит в штопор, причем любая.
@Fedja20081
@Fedja20081 12 жыл бұрын
Код проще потому что так намного легче, всего получение адреск и хук. Почеме меню в ЕС? Так надо, во избежание вылетов игр... да и само меню будет иметь быстрый отклик и грузить систему не будет
@Fedja20081
@Fedja20081 12 жыл бұрын
В DIP надо рисовать ВХ!
@findr0
@findr0 12 жыл бұрын
УРА!
@mremizov
@mremizov 12 жыл бұрын
Почему же?
@muutalol
@muutalol 12 жыл бұрын
у меня есть смещения всех функций =) у ендсцен это 42ая
@32bita
@32bita 12 жыл бұрын
спасибо
@alexeianonim4106
@alexeianonim4106 11 жыл бұрын
тоже самое
@mremizov
@mremizov 12 жыл бұрын
Уиии! :)
@MrAirrussia
@MrAirrussia 11 жыл бұрын
Заставляет мозг напрячься про указатели!!! Вроде расдублил тему понял, что к чему, на самом деле vtablePtr:=TPointer(Pointer(Pointer(d3dDevice)); самое ключевое место к понимаю!!!
@mirokko
@mirokko 10 жыл бұрын
Исходный код плз, иначе толку мало от видео, не хочется переписывать с экрана код... (это мое мнение)
@stryder12345
@stryder12345 4 жыл бұрын
Игра жутко виснет и крашится
@mremizov
@mremizov 12 жыл бұрын
Скинь в лс логин.
@alimertc
@alimertc 9 жыл бұрын
bi uçah daha yollayın düşürek
@Fedja20081
@Fedja20081 12 жыл бұрын
DrawIndexPrimitive
[gamehacking] D3D9 hook - Часть 3
11:12
Михаил Ремизов (keng)
Рет қаралды 8 М.
Don’t Choose The Wrong Box 😱
00:41
Topper Guild
Рет қаралды 62 МЛН
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
Sudden Strengthening of Ukraine / Massive Offensive
12:01
NEXTA Live
Рет қаралды 592 М.
[gamehacking] D3D9 hook - Часть 1
15:05
Михаил Ремизов (keng)
Рет қаралды 13 М.
[gamehacking] Ещё один способ борьбы с DMA
10:42
Михаил Ремизов (keng)
Рет қаралды 10 М.
Don’t Choose The Wrong Box 😱
00:41
Topper Guild
Рет қаралды 62 МЛН