Показать сообщение отдельно
Старый 14.10.2026, 21:46   #1
Владислt66
Нуб
Аватар для Владислt66
OFFLINE
Регистрация: 26.11.2015
Сообщений: 0
Благодарностей:
0 всего
Репутация: 1

Хук функции покупки


нашёл в клиенте конструктор покупки (адрес 0x00577380) и функцию отправки пакетов (0x005770F0). Выяснил, что конструктор собирает пакет вида 1d 00 ... | dword слота | count (15 байт), где dword — номер слота товара в магазине. Внутри он также обращается к коллекции «предпокупки» — то, что лежит в корзине окна магазина перед покупкой (нашёл функции begin/end/next для перебора).

Пробовал три подхода:

Собрать пакет руками и отправить через нативный send. Сервер покупку принимает, деньги списываются, присылает ответ с данными предмета (опкод 0x020C: instance-id, item_id, счётчик). Но предмет в инвентаре появляется только после перезахода в игру.

Вызвать конструктор и подменить номер слота уже в готовом пакете (в хуке send, перед отправкой). Результат тот же: сервер принимает, ответ приходит, рендера нет.

Подменить товар в корзине перед вызовом конструктора, чтобы он честно собрал пакет от нужного товара. Это направление ещё не проверено до конца: во время теста корзина была пуста, и конструктор уводил покупку на слот 0

проблема:
конструктор строит не только пакет, но и какое-то внутреннее состояние покупки. Перед работой он читает два поля shop-объекта ([ecx+0x30] и [ecx+0x34]). Похоже, после настоящей покупки через UI там лежит указатель на выбранный товар, а без выбора — мусор.

когда я подменяю пакет на лету, пакет говорит «покупаем слот 14», а внутреннее состояние клиента построено от другого товара (или от пустой корзины). Ответ сервера 0x020C клиент сверяет со своим состоянием, не находит совпадения — и молча выбрасывает пакет.

Вопросы:

Верно ли я понимаю, что пакет и внутреннее состояние покупки строятся из одного источника (корзины магазина), и без совпадения ответ сервера просто игнорируется? Как это надёжно проверить?

Как лучше отследить, что делает обработчик пакета 0x020C: бэктрейсы из recv дают мусор, нормального трейса не выходит. Ставить хуки на весь код после диспетчера пакетов? Искать обработчик по опкоду в таблице?

Может, кто-то уже разбирал — интересует структура shop-объекта (поля +0x30/+0x34) и корзина магазина.
 
Ответить с цитированием