Вопрос Как найти метод из виртуальной таблицы?

Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2024
Сообщения
23
Реакции[?]
0
Поинты[?]
0
1) Подскажите, как найти нужный метод, а именно GetLocalPlayer в самой dll. В сравнении с dylib уже давно все поменялось, и индексы и код....опиратся на это оч сложно. Еле как нашел виртуальную таблицу через хрефы, а дальше хз как.

Вот что в IDA щяс отображается и как понять какой из них GetLocalPlayer ?


1714632831392.png
--------------

2) Или мне проще просто найти интефейс CPanoramaScript_GameEvents, а уже из него вызвать нужные мне методы, ведь дока обновляется вместе с игрой. Я прав?
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
269
Реакции[?]
42
Поинты[?]
33K
1) Подскажите, как найти нужный метод, а именно GetLocalPlayer в самой dll. В сравнении с dylib уже давно все поменялось, и индексы и код....опиратся на это оч сложно. Еле как нашел виртуальную таблицу через хрефы, а дальше хз как.

Вот что в IDA щяс отображается и как понять какой из них GetLocalPlayer ?


--------------

2) Или мне проще просто найти интефейс CPanoramaScript_GameEvents, а уже из него вызвать нужные мне методы, ведь дока обновляется вместе с игрой. Я прав?
Если я не ошибаюсь в CEngineClient по индексу 44 лежит функция для получения индекса игрока (в кс2 это делается так).

void __fastcall()(void, int*, int);

Во второй аргумент пихаешь указатель на переменную где будет индекс игрока, а в третий сплит скрин (ну или просто 0)
 
Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2024
Сообщения
23
Реакции[?]
0
Поинты[?]
0
Для просмотра содержимого вам необходимо авторизоваться.


А ты не знаешь как вообще находят эти индексы? Почему 44 а не 32? Идой если смотреть, то там вообще каша в engine.dll
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
644
Реакции[?]
102
Поинты[?]
65K
Hidden content

А ты не знаешь как вообще находят эти индексы? Почему 44 а не 32? Идой если смотреть, то там вообще каша в engine.dll
проходишся по вмт смотришь код функции что она делает вообще , сравниваешь со старой версией и тд
 
Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2024
Сообщения
23
Реакции[?]
0
Поинты[?]
0
проходишся по вмт смотришь код функции что она делает вообще , сравниваешь со старой версией и тд
Это мне говорит чувак который юзает в своих проектах либы из чужих проектов. Завтра античит забанит зависимости и учетки с твоим проектом накроются медным тазом.
Ты для начала открой проект dylib и текущий и сравни, там все давно куски кода вынесены в отдельные функции, и код поменялся давно. Все таки разница 8 лет уже.
Так что сделай одолжение, не пиши больше просто, чтобы написать
 
Nike.lua
Олдфаг
Статус
Оффлайн
Регистрация
13 Окт 2020
Сообщения
2,748
Реакции[?]
1,466
Поинты[?]
2K
Это мне говорит чувак который юзает в своих проектах либы из чужих проектов. Завтра античит забанит зависимости и учетки с твоим проектом накроются медным тазом.
Ты для начала открой проект dylib и текущий и сравни, там все давно куски кода вынесены в отдельные функции, и код поменялся давно. Все таки разница 8 лет уже.
Так что сделай одолжение, не пиши больше просто, чтобы написать
там буквально либералист расписал все в одной из его тем.

ВМТ функции могли меняться (a.k.a добавляться и изменяться) - тебе просто надо найти примерно такую же функцию по коду (тут уже можешь f5 жмякнуть) и получить ее индекс
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
759
Реакции[?]
328
Поинты[?]
60K
1) Подскажите, как найти нужный метод, а именно GetLocalPlayer в самой dll. В сравнении с dylib уже давно все поменялось, и индексы и код....опиратся на это оч сложно. Еле как нашел виртуальную таблицу через хрефы, а дальше хз как.

Вот что в IDA щяс отображается и как понять какой из них GetLocalPlayer ?


--------------

2) Или мне проще просто найти интефейс CPanoramaScript_GameEvents, а уже из него вызвать нужные мне методы, ведь дока обновляется вместе с игрой. Я прав?
"Еле как нашел виртуальную таблицу через хрефы"
Class Informer?
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
бери индекс из старой версии где он известен(не из древней(дилибы это 25 января 2016 года), а например из версии которой несколько месяцев) и ищи в окресностях(-5, +5 можешь взять) похожую функцию
например 1 апр 2024 это была функция 27. качаешь engine2.dll от 1 апреля(точнее 29 марта)(если нету)(апп 570 депот 373303 манифест 4671811885431132403)(steamcmd(в стим клиенте она тоже есть - steam://open/console) - download_depot 570 373303 4671811885431132403)
смотришь как там выглядит 27 функция. ищешь похожие в текущей длл вокруг 27 индекса(25,26,27,28,29 ты понял)
вот как она выглядит 27'я в версии 1 апреля
1714658622903.png
вот скрин с версии ~19 апреля или гдето так
1714658596602.png
либо смотри https://yougame.biz/threads/318553/#post-3084344
 
Начинающий
Статус
Оффлайн
Регистрация
11 Апр 2024
Сообщения
23
Реакции[?]
0
Поинты[?]
0
Для просмотра содержимого вам необходимо авторизоваться.


Например, как вы поняли что этот код, точно GetLocalPlayer? по ассемблерному коду ну ни как не понять что это тоже самое что и в старой либе 2016 года. Единственное что в глаза бросается это FFFFFFFF


1714665908591.png

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

Например, как вы поняли что этот код, точно GetLocalPlayer? по ассемблерному коду ну ни как не понять что это тоже самое что и в старой либе 2016 года. Единственное что в глаза бросается это FFFFFFFF



Просто мне интересен сам принцип того, как это находится, а не сам взлом доки2
я еще раз говорю хватит смотреть на древнюю 2016 года версию, там уже многое поменялось, смотри на то что было недавно и работало у людей
тем не менее;
ты смотришь на дилибы, а там другие конвенции вызова
вот функция из длл от 25 января 2016 года
1714671599846.png
прошу заметить
mov rbx, rdx
...
mov dword [rbx], blablabla
mov rax, rbx
по конвенции майкрософт, именно так структуры передаются по значению из связанных методов(аргумент в rdx - адрес caller-allocated места под структуру, в rax после вызова лежит этот же самый адрес)
следовательно мы имеем функцию в стиле
struct PlayerID_t
{
int value;
}
...
PlayerID_t GetLocalPlayer(CSplitScreenSlot)
мы видим что в функции 2024 - такая же малина со структурой
и такая же малина с интом -1(0xFFFFFFFF) в случае фейла
а еще если ты посмотришь на функцию на 0xC8(25 index) у NetworkClient(найди его вмт в Names вкладке в дилибе, `vtable for'CNetworkClientService) ты увидишь что там лежит CNetworkClientService::GetIGameClient(void)
т.е. мы получаем CNetworkGameClient и дальше ему делегируем на его 0x100(32 index) функцию, которая выглядит так:
1714672226692.png
сплитскринслот умножается на 32(shl rax, 5 - 32 это два в степени пять. сдвиг(левый/правый) в системе счисления это умножение/деление(соответственно) на степень основания(в нашем случае двоичная система основание 2)). в современном коде там умножается на 24(lea rcx [rax + rax*2] это как rcx = rax * 3; далее rcx * 8 умножается, т.е. rax * 24)
ну и оффсет незначительно поменялся был D4 в 2016 стал F8 щас
так вот в нашей функции современной
1714672777553.png
тоже используется CNetworkGameClient

ну и ты всегда можешь поставить бп и посмотреть кто вызывает, идентифицировать это место(например по хрефам на строки вокруг) и сопоставить с дилибом(поискав там этот хреф)
например в современной доте среди вызывателей есть в client.dll функция с хрефом "CL: client listens to event ',27h,'%s',27h,' unknown by server."(ну там ничего интересного) и есть еще одна с "snd_soundmixer".
ищем в libclient.dylib "snd_soundmixer" находим C_BasePlayer::CheckForLocalPlayer(C_BasePlayer *) и видим в нем вызов


следовательно мы нашли что надо(раз саундмиксер хуйня эта в современной доте вызывает именно эту функцию, прямо как 8 лет назад)
 
артём диджитал дизайнер
Участник
Статус
Оффлайн
Регистрация
10 Окт 2020
Сообщения
489
Реакции[?]
472
Поинты[?]
61K
Это мне говорит чувак который юзает в своих проектах либы из чужих проектов.
В какой вселенной это считается плохой практикой? Да и че ты вообще такой злой, он же не написал тебе вообще ничего плохого)
 
Пользователь
Статус
Оффлайн
Регистрация
22 Авг 2022
Сообщения
269
Реакции[?]
42
Поинты[?]
33K
там буквально либералист расписал все в одной из его тем.

ВМТ функции могли меняться (a.k.a добавляться и изменяться) - тебе просто надо найти примерно такую же функцию по коду (тут уже можешь f5 жмякнуть) и получить ее индекс
1) Подскажите, как найти нужный метод, а именно GetLocalPlayer в самой dll. В сравнении с dylib уже давно все поменялось, и индексы и код....опиратся на это оч сложно. Еле как нашел виртуальную таблицу через хрефы, а дальше хз как.

Вот что в IDA щяс отображается и как понять какой из них GetLocalPlayer ?


--------------

2) Или мне проще просто найти интефейс CPanoramaScript_GameEvents, а уже из него вызвать нужные мне методы, ведь дока обновляется вместе с игрой. Я прав?
вообще для ТС’а могу сказать что не во всех
играх такое будет. RTTI инфа большая редкость, по факту ты можешь просто через чит энжин найти адрес игрока и через бряк найти инструкцию где лежит игрок. А дальше по сигнатуре гетать его.
 
Пользователь
Статус
Оффлайн
Регистрация
8 Апр 2022
Сообщения
644
Реакции[?]
102
Поинты[?]
65K
Это мне говорит чувак который юзает в своих проектах либы из чужих проектов. Завтра античит забанит зависимости и учетки с твоим проектом накроются медным тазом.
Ты для начала открой проект dylib и текущий и сравни, там все давно куски кода вынесены в отдельные функции, и код поменялся давно. Все таки разница 8 лет уже.
Так что сделай одолжение, не пиши больше просто, чтобы написать
Какие учетки, о чем речь? Как античит может "забанить зависимости" и вообще о каких зависимостях идёт речь? . И найти индекс так же просто как было раньше.
И вообще, что не так я сказал? Если тебе так сложно найти вмт индекс(хотя выше уже все расписали) , можешь перебрать локал контроллеров, у которых есть нет вар islocalplayer, и там брать ассигнед хиро
 
Начинающий
Статус
Оффлайн
Регистрация
30 Мар 2020
Сообщения
307
Реакции[?]
24
Поинты[?]
12K
Это мне говорит чувак который юзает в своих проектах либы из чужих проектов. Завтра античит забанит зависимости и учетки с твоим проектом накроются медным тазом.
Ты для начала открой проект dylib и текущий и сравни, там все давно куски кода вынесены в отдельные функции, и код поменялся давно. Все таки разница 8 лет уже.
Так что сделай одолжение, не пиши больше просто, чтобы написать
Античит? Чел я ганяю с включенным чит енджином и в пабе и в рейте и просто нопаю 2 инструкции чтобы видеть партикли в тумане)))))))))))))))))))))
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
759
Реакции[?]
328
Поинты[?]
60K
Античит? Чел я ганяю с включенным чит енджином и в пабе и в рейте и просто нопаю 2 инструкции чтобы видеть партикли в тумане)))))))))))))))))))))
ты это к чему?
ты понимаешь разницу между детектом и реакцией(бан, флаг и тд)?
то что ты гоняешь и тебя не банят это не значит что тебя не детектят, тебя просто решают не банить; к тебе могут другие меры применяться(более мягкие), либо их могут применять позже(например через какой-то срок забанить). это уже вопрос не детекта а реакции и он с античитом никак не связан
 
Новичок
Статус
Оффлайн
Регистрация
24 Дек 2023
Сообщения
2
Реакции[?]
0
Поинты[?]
0
ты это к чему?
ты понимаешь разницу между детектом и реакцией(бан, флаг и тд)?
то что ты гоняешь и тебя не банят это не значит что тебя не детектят, тебя просто решают не банить; к тебе могут другие меры применяться(более мягкие), либо их могут применять позже(например через какой-то срок забанить). это уже вопрос не детекта а реакции и он с античитом никак не связан
Полностью с этим согласен. Однако то что они держат людей с бан флагом годами, это странно.
Практически везде одинаковый скрипт бана. Ставят ред флаг и потом бан либо на волне либо втч короткого времени.
Я проверил пару акаунтов на которых я в течении двух лет играл с чит энжином и те где тестировал читы - НИОДИН так и не забанен на сегодняшний день.
Хотя было две массовые волны банов.
 
Сверху Снизу