Перейти к содержимому

Фотография

Хуки в CSGO (VMT hooks)

* * * * * 1 Голосов ГАЙД

  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1
  P45H3

P45H3
    Эксперт
  • Сообщения:
    205
  • Номер пользователя:
    17
  • Регистрация:
    22-Nov 17
  • Репутация:
    596
Приветствую. В данной статье расскажу 
Virtual Method Table Hooks или просто VMT хуки.
 
В движке игры CSGO есть виртуальные классы - интерфейсы,
в которых находятся различные методы.
Пример:

Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент

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

Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент

 
Виртуальная таблица по сути своей - это массив 4 байтных указатель для x32 и 
8 байтных для x64 соответственно.
 
Пример вызова виртуальной функции через 
каст указателя на неё к тайпдефу.
 

Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент

 
Создаём тайпдеф данной функции. Используем __fastcall
т.к. в нём параметры передаются через регистры
ECX, EDX , как раз указатель на класс передаётся через
регистр ECX соответственно для соглашения __thiscall.
 
Далее к объекту тайпдефа кастим указатель на нулевую 
виртуальную функцию в виртуальной таблице, проверяем на валидность и вызываем.
 
Вы уже могли начать догадываться о том, что указатель внутри 
виртуальной таблицы можно подменить на свою функцию тем самым 
установив хук (как и делают VMT hooks библиотеки).
 
Пример:

Пожалуйста Логин или Регистрация чтобы увидеть этот скрытый контент

 
Получаем указатель на начало виртуальной таблицы.
Ставим флаг на память, чтобы разрешить нам писать туда.
Подменяем указатель на оригинальный метод указателем на нашу
hook - функцию, которая имеет прототип оригинальной функции с соглашением
__fatscall (объяснял выше).
 
Также нужно делать трамполайн - возврат оригинального адреса, а то
будет краш. Делается это также как и ставится хук.
 
Разбирайтесь) 

  • SID, Ikfakof, Flazy и еще 1 это нравится

#2
  Flazy

Flazy
    Пользователь
  • Сообщения:
    4
  • Номер пользователя:
    210
  • Регистрация:
    02-Apr 18
  • Репутация:
    0

:applause:






Темы с аналогичными тегами: ГАЙД

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных


Тему поситили 115 пользователей


    DanielExisy, Robertbex, Давид, LucilleScurb, hckmemory, Flazy, Denat, Soltaz, lobz9ra, Kelstidax, abnowcack, CharlesTaunk, pullyfy, gaysex2013, memes2202, Clostik, MS_CHESTER, sulixmat, ynceeaa, hallah_toto, neru-chan, Scar, jajaz1, alextrtrtr, qwertys112, zrevoilixvoqajqlbo, vandalchel, Beshik, Nikser, apupule, nanovirus, FIRST, Y4NG S4T0R1, tr., andreika970, Burn, h4x0r, imynn, satana, nadix1337, kovalskiy, NoBots, NiceL, LGBT2, shelsus, thelifeworm, dron0026, sabberian, KASRO, doker2515, perfeto, Hoodie, demontronpc, lecui1, timofeyy, vit, apelCun, den13377, AndrewGTX, shade_ru, Arfo1337, NexSqaud, Ranix, Mibogi, mailforsteam19, Spec122, DiMsToN, kivdev, Xoks244, FlopperPHD, Rubez, aronghost, KV!STER, dm_rsv, Onestep, N4ZoX, xxi, Sirius312, soulgangstr, XEvilBestchord, Stadnyk2.0, ag4, SoulDemetra, Linkersin, vasya, Karinor, pokpok23, sany14, pafoshack, duke04, SteamiestChief, Aquarium, Mrhukadan, DarkD, GayPig, KERNOV, NKVD, Ikfakof, xardch, justzloy, MrKepol, bubuxd, akifcan57, Wahabeat1337, SID, Mark46, Wqwqwq, m1kky, Mafahes, Abandoned20210127, vorobey666, fuze, Pastershim, P45H3, banany