Показать сообщение отдельно
Непрочитано 03.08.2016, 13:58   #81
Пользователь

По умолчанию Re: C++ перехват пакетов

Цитата:
Сообщение от Zubastic Посмотреть сообщение
Спасибо, вечером проверю, А модификация существующих пакетов работает корректно?
Ну если меняешь константные по размеру переменные, например всякие id'шники, то да. Или если меняешь строки на равные/более короткие, тогда тоже, достаточно остаток строки забить L'\0', и нормально. А вот если в сторону увеличения менять те же строки, то надо старый пакет удалять, и на его основе делать новый, как у меня собственно и сделано.

С другой стороны, никто не отменял округление выделяемого размера памяти, есть предположение, что для выделения памяти используется VirtualAlloc, который в принципе меньше размера страницы (4кб) не выделяет. Так что можно попробовать забить на реаллокацию, и тупо прямо в пакет нахерачить сверху данных, и посмотреть, что выйдет. Вечерком гляну.

Но может и оказаться, что на основе VirtualAlloc там построен свой пул памяти, который уже может довольно болезненно относиться к перезатиранию памяти сверх выделенной, т.е. можно залезть в границы другого пакета, который потрет твой, но это все нужно проверять.

Есть еще вариант, он не очень красивый, но тем не менее. Можно перехватывать вызов gmalloc, и если игра пытается выделить место под пакет (первый параметр == L"NetPacket"), тогда меняем размер на 64кб, например, которых точно хватит на любые изощрения. Тогда можно будет модифицировать любые игровые пакеты прямо на лету, как в большую, так и меньшую сторону, без всяких утечек памяти и реаллокации.
f1redark вне форума Ответить с цитированием