- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 682
- Реакции
- 18
Пытаюсь завести триггербот на Assault Cube версии 1.3.0.2 по классическим мануалам. На старых билдах (1.2.0.2) всё залетало по учебнику, но в актуальной версии логика немного поменялась, и я уперся в стену при поиске нужной инструкции.
Как проводил реверс
Зацепился за адрес нэймтага (имя игрока), который отрисовывается при наведении прицела на противника. Поставил брекпоинт на доступ (access), вываливается следующий кусок кода:
Судя по всему, это цикл, который перебирает энтити-лист и сравнивает имена. В [EAX] всегда лежит мой ник, в [ECX] — ник какого-то противника. Инструкция крутится по кругу и перезапускается на mov ecx, dword ptr ds:[ebx+esi*4]. Весь этот кусок кода живет внутри функции-колла.
В чем затык
Я пытаюсь найти конкретное место, где игра проверяет «смотрю я на врага прямо сейчас или нет». По идее, должен быть флаг или Crosshair ID, который принимает значение 0, когда прицел в небе, и ID противника при наведении. Но через сравнение имен (как это реализовано здесь для NameTag) выходить на логику выстрела — путь максимально костыльный.
Кто ковырял свежие билды этого олдскульного шутера, подскажите — не перелопатили ли они структуру локального игрока настолько, что Crosshair ID уехал в глубокие дебри? Или стоит искать инструкцию записи в оффсет, отвечающий за отрисовку красного текста при наведении?
Думаю, есть смысл поискать оффсет относительно базы игрока через Find out what writes to, но пока в логах только этот цикл отрисовки. Если есть идеи, как элегантнее выцепить Crosshair Entity в 1.3.0.2, накидайте вариантов.
Как проводил реверс
Зацепился за адрес нэймтага (имя игрока), который отрисовывается при наведении прицела на противника. Поставил брекпоинт на доступ (access), вываливается следующий кусок кода:
Код:
...
mov ebx, dword ptr ds:[0x0058AC04] ; грузим количество игроков
mov ecx, dword ptr ds:[ebx+esi*4]
test ecx, ecx
je 0x00481B29
cmp dword ptr ss:[esp+0x14], ecx
je 0x00481B29
mov eax, dword ptr ss:[esp+0x10]
add ecx, 0x205
nop dword ptr ds:[eax], eax
mov dl, byte ptr ds:[eax] ; в eax имя локального игрока
cmp dl, byte ptr ds:[ecx] ; в ecx имя оппонента
jne 0x00481B20 <- тут сработал брекпоинт
...
Судя по всему, это цикл, который перебирает энтити-лист и сравнивает имена. В [EAX] всегда лежит мой ник, в [ECX] — ник какого-то противника. Инструкция крутится по кругу и перезапускается на mov ecx, dword ptr ds:[ebx+esi*4]. Весь этот кусок кода живет внутри функции-колла.
В чем затык
Я пытаюсь найти конкретное место, где игра проверяет «смотрю я на врага прямо сейчас или нет». По идее, должен быть флаг или Crosshair ID, который принимает значение 0, когда прицел в небе, и ID противника при наведении. Но через сравнение имен (как это реализовано здесь для NameTag) выходить на логику выстрела — путь максимально костыльный.
Кто ковырял свежие билды этого олдскульного шутера, подскажите — не перелопатили ли они структуру локального игрока настолько, что Crosshair ID уехал в глубокие дебри? Или стоит искать инструкцию записи в оффсет, отвечающий за отрисовку красного текста при наведении?
Думаю, есть смысл поискать оффсет относительно базы игрока через Find out what writes to, но пока в логах только этот цикл отрисовки. Если есть идеи, как элегантнее выцепить Crosshair Entity в 1.3.0.2, накидайте вариантов.