- 4,807
- 6,491
UPD 23.10.2017: Ну и УГ, не юзайте это. Лучше тащите хуки из этого шаблона: Prime-Hack | AsiPlugin(https://dl.prime-hack.net/AsiPlugin/)
Написал небольшой класс для управления хуками.
Функции класса:
При вызове деструктора все хуки удаляются.
Весь сок в том, что хуки можно ставить друг на друга, пока не кончится память.
Копиригхт:
функция memcpy_safe и memset_safe взяты из соба
функция поиска участка кода была давно найдена где-то в интернетах, кажется на unkowncheats.me
Написал небольшой класс для управления хуками.
Функции класса:
Поиск участка кода, по его части.
Использование:
где dsAddress - начальный аддрес поиска. Например GetModuleHandle(samp.dll), для поиска функций в samp.dll
dwLen - размер адресного пространство (как далеко искать). Например для поиска статичных функций в samp.dll, можно указать ее размер.
bMask - часть кода искомой функции
szMask - маска кода (x - байт должен быть такой же как в bMask, ? - байт может быть любой)
ret - адрес искомого участка кода
Использование:
Код:
DWORD ret = FindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask)
dwLen - размер адресного пространство (как далеко искать). Например для поиска статичных функций в samp.dll, можно указать ее размер.
bMask - часть кода искомой функции
szMask - маска кода (x - байт должен быть такой же как в bMask, ? - байт может быть любой)
ret - адрес искомого участка кода
Создает хук.
Использование:
где dwAddress - адрес кода, на который необходимо поставить хук.
dwFunc - функция на которую будет ссылаться хук
type - тип хука
ret - адрес выхода из функции, у Jump хуков в конце должен быть переход на этот адрес, для вызова оригинального кода, этот же адрес используется для удаления хука (сделано это в связи с тем, что на 1 адрес можно нацепить несколько хуков)
Использование:
Код:
DWORD ret = CreateHOOK(DWORD dwAddress, DWORD dwFunc, TypeHOOK type, size_t len)
dwFunc - функция на которую будет ссылаться хук
type - тип хука
- Jump - обычный переход, оригинальный код будет вызываться после выхода из вашей функции
- Call - вызов вашей функции, оригинальный код не будет вызываться после выхода из вашей функции
- Call_s - вызов вашей функции, оригинальный код будет вызываться после выхода из вашей функции
ret - адрес выхода из функции, у Jump хуков в конце должен быть переход на этот адрес, для вызова оригинального кода, этот же адрес используется для удаления хука (сделано это в связи с тем, что на 1 адрес можно нацепить несколько хуков)
Удаляет хук.
Использование:
где dwAddress - адрес который вернула функция создания хука
ret - результат операции:
Использование:
Код:
bool ret = RemoveHOOK(DWORD dsAddress)
ret - результат операции:
- false - хук не существует, удален ранее, или создан не через данный класс
- true - хук успешно удален
Весь сок в том, что хуки можно ставить друг на друга, пока не кончится память.
Копиригхт:
функция memcpy_safe и memset_safe взяты из соба
функция поиска участка кода была давно найдена где-то в интернетах, кажется на unkowncheats.me
Вложения
Последнее редактирование: