Перейти к содержанию

[DmC Devil May Cry] Не могу Со стряпать фильтр свой чужой


Рекомендуемые сообщения

Здравствуйте форумчане.Пробовал писать скрипты свой чужой к игре DmC Devil May Cry,но ни один способ не помог. Нашёл статический адрес,но после заморозки игра через время вылетает.

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

Как их различить объясните пж.

Ссылка на комментарий
Поделиться на другие сайты

В 06.01.2019 в 11:30, ололоша сказал:

Здравствуйте форумчане.Пробовал писать скрипты свой чужой к игре DmC Devil May Cry,но ни один способ не помог. Нашёл статический адрес,но после заморозки игра через время вылетает.

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

Как их различить объясните пж.

Если ты нашел статический адрес, можешь использовать его для фильтра в скрипте если цепочка указателей надежная.

 

Например если у тебя стат. адрес это "game.exe+034393" и смещения 1F 5F 9F 7F 323 18

значит ты можешь написать в скрипте что то типа того

Спойлер

newmen:
push eax
mov eax,[game.exe+034393]
cmp eax,0   // (сравнение с нулем и прыжок к коду необязательные, просто в случае, если указатель перестанет работать, это должно спасти игру от краша)
je code

mov eax,[eax+1F]
cmp eax,0
je code

mov eax,[eax+5F]
cmp eax,0
je code

mov eax,[eax+9F]
cmp eax,0
je code

mov eax,[eax+7F]
cmp eax,0
je code

mov eax,[eax+323]
cmp eax,0
je code

mov [eax+18],#999999  (В [eax+18] будут твои хп)

code:
pop eax // Обязательно нужно восстановить оригинальное значение eax иначе краш, ставь сразу после "code"

 

 

 

Хотя странно, что просто после заморозки у тебя через некоторое время игра вылетает, ты не проверял, может время от времени твоя цепь указателей начинает указывать куда то не туда?

 

P.S: Ты не пробовал узнавать, какие инструкции читают с твоего адреса хп? Бывает, когда среди читающих инструкций есть инструкция, которая работает только с твоим адресом, если такая есть, туда и инжекть код чтобы не париться с фильтром.

Изменено пользователем Xipho
В будущем будет пред за игнорирование правил оформления.
Ссылка на комментарий
Поделиться на другие сайты

Спасибо за подсказку. Да я просматривал стэк,и свой и врагов. Они абсолбтно одинаковые,но во время получения урона выполняются по разному и где ответвление на мой или врага адрес не нашёл.

Читающие инструкции работают как с моим адресом,так и с врагом при чем все читающие инструкции. 

Изменено пользователем ололоша
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, ололоша сказал:

Читающие инструкции работают как с моим адресом,так и с врагом при чем все читающие инструкции.

Ты уроки посмотрел? Если посмотрел, то посмотри еще раз внимательнее.

Ссылка на комментарий
Поделиться на другие сайты

Есть 3 варианта отнятия урона. 1-когда враг бьёт тебя, 2-когда падаешь с высоты это отдельная инструкция, 3-в заданиях на время хп считывается с другого статического адреса, но инструкция та же что и в 1-ом варианте.

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

Не один из фильтров в видео не сработал.

Изменено пользователем Xipho
Не нужно цитировать все сообщение целиком.
Ссылка на комментарий
Поделиться на другие сайты

Ты либо не смотрел, либо не захотел понять видео. 

1. Можно протрассировать код, и посмотреть, где инструкции расходятся для твоего игрока, и для врага.

2. Расхождение будет однозначно, потому что для игрока нужно вывести здоровье на экран, а для врагов в этом нет необходимости.

3. Есть вариант найти все виды урона, и всех их протрассировать и найти, где код разветвляется.

4. Можно пойти по тому пути, по которому часто идет @Garik66 в своих видео, а именно - сделать многоступенчатый фильтр. Как его делать - смотри в его видео.

Ссылка на комментарий
Поделиться на другие сайты

22 часа назад, ололоша сказал:

Есть 3 варианта отнятия урона. 1-когда враг бьёт тебя, 2-когда падаешь с высоты это отдельная инструкция, 3-в заданиях на время хп считывается с другого статического адреса, но инструкция та же что и в 1-ом варианте.

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

Если в каждом уровне работают разные инструкции, тогда все таки советую найти хороший указатель через сканер с помощью двух сгенерированных карт указателей(pointermaps). И найти любую инструкцию, которая работает всегда и туда написать скрипт на бесконечные хп.

 

Если будешь пытаться искать указатель, то вот небольшой совет, как ускорить работу сканера указателей.

Спойлер

Найди любую инструкцию, которая работает с твоим адресом. Суть заключается в использовании функции "Pointer must end with specific offsets" или "Цепочка указателей должна заканчиваться на определенные смещения".

 

 

Нашел ты например "mov ecx[edx+18]" , Уже нашлось первое смещение, это 18.

Надо теперь узнать, откуда EDX взял свое значение, открой дисассемблер, промотай чуть вверх и увидишь типо такую картину:

 

mov eax,[esi+2DC] // Вот третье смещение "2DC", уже ощутимо можно ускорить работу сканера

бла бла бла бла

бла бла бла бла

mov edx,[eax+0C] // А вот второе смещение - "0C" которое можно указать сканеру теперь следим за eax

бла бла бла 

бла бла  - какой то код

бла бла

mov ecx[edx+18] // Эта же инструкция, в которой [edx+18] наши , мотаем вверх и ищем, что записало в edx

 

Можешь  таким образом и дальше читать ассемблер и находить смещения(главное не выйти за пределы функции случайно :D), которые можно будет указать сканеру, чтобы он управился с 9-уровневыми указателями не за 12 часов а за 5 минут. Только если код станет слишком запутанным, то лучше не бери лишних смещений, лучше врубай сканер и вбивай нарытые смещения и игнорь инструкции, которые имеют отношение к стеку(имеют в качестве базы ebp или esp). 

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

 

Можно использовать более известный метод "узнать, что читает с адреса" и вбивать в поиск значение, так тоже можно нарыть смещения, но как только тебе начинают попадаться больше, чем 1 адрес, лучше остановится, и вбить то, что нарыл, в сканер.

 

Если не можешь найти указатель, который работает стабильно, то попробуй повысить уровень указателя в сканере, например с 7 к 9. Хороший указатель ВСЕГДА указывает в нужный адрес, пока ты не обновишь/поменяешь версию игры.

 

 

 

Ты пробовал в качестве фильтра использовать значения регистров? Найди инструкцию, которая работает с твоим и вражескими адресами, узнай, к каким адресам она получает доступ и заставь в списке появится свой адрес и несколько врагов: Затем жми на каждый адрес правой кнопкой и нажми "show registers' state"(показать состояния регистров)

 

Например, при твоем адресе EAX может всегда быть 1 а при адресах врагов всё, что угодно кроме единицы, получился бы отличный фильтр.

Попробуй найти подобную закономерность с любым регистром, который инструкция сама по себе не использует.

 

 

 

 

Изменено пользователем Sanic
Ссылка на комментарий
Поделиться на другие сайты

Можно попробовать еще такое, находишь инструкцию, узнаешь какие адреса она использует, выделяешь свой адрес, жмешь правой кнопкой мыши и "Find commonalities between addresses" и затем "Mark selected addresses as group one"(твои хп теперь будут подсвечиваться синим). Затем выдели несколько вражеских адресов, опять жми Find commonalities и Mark selected addresses as group two"(теперь враги подсвечены красным), затем выдели адреса из обоих груп, опять жми Find commonalities и затем "Scan for commonalities. 

Потом тебе CE предложит выбрать регистр для сравнения, выбери, который инструкция использует в качестве базы(например у тебя инструкция mov [eax+10],ecx, значит выбирай eax ибо он база для этой инструкции)

 

Затем чекни галочку "Find only matching groups" и жми scan, тебе придется указать, куда CE должен сохранить на компьютере результаты, после этого Cheat engine сам для тебя найдет смещения, которые делают тебя уникальным от врагов, и которые ты сможешь использовать для фильтра.

 

Можно даже потом перезапускать игру, в группу 1 вбивать свой новый адрес хп, а в группу 2 новые адреса врагов и отсеивать нестабильные смещения, если хочешь...

 

 

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Sanic сказал:

Можно попробовать еще такое, находишь инструкцию

@Sanic, очень не плохой способ - было бы не плохо ещё и видео заснять для ребят. 

Ссылка на комментарий
Поделиться на другие сайты

Там более 3000 адресов где можно найти среди них один уникальный, где робит только с игроком инструкция...

Короче пока вот есть тестовый код без фильтра на хп...нужно врубать во время игры.

Спойлер

[ENABLE]
alloc(newmem,32)
label(returnhere)

newmem:
mov eax,[eax+614]
push [eax+844] //Закидываем в стэк базовое значение хп.
pop [eax+840] //Возращаем из стэка в исходное значение хп.
jmp returnhere

DMC-DevilMayCry.exe+22F372:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
DMC-DevilMayCry.exe+22F372:
mov eax,[eax+614]

 

 

Ссылка на комментарий
Поделиться на другие сайты

В 11.01.2019 в 08:09, Garik66 сказал:

@Sanic, очень не плохой способ - было бы не плохо ещё и видео заснять для ребят. 

Я только что заснял, только уныло получилось, целых 37 минут видео, где я блин печатаю в блокноте :D. Лучше б ты снял, у тебя неплохо получается. Я своё выложу, но это как по мне фигня получилась. (Жаль, что не знаю как хоть ускорить)

Изменено пользователем Sanic
Ссылка на комментарий
Поделиться на другие сайты

Вот мое видео о сканере смещений, не ожидал, что видео будет настолько длинным, можете проматывать некоторые моменты, монтировать я не умею(

 

 

P.S: если инструкция работает например не только с определенной характеристикой персонажей, а вообще обрабатывает все в игре, и графику и хп и ману и прочую фигню, мне кажется, включение той галочки над кнопкой "scan" не лучшая идея.

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Всем спасибо за ценные советы!Нашёл решение.

Спойлер

{ Game   : DMC-DevilMayCry.exe
  Version: 
  Date   : 2019-01-08
  Author : ���������-���������

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(INJECT,DMC-DevilMayCry.exe,0F 2F 86 40 08 00 00) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:

  cmp [esi+f08],(float)1600
  jne code
  mov [esi+840],(float)1600

code:
  comiss xmm0,[esi+00000840]
  jmp return

INJECT:
  jmp newmem
  nop
  nop
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db 0F 2F 86 40 08 00 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "DMC-DevilMayCry.exe"+B47830

"DMC-DevilMayCry.exe"+B47816: 6A 00                    -  push 00
"DMC-DevilMayCry.exe"+B47818: 8B F1                    -  mov esi,ecx
"DMC-DevilMayCry.exe"+B4781A: 8B 0D 2C B6 9F 03        -  mov ecx,[DMC-DevilMayCry.exe+275B62C]
"DMC-DevilMayCry.exe"+B47820: 50                       -  push eax
"DMC-DevilMayCry.exe"+B47821: 51                       -  push ecx
"DMC-DevilMayCry.exe"+B47822: 8B CE                    -  mov ecx,esi
"DMC-DevilMayCry.exe"+B47824: E8 07 76 52 FF           -  call DMC-DevilMayCry.exe+6EE30
"DMC-DevilMayCry.exe"+B47829: 85 C0                    -  test eax,eax
"DMC-DevilMayCry.exe"+B4782B: 75 0E                    -  jne DMC-DevilMayCry.exe+B4783B
"DMC-DevilMayCry.exe"+B4782D: 0F 57 C0                 -  xorps xmm0,xmm0
// ---------- INJECTING HERE ----------
"DMC-DevilMayCry.exe"+B47830: 0F 2F 86 40 08 00 00     -  comiss xmm0,[esi+00000840]
// ---------- DONE INJECTING  ----------
"DMC-DevilMayCry.exe"+B47837: 73 02                    -  jae DMC-DevilMayCry.exe+B4783B
"DMC-DevilMayCry.exe"+B47839: 5E                       -  pop esi
"DMC-DevilMayCry.exe"+B4783A: C3                       -  ret 
"DMC-DevilMayCry.exe"+B4783B: B8 01 00 00 00           -  mov eax,00000001
"DMC-DevilMayCry.exe"+B47840: 5E                       -  pop esi
"DMC-DevilMayCry.exe"+B47841: C3                       -  ret 
"DMC-DevilMayCry.exe"+B47842: CC                       -  int 3 
"DMC-DevilMayCry.exe"+B47843: CC                       -  int 3 
"DMC-DevilMayCry.exe"+B47844: CC                       -  int 3 
"DMC-DevilMayCry.exe"+B47845: CC                       -  int 3 
}

 

 

Ссылка на комментарий
Поделиться на другие сайты

  • Garik66 закрыл тема
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.