ололоша Опубликовано 6 января, 2019 Поделиться Опубликовано 6 января, 2019 Здравствуйте форумчане.Пробовал писать скрипты свой чужой к игре DmC Devil May Cry,но ни один способ не помог. Нашёл статический адрес,но после заморозки игра через время вылетает. Заметил одну особенность после трэйса инструкций,что инструкции урона у игрока и врага одинаковые и порядок их выполнения цикличный, у врагов и у игрока они выполняются в разном порядке.Где вычисления адреса игрока происходит так и не нашёл. Как их различить объясните пж. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 7 января, 2019 Поделиться Опубликовано 7 января, 2019 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 (изменено) В 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: Ты не пробовал узнавать, какие инструкции читают с твоего адреса хп? Бывает, когда среди читающих инструкций есть инструкция, которая работает только с твоим адресом, если такая есть, туда и инжекть код чтобы не париться с фильтром. Изменено 8 января, 2019 пользователем Xipho В будущем будет пред за игнорирование правил оформления. Ссылка на комментарий Поделиться на другие сайты Поделиться
ололоша Опубликовано 8 января, 2019 Автор Поделиться Опубликовано 8 января, 2019 (изменено) Спасибо за подсказку. Да я просматривал стэк,и свой и врагов. Они абсолбтно одинаковые,но во время получения урона выполняются по разному и где ответвление на мой или врага адрес не нашёл. Читающие инструкции работают как с моим адресом,так и с врагом при чем все читающие инструкции. Изменено 8 января, 2019 пользователем ололоша Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 4 часа назад, ололоша сказал: Читающие инструкции работают как с моим адресом,так и с врагом при чем все читающие инструкции. Ты уроки посмотрел? Если посмотрел, то посмотри еще раз внимательнее. Ссылка на комментарий Поделиться на другие сайты Поделиться
ололоша Опубликовано 8 января, 2019 Автор Поделиться Опубликовано 8 января, 2019 (изменено) Есть 3 варианта отнятия урона. 1-когда враг бьёт тебя, 2-когда падаешь с высоты это отдельная инструкция, 3-в заданиях на время хп считывается с другого статического адреса, но инструкция та же что и в 1-ом варианте. После нескольких падений с высоты адрес сменился,перезагрузка не помогла,адрес не найден.Я подозреваю,что в каждом уровне свои инструкции.При падении сработали инструкции 1-раз которых не было до этого,и адрес поменялся. Не один из фильтров в видео не сработал. Изменено 8 января, 2019 пользователем Xipho Не нужно цитировать все сообщение целиком. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 8 января, 2019 Поделиться Опубликовано 8 января, 2019 Ты либо не смотрел, либо не захотел понять видео. 1. Можно протрассировать код, и посмотреть, где инструкции расходятся для твоего игрока, и для врага. 2. Расхождение будет однозначно, потому что для игрока нужно вывести здоровье на экран, а для врагов в этом нет необходимости. 3. Есть вариант найти все виды урона, и всех их протрассировать и найти, где код разветвляется. 4. Можно пойти по тому пути, по которому часто идет @Garik66 в своих видео, а именно - сделать многоступенчатый фильтр. Как его делать - смотри в его видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 9 января, 2019 Поделиться Опубликовано 9 января, 2019 (изменено) 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 а при адресах врагов всё, что угодно кроме единицы, получился бы отличный фильтр. Попробуй найти подобную закономерность с любым регистром, который инструкция сама по себе не использует. Изменено 9 января, 2019 пользователем Sanic Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 11 января, 2019 Поделиться Опубликовано 11 января, 2019 Можно попробовать еще такое, находишь инструкцию, узнаешь какие адреса она использует, выделяешь свой адрес, жмешь правой кнопкой мыши и "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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 11 января, 2019 Поделиться Опубликовано 11 января, 2019 1 час назад, Sanic сказал: Можно попробовать еще такое, находишь инструкцию @Sanic, очень не плохой способ - было бы не плохо ещё и видео заснять для ребят. Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 11 января, 2019 Поделиться Опубликовано 11 января, 2019 Там более 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] Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 (изменено) В 11.01.2019 в 08:09, Garik66 сказал: @Sanic, очень не плохой способ - было бы не плохо ещё и видео заснять для ребят. Я только что заснял, только уныло получилось, целых 37 минут видео, где я блин печатаю в блокноте :D. Лучше б ты снял, у тебя неплохо получается. Я своё выложу, но это как по мне фигня получилась. (Жаль, что не знаю как хоть ускорить) Изменено 12 января, 2019 пользователем Sanic Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 Вот мое видео о сканере смещений, не ожидал, что видео будет настолько длинным, можете проматывать некоторые моменты, монтировать я не умею( P.S: если инструкция работает например не только с определенной характеристикой персонажей, а вообще обрабатывает все в игре, и графику и хп и ману и прочую фигню, мне кажется, включение той галочки над кнопкой "scan" не лучшая идея. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
JustHack Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 28 минут назад, Sanic сказал: видео, где я блин печатаю в блокноте Ты в розыске? Ссылка на комментарий Поделиться на другие сайты Поделиться
Sanic Опубликовано 12 января, 2019 Поделиться Опубликовано 12 января, 2019 1 минуту назад, JustHack сказал: Ты в розыске? Нормальный микрофон блин в розыске xD Ссылка на комментарий Поделиться на другие сайты Поделиться
ололоша Опубликовано 14 января, 2019 Автор Поделиться Опубликовано 14 января, 2019 Всем спасибо за ценные советы!Нашёл решение. Спойлер { 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 } Ссылка на комментарий Поделиться на другие сайты Поделиться
ололоша Опубликовано 14 января, 2019 Автор Поделиться Опубликовано 14 января, 2019 Можно закрывать тему.В Этой игре нужен фильтр на всё,что ищешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения