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

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

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

но блин, я не понимаю откуда взять цифру после запятой
 
working ?
Забаненный
Статус
Оффлайн
Регистрация
9 Ноя 2019
Сообщения
384
Реакции[?]
208
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Методом проб и ошибок я дошёл до строчки hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::engine_sound_hook),0);

но блин, я не понимаю откуда взять цифру после запятой
index твоего хука
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
index твоего хука
Такс, судя по информации с анкновнчитс 2019 года, это 5

но в легендваре индекс 5 уже у hooked_packetstart, так что или что-то изменилось в ксго, или я туплю, хах
да, но возможно методом тыка разберусь
 
working ?
Забаненный
Статус
Оффлайн
Регистрация
9 Ноя 2019
Сообщения
384
Реакции[?]
208
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Такс, судя по информации с анкновнчитс 2019 года, это 5

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

да, но возможно методом тыка разберусь
индекс эмит саунда не 5... :flushed: :flushed: :flushed: :flushed: :flushed:
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
386
Реакции[?]
108
Поинты[?]
17K
Такс, судя по информации с анкновнчитс 2019 года, это 5

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

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

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


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

class ISecond
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}
точно так же и в кс(ну там соотвественно всё разно(см. лик сурсов кс))
тк это с++ то отсчет начинается с нуля
т.е. FirstFunction имеет индекс 0 и так далее

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

Код:
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
 
working ?
Забаненный
Статус
Оффлайн
Регистрация
9 Ноя 2019
Сообщения
384
Реакции[?]
208
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
386
Реакции[?]
108
Поинты[?]
17K
working ?
Забаненный
Статус
Оффлайн
Регистрация
9 Ноя 2019
Сообщения
384
Реакции[?]
208
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
смотри, индекс это порядковый номер функции в интерфейсе

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


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

class ISecond
{
    virtual void FirstFunction() = 0;
    virtual void SecondFunction() = 0;
}
точно так же и в кс(ну там соотвественно всё разно(см. лик сурсов кс))
тк это с++ то отсчет начинается с нуля
т.е. FirstFunction имеет индекс 0 и так далее

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

Код:
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
Так-то +- понял
Но насколько я понимаю, заранее лежащего красивого списка, в какой функции какой интерфейс, под каким индексом лежит нигде нет?
в сурсах ток копаться?
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
386
Реакции[?]
108
Поинты[?]
17K
Так-то +- понял
Но насколько я понимаю, заранее лежащего красивого списка, в какой функции какой интерфейс, под каким индексом лежит нигде нет?
в сурсах ток копаться?
смотри, можешь сделать вот так

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

а если прям лень, то смотри индексы тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
и тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
(не реклама)
там есть практически все нужные функции
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
смотри, можешь сделать вот так

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

а если прям лень, то смотри индексы тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
и тут
Пожалуйста, авторизуйтесь для просмотра ссылки.
(не реклама)
там есть практически все нужные функции
А вот это действительно полезно, нашел
C++:
    sound.init(interfaces->sound);
    sound.hookAt(IS_WIN32() ? 5 : 6, emitSound);
и сделал что-то вот такое в легендваре
C++:
    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);
оно скомпилировалось, и я уже рад что могу двигатся дальше
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
386
Реакции[?]
108
Поинты[?]
17K
мне кажется, это прям высший пилотаж. Если разберусь с более простыми штуками, то при создании чита для другой игры можно, но я выбрал ксго в том числе и потому, что информации много (хоть я её и не понимаю)



А вот это действительно полезно, нашел
C++:
    sound.init(interfaces->sound);
    sound.hookAt(IS_WIN32() ? 5 : 6, emitSound);
и сделал что-то вот такое в легендваре
C++:
    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);
оно скомпилировалось, и я уже рад что могу двигатся дальше
ну всё, начало положено, удачи
 
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
Блин, если в hooks.cpp лежит
C++:
    vmthook* engine_sound_hook;
а в hooks.hpp
Код:
    extern vmthook* engine_sound_hook;
то крашит, уже день понять не могу что не так
закомментил
C++:
    //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 построить хзкак, буду тыкаться
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
67
Реакции[?]
13
Поинты[?]
0
я понял что в инициализации хуков должно быть
hooks::engine_sound_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_enginesound), 5);
(концовка изменилась) но блин, как писать hooked_enginesound вообще хз
 
how to доказать всем что не еблан
Пользователь
Статус
Оффлайн
Регистрация
14 Авг 2019
Сообщения
386
Реакции[?]
108
Поинты[?]
17K
покажи определение этой функции

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

Код:
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);
}
 
Последнее редактирование:
Сверху Снизу