08-03-2016, 01:58 PM
Zubastic Написал:Спасибо, вечером проверю, А модификация существующих пакетов работает корректно?
Ну если меняешь константные по размеру переменные, например всякие id'шники, то да. Или если меняешь строки на равные/более короткие, тогда тоже, достаточно остаток строки забить L'\0', и нормально. А вот если в сторону увеличения менять те же строки, то надо старый пакет удалять, и на его основе делать новый, как у меня собственно и сделано.
С другой стороны, никто не отменял округление выделяемого размера памяти, есть предположение, что для выделения памяти используется VirtualAlloc, который в принципе меньше размера страницы (4кб) не выделяет. Так что можно попробовать забить на реаллокацию, и тупо прямо в пакет нахерачить сверху данных, и посмотреть, что выйдет. Вечерком гляну.
Но может и оказаться, что на основе VirtualAlloc там построен свой пул памяти, который уже может довольно болезненно относиться к перезатиранию памяти сверх выделенной, т.е. можно залезть в границы другого пакета, который потрет твой, но это все нужно проверять.
Есть еще вариант, он не очень красивый, но тем не менее. Можно перехватывать вызов gmalloc, и если игра пытается выделить место под пакет (первый параметр == L"NetPacket"), тогда меняем размер на 64кб, например, которых точно хватит на любые изощрения. Тогда можно будет модифицировать любые игровые пакеты прямо на лету, как в большую, так и меньшую сторону, без всяких утечек памяти и реаллокации.