Вопрос Нерабочие Protobufы

Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Хукнув PostReceivedNetMessage в NetChannel, я обнаружил, что методы у протобафов типа field_count возвращают мусор. У CDOTAEntityMsg_InvokerSpellCast ровно два поля, но field_count у дескриптора возращает 400 и более, остальное либо тоже мусор, либо сразу крашит. Пришлось просто по оффсетам поля брать
Шо делать?
GetDescriptor возращает вот эту чушь
Screenshot_407.png
 
Последнее редактирование:
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Какой версии протобаф? Сам билдил?
3.21.12, забилдил по мануалу
Не помню, что у меня там с vcpkg не так пошло, но там вроде ведь тоже современная версия
Предлагаете даунгрейд?
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
3.21.12, забилдил по мануалу
Не помню, что у меня там с vcpkg не так пошло, но там вроде ведь тоже современная версия
Предлагаете даунгрейд?
Не знаю как сейчас, года 2 назад я билдил тот же что Lwss советовал. Лично не припомню чтобы были строки по которым можно определить версию PB которую использует дота.
v3.15.3 юзал, но там тоже проблемы были кажется со small string optimization какое то несоответствие в ABI. Так что если 3.15.3 не заработает - смотри в дебагере каждый вызов
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
Не знаю как сейчас, года 2 назад я билдил тот же что Lwss советовал. Лично не припомню чтобы были строки по которым можно определить версию PB которую использует дота.
v3.15.3 юзал, но там тоже проблемы были кажется со small string optimization какое то несоответствие в ABI. Так что если 3.15.3 не заработает - смотри в дебагере каждый вызов
Хорошо, спасибо, опробую когда вернусь за ПК
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
@hell0hell0 reporting in:
Всё чудесным образом заработало. Теперь я могу получать доступ к полям в сообщениях как LWSS завещал
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
CCLCMsg_Move и СNetMsg_Tick не крашат?
Скорее всего не будут(тем более что их тупо фильтровать можно), в любом случае у меня Extreme Injector сказал "adios". Сначала LoadLibrary returns NULL, потом он даже не запускается
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
Скорее всего не будут(тем более что их тупо фильтровать можно), в любом случае у меня Extreme Injector сказал "adios". Сначала LoadLibrary returns NULL, потом он даже не запускается
У тебя кстати imgui в отдельном окне открывается (Win11).
1676118995122.png
 
Последнее редактирование:
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
У тебя кстати imgui в отдельном окне открывается (Win11).
Посмотреть вложение 238272
Это только в Debug, чтобы не загораживать экран на брейкпоинте или при краше. В Release конфигурации всё как надо

Кстати это не первый раз с хуёвой работой Extreme Injector, проблема лоадлайбрари уже была + был период, когда какой-то HANDLE где-то не закрывался и DLL как бы оставался в процессе
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Это только в Debug, чтобы не загораживать экран на брейкпоинте или при краше. В Release конфигурации всё как надо

Кстати это не первый раз с хуёвой работой Extreme Injector, проблема лоадлайбрари уже была + был период, когда какой-то HANDLE где-то не закрывался и DLL как бы оставался в процессе
экстрим инжектор это сильно устаревший частичный говнопорт блекбона на c#, не удивляйся что он хуево работает(блекбон и современный частично хуево работает)
1676128098691.png
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
экстрим инжектор это сильно устаревший частичный говнопорт блекбона на c#, не удивляйся что он хуево работает(блекбон и современный частично хуево работает)
Посмотреть вложение 238282
Пожалуйста, авторизуйтесь для просмотра ссылки.
Ах вот оно чё. Сам Blackbone у меня не компилируется из-за какой-то поебни с типами в коде. Ну его нахер, пойду свой собственный лоадер™ напишу
 
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Ах вот оно чё. Сам Blackbone у меня не компилируется из-за какой-то поебни с типами в коде. Ну его нахер, пойду свой собственный лоадер™ напишу
да там недочёты маленькие есть в сурсах. нетрудно пофиксить правда. я тебе советую чисто в образовательных целях хотя бы попытаться это сделать.
ошибка вроде если я правильно помню в строке(возможно там и другие есть)
Blackbone-master\src\BlackBone\Process\ProcessModules.cpp:
ustr.Buffer = modName->ptr<std::decay_t<decltype(ustr)>::type>() + sizeof( ustr );
выебывается на то что ожидало тип а не выражение(в темплейте к ptr)
подсказка
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
Inside a declaration or a definition of a template, typename can be used to declare that a dependent qualified name is a type.
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
да там недочёты маленькие есть в сурсах. нетрудно пофиксить правда. я тебе советую чисто в образовательных целях хотя бы попытаться это сделать.
ошибка вроде если я правильно помню в строке(возможно там и другие есть)
Blackbone-master\src\BlackBone\Process\ProcessModules.cpp:
ustr.Buffer = modName->ptr<std::decay_t<decltype(ustr)>::type>() + sizeof( ustr );
выебывается на то что ожидало тип а не выражение(в темплейте к ptr)
подсказка
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Код:
Inside a declaration or a definition of a template, typename can be used to declare that a dependent qualified name is a type.
Да уж, метапрограммирование на сишке выглядит инфернально
Пока игрался с инжектом, Cheat Engine сообщил мне, что при выполнении LoadLibrary не находятся какие-то OpenGL-related функции(glColor, glViewport), причём только при попытке использовать функции протобафов. Пиздец какой-то. Ещё и протобаф резко начал компилироваться в отдельную DLLку. Можно ли её как-то по-нормальному статически скомпилировать?
Ладно, ну нахуй эти протобафы, проблем больше, чем пользы
 
Последнее редактирование:
Участник
Статус
Оффлайн
Регистрация
23 Май 2019
Сообщения
781
Реакции[?]
331
Поинты[?]
63K
Да уж, метапрограммирование на сишке выглядит инфернально
Пока игрался с инжектом, Cheat Engine сообщил мне, что при выполнении LoadLibrary не находятся какие-то OpenGL-related функции(glColor, glViewport), причём только при попытке использовать функции протобафов. Пиздец какой-то. Ещё и протобаф резко начал компилироваться в отдельную DLLку. Можно ли её как-то по-нормальному статически скомпилировать?
Ладно, ну нахуй эти протобафы, проблем больше, чем пользы
да там настройки надо в проекте указывать мол статик лайбрари. погугли поищи как и где(и не забывай конфигурацию правильную выбрать в настройках проекта. условно если ты собираешь релиз версию х64 то и в настройках проекта тоже выбирай релиз х64 а то настроишь условно релиз х86 а потом будешь х64 компилить и думать хули настройки игнорируются).
+ там еще есть такая настройка MD/MT она указывает какой вариант с++ срт использовать
срт это библиотеки со всякой хуитой из стандартной библиотеки(условно всякие Сшные фопены хуёпены и тд) - они бывают либо длл(это тот самый VC++ Redistributable изза которого иногда там игры не запускаются пишет не найдена библиотека и тд) либо статик(.lib) которая вшивается прямо в твою exe/dll(естественно увеличивая размер файла на выходе). так вот все твои библиотеки которые ты юзаешь(будь то протобафы хуяфы и тд) должны использовать тот же вариант CRT что и сама твоя приложуха. условно если твоя дллка использует статик линк срт(у меня например у друга не инжектилась длл изза редиста этого ебаного, он качал редист все равно не помогло, тогда я просто статик линк срт поставил пересобрал(либы которые юзал тоже пришлось пересобирать и ставить там статик срт) у меня дллка стала побольше размером и все норм инжектилось у друга) то и протобафы и прочий шлак тоже должен быть собран с использованием статик линк срт, и наоборот. преимущество длл срт в том что длл она апдейтится, баги там всякие могут фикситься и тд - и твоя приложуха все это получит т.к. она функции из дллки берет и ей похуй какая там версия. а статик срт там прямо эти функции со всеми их багами если они там имеются так и вшиваются напрямую в твой код сразу и там уже хуй че поменяешь. зато статик срт там ебли нет с редистами хуистами
+ в некоторых либах нужно конкретно указывать(в виде #define'а в настройках проекта(ну там не дефайн конкретно но похожая хуйня)) что ты статик либу юзаешь(это уже от конкретной либы зависит, гдето надо, а гдето не надо, и дефайн везде разный) - это все написано в документации в инструкциях и тд
 
Ревёрсер среднего звена
Пользователь
Статус
Оффлайн
Регистрация
24 Ноя 2022
Сообщения
303
Реакции[?]
108
Поинты[?]
57K
да там настройки надо в проекте указывать мол статик лайбрари. погугли поищи как и где(и не забывай конфигурацию правильную выбрать в настройках проекта. условно если ты собираешь релиз версию х64 то и в настройках проекта тоже выбирай релиз х64 а то настроишь условно релиз х86 а потом будешь х64 компилить и думать хули настройки игнорируются).
+ там еще есть такая настройка MD/MT она указывает какой вариант с++ срт использовать
срт это библиотеки со всякой хуитой из стандартной библиотеки(условно всякие Сшные фопены хуёпены и тд) - они бывают либо длл(это тот самый VC++ Redistributable изза которого иногда там игры не запускаются пишет не найдена библиотека и тд) либо статик(.lib) которая вшивается прямо в твою exe/dll(естественно увеличивая размер файла на выходе). так вот все твои библиотеки которые ты юзаешь(будь то протобафы хуяфы и тд) должны использовать тот же вариант CRT что и сама твоя приложуха. условно если твоя дллка использует статик линк срт(у меня например у друга не инжектилась длл изза редиста этого ебаного, он качал редист все равно не помогло, тогда я просто статик линк срт поставил пересобрал(либы которые юзал тоже пришлось пересобирать и ставить там статик срт) у меня дллка стала побольше размером и все норм инжектилось у друга) то и протобафы и прочий шлак тоже должен быть собран с использованием статик линк срт, и наоборот. преимущество длл срт в том что длл она апдейтится, баги там всякие могут фикситься и тд - и твоя приложуха все это получит т.к. она функции из дллки берет и ей похуй какая там версия. а статик срт там прямо эти функции со всеми их багами если они там имеются так и вшиваются напрямую в твой код сразу и там уже хуй че поменяешь. зато статик срт там ебли нет с редистами хуистами
+ в некоторых либах нужно конкретно указывать(в виде #define'а в настройках проекта(ну там не дефайн конкретно но похожая хуйня) что ты статик либу юзаешь(это уже от конкретной либы зависит, гдето надо, а гдето не надо, и дефайн везде разный) - это все написано в документации в инструкциях и тд
Кстати статик версию протобафа я вполне себе скомпилировал(там флаг при сборке симейком выставить надо), как раз и написало, что не соответствует MTd и MDd и сотню ошибок линковки, что функции уже объявлены в системных библиотеках
Собрал GLFW и, собственно, свой проект с /MT и он таки дособирался до конца. Шаг за шагом как-то включаем в проект протобафы. Теперь вызов функций типа FieldDescriptor->name() или msg->DebugString() просто крашит(при попытке апгрейда до, скажем, 3.16.0 некоторые из них начинают возвращать мусор)
 
Начинающий
Статус
Оффлайн
Регистрация
12 Ноя 2022
Сообщения
63
Реакции[?]
23
Поинты[?]
3K
преимущество длл срт в том что длл она апдейтится, баги там всякие могут фикситься и тд - и твоя приложуха все это получит т.к. она функции из дллки берет и ей похуй какая там версия.
Основной плюс DLL crt в коммерческих читах в том что можно в лоадере собрать нужные импорты для текущего запуска системы(для одного запуска адреса общеиспользуемых дллок одинаковые) и отправить на сервер. При подготовке dll подставить все эти голые адреса, не в таблицу офк а просто в код. В итоге для другого запуска системы эта дллку без фикса адресов использовать уже будет нельзя. Ну и без crt чит меньше весит быстрее скачивается. Это на простом уровне идея конечно, сложнее делают гораздо.
 
Сверху Снизу