Поиск адреса режима Noclip в 32-битной игре, при условии почти одинаковых структур в памяти
-
Пытаюсь найти адрес, который хранит флаг состояние режима "noclip", где 1 - включено и 0 - выключено в Call of Duty: Black Ops 2. В предыдущих играх серии, начиная с Modern Warfare 2 с помощью Cheat Engine я смог найти адрес, он расположен по смещению в несколько байт от базовго адреса "сущности игрока". На данный момент нашел адрес для игр CoD: MW2/MW3/Black Ops. Благо все эти игры 32-битные и разработчики используют один и тот же игровой движок, который немного отличается от игры к игре. В Modern Warfare 2 я нашел адрес через поиск и изменение значения в Cheat Engine, включая и выключая noclip. Однако во всех перечисленных мною играх есть опкод, который умеет читать значение из адреса и сравнивать его с числом 8 (я не знаю зачем).
Вот этот опкод и байты для Modern Warfare 2:
F680 54AD0000 08 test byte ptr [eax+0000AD54],08Байты и маска для поиска сигнатур в OllyDbg:
\xF6\x80\x54\xAD\x00\x00\x08 - байты xx????x - маскаЕсли искать в бальшом диапазоне адресов то можно найти не много адресов с опкодами (максимум 4), далее каждый найденный адрес с опкодом можно найти в Cheate Engine и узнать к каким адресам опкод имеет доступ, результат будет 1. Далее в найденном адресе можно поменять значени с 0 на 1 и убедиться что это адрес состояния noclip. Таким образом я нашел адреса для MW2/MW3/Black Ops.
По итогу во всех играх адрес noclip находится в структуре "сущности игрока" примеры:
MW2:player + 0xAD54 - noclip player + 0x24 - Z координатаMW3:
player + 0xAE04 - noclipBO:
player + 0x1C0C - noclipНо с Black Ops 2 возникли сложности, я также попытался через опкод найти адрес, я его нашёл, этот адрес расположен таким образом:
BO2:player + 0x1C34 - noclipНО значения 1 и 2 ничего не дают, я сделал скрипт который увеличивает значение на 1 и уменьшает значение на 1 при нажатии горячих клавиш. По итогу при определённых значениях игрок просто замирает на месте и не может двигать камерой, а также стрелять, как будто все его действия блокируются, а при других значениях блокировка отключается. Диапазон для каждого из двух состояний примерно 5 единиц.
По итогу не получилось у меня полетать через noclip или ufo. Может быть мне нужен другой адрес, смещение или значение?
-
Пользователь @Sergey99 написал в Поиск адреса режима Noclip в 32-битной игре, при условии почти одинаковых структур в памяти:
смещение или значение?
Для mw2
[ENABLE] aobscanmodule(_pClip,iw4sp.exe,74??89????EB??A8??74??C7????????????EB??83) _pClip: db 90 90 registersymbol(_pClip) [DISABLE] _pClip: db 74 05 unregistersymbol(_pClip)Хоть и есть для всех, но там сами найдете... Все игры этой серии, одинаково работают!
-
@LIRW Нашел эту сигнатуру в памяти MW2 если первый опкод в этой сигнарутер, а конкретно je заменить nop'ами, то noclip включается, всё ок. Протестил также с адресом, который хранит состояние noclip'а (1/0), при записи nop'ов значение в адресе не меняется. Значит noclip работает отдельно от состояния.
Два вопроса: для какой функции эти байты, которые находятся aobscan'ом? И как их можно изначально найти, от чего отталкиваться?
-
Пользователь @Sergey99 написал в Поиск адреса режима Noclip в 32-битной игре, при условии почти одинаковых структур в памяти:
Значит noclip работает отдельно от состояния.
Адрес со значением ( того или иного ) к примеру идет под условие... А когда патч условия идет, там всё равно что находится в адресе, будет всё равно по твоему!
К примеру
mov eax,[флаг функции] = 0-1 ( не обязательно должен быть 0 или 1 )
test al,al
je -- условие... Если там 0 то нет не какого полета и в 80% идет прыжок на возврат
а тут ниже по коду, идет как раз функция полета...
Что у нас получается ? А то, что если перетереть условие, что бы там в eax'e не было
всё равно прыжка не будет. Это asm ( под ) учить над... и всё сразу встанет понятно :)