Гайд Продолжение. вбе(партикли)

Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
а как мы понимаем в каких случаях использовать AnyPtr, а в каких ClassPtr? (например ClassPtr panorama, если мы присвоим AnyPtr будет примерно одно и то же?)
ClassPtr это указатель на класс, AnyPtr это указатель на что угодно, суть одна и та же просто у ClassPtr дополнительные функции для удобств типа считывания по оффсету и т.д. . ClassPtr я уже заменил на указатель на класс который я описываю
class PanoramaUI1 : public VirtualClass {
public:
AnyPointer GetPanorama2() {
return Member(0x28);
}
};
Pointer<PanoramaUI1> Panorama1 = 0;
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2020
Сообщения
42
Реакции[?]
3
Поинты[?]
0
ClassPtr это указатель на класс, AnyPtr это указатель на что угодно, суть одна и та же просто у ClassPtr дополнительные функции для удобств типа считывания по оффсету и т.д. . ClassPtr я уже заменил на указатель на класс который я описываю
class PanoramaUI1 : public VirtualClass {
public:
AnyPointer GetPanorama2() {
return Member(0x28);
}
};
Pointer<PanoramaUI1> Panorama1 = 0;
так примерно и думал, спасибо
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
А что за оффсет такой интересный m_iTaggetVisibleByTeam? Сейчас попробовал его использовать и когда врага не видно он равен 22, когда видно 30, можно через него VBE реализовать?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2020
Сообщения
42
Реакции[?]
3
Поинты[?]
0
в чем особенность использования конструкции #define ON_EJECT 1, это как вариабл?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
А что за оффсет такой интересный m_iTaggetVisibleByTeam? Сейчас попробовал его использовать и когда врага не видно он равен 22, когда видно 30, можно через него VBE реализовать?
он тока на локал игрока работает. для всех остальных вбе делается как описано в соседнем туторе
в чем особенность использования конструкции #define ON_EJECT 1, это как вариабл?
это обычный макрос, вместо того чтобы писать единичку и думать что она значит я пишу ON_EJECT и сразу понимаю что это и зачем(это для класса _Memory, там два типа памяти - та которую нужно удалять по выходу из чита(ON_EJECT, все что нужно независимо от того в матче ты или нет) и та которую нужно удалять после выхода из матча(ON_EXIT_MATCH,герои и т.д., то есть то что не существует вне матча)). альтернативно можно руками все по отдельности new, delete но я решил просто объединить все это в один массив чтобы вместо 100 delete писать один Memory->Delete
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
А где можно подробнее прочитать про хуки? Просто не особо понимаю как это делать
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
А где можно подробнее прочитать про хуки? Просто не особо понимаю как это делать
Пожалуйста, авторизуйтесь для просмотра ссылки.
методов хуков дофига. тут применяется конкретно байтпатч. он состоит просто в передаче управления через jmp/call/push+retn. игра вызывает свою функцию, а там jmp(call/push+retn) на твою функцию, и в итоге получается что уже твоя функция контроллирует что происходит в программе в данный момент. она может сделать какие-то свои действия, потом вызвать/не вызвать оригинал.
чтобы сделать байтпатч хук ты просто берешь и заменяешь байты инструкций в нужной функции. конкретно тут с учетом того что инжект через manual map, то есть память под чит находится в куче(heap), используется mov rax, [8 byte absolute] + jmp rax. если ты через Standart Injection(чистый loadlibrary) инжектишь то можешь просто jmp [4 byte rel]. байты на эти байтпатчи можешь найти в x64dbg->Assemble собрав там свой хук руками, либо в интернетах.
в итоге ты берешь находишь в функции приятное место, заменяешь там байты на свой хук, в своем хуке делаешь грязные дела а потом выполняешь оригинальные инструкции которые ты затер своим байтпатчем, потом вызываешь оригинал если надо
 
Начинающий
Статус
Оффлайн
Регистрация
15 Дек 2018
Сообщения
146
Реакции[?]
9
Поинты[?]
0
Тоесть это тот самый колбек который мне нужно будет заменить на свой?
 

Вложения

Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
Тоесть это тот самый колбек который мне нужно будет заменить на свой?
нихрена не понятно из обрезаного куска скрина. тебе нужно либо коллбек с оригинального на свой заменить(сложный подход потому что тебе сначала нужно будет найти где он хранится. ну как сложный. на самом деле не очень но тем не менее), типо вмт хука, только вместо вмт там будет своя конструкция похожая по своему назначению, либо в оригинальном коллбеке сделать хук на свой коллбек.

то что я в туторе назвал RegisterCheto-tamCallBack это хрень полная оказывается, это просто мусорная функция какая-то, то ли она раньше не была мусорной то ли я слепой)) настоящий RegisterCheto-tamCallback находится внизу, call [r10+b8](CNetworkMessages::RegisterNetworkFieldChangeCallbackInternal)

еще раз, callback это то что вызывается при каком-то действии, то есть это "реакция" на событие так сказать. указатель на этот коллбек хранится где-то в памяти доты. ты либо сам указатель заменяешь, либо делаешь байтпатч хук в самом оригинальном коллбеке

советую через байтпатч сделать как минимум чтобы научиться. а потом еще раз то же самое можешь сделать по-другому, заглянешь в networksystem.dylib и там почекаешь этот CNetworkMessages::blablabla и попробуешь просто указатель заменить
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
А смотри, немножко не понял что за трамплины
original:
xxx
jmp myFunc
xxx

myFunc:
my_dirty_shit
jmp original+offset//обратно, по желанию

в myFunc код jmp original+offset это и будет трамплин. то есть это вызов настоящего оригинала кароче.
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Начинающий
Статус
Оффлайн
Регистрация
12 Сен 2020
Сообщения
42
Реакции[?]
3
Поинты[?]
0
какую роль time играет в итерировании сущностей, в чем идея time заключена в целом, можно ли было на что-то другое заменить?
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
какую роль time играет в итерировании сущностей, в чем идея time заключена в целом, можно ли было на что-то другое заменить?
time это просто отметка времени когда враг был последний раз засвечен, нужно дабы вычислять кулдауны в тумане(у сущностей вся инфа замораживается как только они уходят в туман, то есть кулдаун абилки будет в памяти таким же каким он был когда сущность ушла в туман, ты вычитаешь из этого GetGameTime()-время_из_итерации и вот тебе реальный кулдаун)
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
760
Реакции[?]
328
Поинты[?]
60K
это ассемблер?
да. типо создаешь через virtualalloc страничку, в этой страничке байтики инструкций call my_super_function потом оригинальные 4 инструкции потом mov rax, original+xxx;jmp rax
 
Сверху Снизу