Подведи собственные итоги года совместно с YOUGAME и забери ценные призы! Перейти

Вопрос Как добавить хук в лв? (vfunc_hook)

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
68
Реакции
12
Смотрите-ка, у меня есть сурсы легендвара
Пытаюсь понять как работают хуки, чтобы Emit sound хукнуть и сделать автоассепт, но блин, сложно

Я даже разницы между hooks.cpp, и .hpp особо не понимаю
Попробовал спастить из другого чита, но чёт не получается (возможно т.к. там minhook юзается, хз какую пасту лучше юзать, на минхуке или вфунк хуке)
 
Благодарю, получается я вообще не там пытался
насколько я понял из анкновнчитса, должно быть что-то по типу
hooks::engine_sound_hook->setup(interfaces::engine_sound);
осталось понять, почему не подходит
 
Методом проб и ошибок я дошёл до строчки hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook),0);

но блин, я не понимаю откуда взять цифру после запятой
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Методом проб и ошибок я дошёл до строчки hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook),0);

но блин, я не понимаю откуда взять цифру после запятой
index твоего хука
 
index твоего хука
Такс, судя по информации с анкновнчитс 2019 года, это 5

но в легендваре индекс 5 уже у hooked_packetstart, так что или что-то изменилось в ксго, или я туплю, хах
да, но возможно методом тыка разберусь
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Такс, судя по информации с анкновнчитс 2019 года, это 5

но в легендваре индекс 5 уже у hooked_packetstart, так что или что-то изменилось в ксго, или я туплю, хах

да, но возможно методом тыка разберусь
индекс эмит саунда не 5... :flushed: :flushed: :flushed: :flushed: :flushed:
 
Такс, судя по информации с анкновнчитс 2019 года, это 5

но в легендваре индекс 5 уже у hooked_packetstart, так что или что-то изменилось, или я туплю, хах

да, но возможно методом тыка разберусь
смотри, индекс это порядковый номер функции в интерфейсе

вот например 2 интерфейса


Код:
Expand Collapse Copy
class IFirst
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}

class ISecond
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}

точно так же и в кс(ну там соотвественно всё разно(см. лик сурсов кс))
тк это с++ то отсчет начинается с нуля
т.е. FirstFunction имеет индекс 0 и так далее

далее на счет хуков твоих

Код:
Expand Collapse Copy
IFirst* pFirst = CreateInterface("IFirst001");
ISecond* pSecond = CreateInterface("ISecond001");

extern void __stdcall IFirst_FirstFunction_Hooked();
extern void __stdcall ISecond_FirstFunction_Hooked();

VirtualHook(pFirst, 0, IFirst_FirstFunction_Hooked);
VirtualHook(pSecond, 0, ISecond_FirstFunction_Hooked);

это конечно же всё образно, но надеюсь поймешь

так вот мы получили интерфейсы и в каждом хукнули функцию под индексом 0
extern обозначает что функция должна будет объявиться где-то в другом файле
индекс эмит саунда не 5... :flushed: :flushed: :flushed: :flushed: :flushed:
вообще то 5
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
да ладно....:smilingimp: :smilingimp: :smilingimp: :smilingimp: :smilingimp: :screamcat: :screamcat: :screamcat: :screamcat:
ты же видишь, что человек только начинает пытаться что-то делать, зачем сразу вводить в заблуждение-то...
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
смотри, индекс это порядковый номер функции в интерфейсе

вот например 2 интерфейса


Код:
Expand Collapse Copy
class IFirst
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}

class ISecond
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}

точно так же и в кс(ну там соотвественно всё разно(см. лик сурсов кс))
тк это с++ то отсчет начинается с нуля
т.е. FirstFunction имеет индекс 0 и так далее

далее на счет хуков твоих

Код:
Expand Collapse Copy
IFirst* pFirst = CreateInterface("IFirst001");
ISecond* pSecond = CreateInterface("ISecond001");

extern void __stdcall IFirst_FirstFunction_Hooked();
extern void __stdcall ISecond_FirstFunction_Hooked();

VirtualHook(pFirst, 0, IFirst_FirstFunction_Hooked);
VirtualHook(pSecond, 0, ISecond_FirstFunction_Hooked);

это конечно же всё образно, но надеюсь поймешь

так вот мы получили интерфейсы и в каждом хукнули функцию под индексом 0
extern обозначает что функция должна будет объявиться где-то в другом файле

вообще то 5
Так-то +- понял
Но насколько я понимаю, заранее лежащего красивого списка, в какой функции какой интерфейс, под каким индексом лежит нигде нет?
в сурсах ток копаться?
 
Так-то +- понял
Но насколько я понимаю, заранее лежащего красивого списка, в какой функции какой интерфейс, под каким индексом лежит нигде нет?
в сурсах ток копаться?
смотри, можешь сделать вот так

сейчас открыть иду, найти нужный тебе интерфейс с помощью ClassInformer'a(или другого подобного плагина)
с помощью SigMaker'a(или другого подобного плагина) создать сигнатуры каждой, несущей смысл для чита, функции и после апдейта по сигнатурам обновлять индексы

а если прям лень, то смотри индексы тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
и тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
(не реклама)
там есть практически все нужные функции
 
смотри, можешь сделать вот так

сейчас открыть иду, найти нужный тебе интерфейс с помощью ClassInformer'a(или другого подобного плагина)
с помощью SigMaker'a(или другого подобного плагина) создать сигнатуры каждой, несущей смысл для чита, функции и после апдейта по сигнатурам обновлять индексы

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

а если прям лень, то смотри индексы тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
и тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
(не реклама)
там есть практически все нужные функции

А вот это действительно полезно, нашел
C++:
Expand Collapse Copy
    sound.init(interfaces->sound);
    sound.hookAt(IS_WIN32() ? 5 : 6, emitSound);

и сделал что-то вот такое в легендваре
C++:
Expand Collapse Copy
    hooks::engine_hook = new vmthook(reinterpret_cast<DWORD**>(m_enginesound()));
    hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook), 5);

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



А вот это действительно полезно, нашел
C++:
Expand Collapse Copy
    sound.init(interfaces->sound);
    sound.hookAt(IS_WIN32() ? 5 : 6, emitSound);

и сделал что-то вот такое в легендваре
C++:
Expand Collapse Copy
    hooks::engine_hook = new vmthook(reinterpret_cast<DWORD**>(m_enginesound()));
    hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook), 5);

оно скомпилировалось, и я уже рад что могу двигатся дальше
ну всё, начало положено, удачи
 
Блин, если в hooks.cpp лежит
C++:
Expand Collapse Copy
    vmthook* engine_sound_hook;
а в hooks.hpp
Код:
Expand Collapse Copy
    extern vmthook* engine_sound_hook;
то крашит, уже день понять не могу что не так
закомментил
C++:
Expand Collapse Copy
    //hooks::engine_hook = new vmthook(reinterpret_cast<DWORD**>(m_enginesound()));
    //hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook), 5);

остально оставил, не крашит при инжекте терь

Ток блин, рил, хз что я не так хукаю в main.cpp, другие хуки такие же
похоже, нужно ещё и hooked_enginesound.cpp построить хзкак, буду тыкаться
 
Последнее редактирование:
я понял что в инициализации хуков должно быть
hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_enginesound), 5);
(концовка изменилась) но блин, как писать hooked_enginesound вообще хз
 
покажи определение этой функции

вот примерно такая должна быть у тебя функция

Код:
Expand Collapse Copy
using EmitSound_t = void(__thiscall*)(void*, int, int, const char*, unsigned int, const char*, float, int, int, int, int, Vector, Vector, void*, bool, float, int, void*);

void __stdcall engine_sound_hook(void* filter, int entityIndex, int channel, const char* soundEntry,unsigned int soundEntryHash, const char* sample, float volume, int seed, int soundLevel, int flags, int pitch, Vector origin, Vector direction, void* utlVecOrigins, bool updatePositions, float soundtime, int speakerentity, void* soundParams)
{
static auto original_fn = engine_hook->get_func_address<EmitSound_t>(5);
// твой код
original_fn(filter, entityIndex, channel, soundEntry, soundEntryHash, sample, volume, seed, soundLevel, flags, pitch, origin, direction, utlVecOrigins, updatePositions, soundtime, speakerentity, soundParams);
}
 
Последнее редактирование:
Назад
Сверху Снизу