Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 23.12.2014 в 22:00, Жажда Знаний сказал: Такое впечатление что ни кто не понимает о чем тут речь.Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально. В 23.12.2014 в 22:00, Жажда Знаний сказал: Ни кто не помогал, разобрался сам.Помоги сам - опиши свою проблему, и ее решение, - многие тебе спасибо за это скажут. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 00:18, NullAlex сказал: Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально.Помоги сам - опиши свою проблему, и ее решение, - многие тебе спасибо за это скажут.Правильно сказал - плюсую.А то часто читая форум, встречаешь темы, которые обрываются - нет решения в конце (а время на чтение убито). Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 (изменено) В 24.12.2014 в 00:18, NullAlex сказал: Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально.Помоги сам - опиши свою проблему, и ее решение, - многие тебе спасибо за это скажут.Я уже устал описывать это куда уж более детально, неужели вам это не понятно, или может не совсем 3накомо. К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать учения Изменено 24 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 07:51, Жажда Знаний сказал: Я уже устал описывать это куда уж более детально, неужели вам это не понятно, или может не совсем 3накомо. К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать ученияТТо как Вы описали, действительно не понятно. Прочитав, всю тему, из нее ничего не понял. Так что обижаться тут не на кого, если не поняло не сколько человек, значит объяснено не правильно.Ну например: на Ваш вопрос В 17.12.2014 в 17:36, Жажда Знаний сказал: Инструкция такая, на примере: mov [eax],ebx. Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях. Вам ответили: В 17.12.2014 в 19:05, SER[G]ANT сказал: смещение = 0И это правильно.Дальше я не понимаю что. Но вот дошли до чего-то более конкретного: В 21.12.2014 в 16:07, Жажда Знаний сказал: Что то не получается такой вариант, может я что делаю нет так . Пробовал не нескольких играх, не сработало, игры сворачиваются. На примере игра Dragon Age 2, Ищу смещение на скорость Атаки(адрес 203E7F94). Ставя чтение на доступ на этот адрес Вылезает инструкция ( fld dword ptr [esi+04] ). Затем ставя бряк на Адрес срабатывают такие регистры как :eax 005AE690ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94ecx 203E7F90edx 00BF5C1Cesi 203E7F90edi 203D45F0ebp 205895D0По нему нахожу постоянное смещение (D84)Вот Скрипт который я делал newMem:cmp [ebx],d84mov [esi+04],или [esi+d84] (float)100je @f@@:fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem)что я делаю не так ? Причём здесь "ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94"? А этот фильтр "cmp [ebx],d84", в Вашем конкретном случае - полная лажа.Я бы понял например, если был фильтр типа: cmp ebx, 203D47E4 (и то его можно использовать, если ebx всегда равно 203D47E4). Ну короче, из всей темы, лично я ничего не понял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 (изменено) В 24.12.2014 в 08:54, garik66 сказал: То как Вы описали, действительно не понятно. Прочитав, всю тему, из нее ничего не понял. Так что обижаться тут не на кого, если не поняло не сколько человек, значит объяснено не правильно.Ну например: на Ваш вопросВам ответили:И это правильно.Дальше я не понимаю что. Но вот дошли до чего-то более конкретного:Причём здесь "ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94"? А этот фильтр "cmp [ebx],d84", в Вашем конкретном случае - полная лажа.Я бы понял например, если был фильтр типа: cmp ebx, 203D47E4 (и то его можно использовать, если ebx всегда равно 203D47E4).Ну короче, из всей темы, лично я ничего не понял. Обьясняю почему, потому что идет выгрузка регистров в память процесса с самого нижнего регистра (eip). Эти регистры содержат одинаковую структуру отличающиеся друг от друга смещениями. Почему ebx потому что он похож на найденый адресс т.е на начало стр-ры, начало структуры оказалось в есх, который загружается в инструкцию (esi+04)находящиеся до самой инструкции(выше). Вот и всё. Над остальным я еще работаю, как будет готово напишу. Изменено 24 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 07:51, Жажда Знаний сказал: К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать ученияЭто потому, что многие вопросы и конкретные единичные ситуации много раз обсуждались, объяснялись, и приводились способы их решения. Писать гайд заново по указателям (к примеру) - каждый раз никто не станет, т.к. есть куча уроков и статей на эту тему. А если пользователь не желает поискать самостоятельно - вот где лень. Особенных на этом форуме нет, и если тебя отправили использовать поиск по форуму - значит решение твоего вопроса (частичное или полное) на форуме есть. Но я тебе это уже дважды объяснял, странно, почему ты до сих пор этого не понял. В 24.12.2014 в 08:54, garik66 сказал: из всей темы, лично я ничего не понялАналогично, я тоже не понял, чего конкретно хотел автор, и в чем все-таки была его проблема. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 (изменено) Я думаю, просто человек немного запутался:в его конкретном примере, начало структуры лежит и в ecx, и в esi - это 203E7F90.соответственно, нужный ему код можно записать, в случае если инструкция работает только с его адресом (т.е. без использования фильтра):newMem:mov dword ptr [esi+04],(float)100fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere Изменено 24 декабря, 2014 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 (изменено) В 24.12.2014 в 09:44, garik66 сказал: Я думаю, просто человек немного запутался:в его конкретном примере, начало структуры лежит и в ecx, и в esi - это 203E7F90.соответственно, нужный ему код можно записать, в случае если инструкция работает только с его адресом (т.е. без использования фильтра):newMem:mov [esi+04],(float)100fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHereНет, ты не прав. [Esi+04]если делать аналис по ней то каждый адресс с нее будет оканчиватся на +04, а это ошибка. Ecx находится выше [esi+04]mov [ecx+aa4],(float)100fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere Работает и без условных прыжков. Но игра вылетает когда переходишь в экран характеристик героя, значит присутствуют левые адресса, думаю решение это: 1е- писать фильтр чере3 указатель и 2е-писать в него нужные смещения Изменено 24 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 (изменено) Либо ещё вариант с использованием константы:-----------------label(Skorost)registersymbol(Skorost)newMem:fld dword ptr [Skorost]mov ecx,[esi+14]jmp returnHereSkorost:dd (float)100------------------unregistersymbol(Skorost)Оба варианта это часть кода. Изменено 24 декабря, 2014 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 09:44, garik66 сказал: Я думаю, просто человек немного запуталсяАвтор уже пытался написать скрипт. Но я отталкиваюсь от того, что автор не раз говорил, что умеет писать фильтры.Если попытаться разобрать его сообщение, то можно предположить, что В 21.12.2014 в 16:07, Жажда Знаний сказал: eax 005AE690ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94ecx 203E7F90edx 00BF5C1Cesi 203E7F90edi 203D45F0ebp 205895D0Эти регистры вообще ему не нужны, т.к. если оригинальная инструкция fld dword ptr [esi+04], то значение регистра esi - и есть начало структуры.Далее. В 21.12.2014 в 16:07, Жажда Знаний сказал: По нему нахожу постоянное смещение (D84)И смотрим сам скрипт.Предполагая, что автор все-же не умеет писать фильтры, и отдаленно знаком с АА, то вот скрипт, который ему был нужен:newmem:cmp [ebx+D84],$$ // <-- D84 - нужное смещение, а "$$" - цифра (ID), с которой будет производиться сравнениеjne @F // <-- выполнится оригинальный код, если сравнение не верноmov [esi+04],(float)100 // <-- выполнится, если сравнение верно@@:fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem)Но если я не прав в своих предположениях, тогда у автора серьезные проблемы с описанием своего вопроса.Вопрос только в том, откуда появился регистр ebx? Если "с потолка", то тогда вместо него стоит использовать esi. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 (изменено) В 24.12.2014 в 10:00, NullAlex сказал: Автор уже пытался написать скрипт. Но я отталкиваюсь от того, что автор не раз говорил, что умеет писать фильтры.Если попытаться разобрать его сообщение, то можно предположить, чтоЭти регистры вообще ему не нужны, т.к. если оригинальная инструкция fld dword ptr [esi+04], то значение регистра esi - и есть начало структуры.Далее.И смотрим сам скрипт.Предполагая, что автор все-же не умеет писать фильтры, и отдаленно знаком с АА, то вот скрипт, который ему был нужен:newmem:cmp [ebx+D84],$$ // <-- D84 - нужное смещение, а "$$" - цифра (ID), с которой будет производиться сравнениеjne @F // <-- выполнится оригинальный код, если сравнение не верноmov [esi+04],(float)100 // <-- выполнится, если сравнение верно@@:fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem)Но если я не прав в своих предположениях, тогда у автора серьезные проблемы с описанием своего вопроса.Вопрос только в том, откуда появился регистр ebx? Если "с потолка", то тогда вместо него стоит использовать esi.newMem:fld dword ptr [esi+04]mov ecx,[esi+14]cmp [ecx],aa4 // (float)-100jne Testjmp returnHereTest:push eaxmov [ecx+314],(float)200 // Currentmov [ecx+2c4],(float)200 // Kriticall Killmov [ecx+aa4],(float)200 // SpeedPunchpop eaxjmp returnHereРаботает и с ecx и esi одинаковоЧто я делаю не так ? Изменено 24 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 10:09, Жажда Знаний сказал: Что я делаю не так ?А ты уверен, что правильно пишешь фильтр?Посмотри на код:newMem:fld dword ptr [esi+04]mov ecx,[esi+14]cmp [ecx],aa4 // <-- обрати внимание, что здесь ты сравниваешь значение по нулевому смещению с "AA4" (в десятичной: 2724)jne Test // <-- также обрати внимание на то, что прыжок сработает, если значение [ecx+0] НЕ равно AA4, иначе - код просто "заглохнет"jmp returnHereTest:push eax // <-- для чего?mov [ecx+314],(float)200 // Currentmov [ecx+2c4],(float)200 // Kriticall Killmov [ecx+aa4],(float)200 // SpeedPunch <------- а тут ты пишешь в [ecx+AA4] свое значениеpop eax // <-- для чего?jmp returnHereТебе надо либо сравнивать изначально по смещению AA4: cmp [ecx+AA4],$$ (где $$ - то, с чем ты будешь сравнивать, иначе фильтра не будет)И для чего тебе сравнение в данном случае? Фильтр пишется тогда, когда инструкция работает не только с игроком, но и с врагами, или с чем-то другим, что может помешать игровому процессу.В общем, детальнее опиши сам взлом и цель скрипта, что он должен делать в конечном счете, потому как из этого кода мало что понятно.Также, непонятно, зачем ты размещаешь eax в стеке, а потом его выталкиваешь, если все-равно его не используешь? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 (изменено) В 24.12.2014 в 10:09, Жажда Знаний сказал: newMem:fld dword ptr [esi+04]mov ecx,[esi+14]cmp [ecx],aa4 // (float)-100jne Testjmp returnHereTest:push eaxmov [ecx+314],(float)200 // Currentmov [ecx+2c4],(float)200 // Kriticall Killmov [ecx+aa4],(float)200 // SpeedPunchpop eaxjmp returnHereРаботает и с ecx и esi одинаковоЧто я делаю не так ?В этом коде я вооще ничего не понимаю, зачем eax. Если по смещениям 314, 2c4 и aa4 лежат нужные Вам характеристики, то и перепишите код правильно, никакого cmp в Вашем случае не нужно. newMem:fld dword ptr [esi+04]mov ecx,[esi+14]mov [esi+314],(float)200 // Currentmov [esi+2c4],(float)200 // Kriticall Killmov [esi+aa4],(float)200 // SpeedPunchjmp returnHereПопробуйте так Изменено 24 декабря, 2014 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 10:22, garik66 сказал: В этом коде я вооще ничего не понимаю, зачем eax. Если по смещениям 314, 2c4 и aa4 лежат нужные Вам характеристики, то и перепишите код правильно, никакого cmp в Вашем случае не нужно. newMem:fld dword ptr [esi+04]mov ecx,[esi+14]mov [esi+314],(float)200 // Currentmov [esi+2c4],(float)200 // Kriticall Killmov [esi+aa4],(float)200 // SpeedPunchjmp returnHereПопробуйте такЯ знаю, об этом и писал, что работает и без прыжков и на вашем примере. Опять же вы не понимаете то ли читаете не внимательно. Скрипт Значения меняет нужные но игра крашится когда переходишь на экран глав.героя. Возможно что присутствуют левые адреса и надо писать фильтр через указатель. Так думаю В 24.12.2014 в 10:16, NullAlex сказал: А ты уверен, что правильно пишешь фильтр?Посмотри на код:newMem:fld dword ptr [esi+04]mov ecx,[esi+14]cmp [ecx],aa4 // обрати внимание, что здесь ты сравниваешь значение по нулевому смещению с "AA4" (в десятичной: 2724)jne Testjmp returnHereTest:push eax // <-- для чего?mov [ecx+314],(float)200 // Currentmov [ecx+2c4],(float)200 // Kriticall Killmov [ecx+aa4],(float)200 // SpeedPunch <------- а тут ты пишешь в [ecx+AA4] свое значениеpop eax // <-- для чего?jmp returnHereТебе надо либо сравнивать изначально по смещению AA4: cmp [ecx+AA4],$$ (где $$ - то, с чем ты будешь сравнивать, иначе фильтра не будет)Либо детальнее опиши сам взлом, потому как из этого кода мало что понятно.Также, непонятно, зачем ты размещаешь eax в стеке, а потом его выталкиваешь, если все-равно его не используешь?Тогда число сравнения будет (float)-100, только в каком виде его записывать, в hex ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 10:32, Жажда Знаний сказал: Скрипт Значения меняет нужные но игра крашится когда переходишь на экран глав.героя. Возможно что присутствуют левые адреса и надо писать фильтр через указатель. Так думаюКак вариант - можно попробовать выйти на другую инструкцию, которая не будет валить игру. В 24.12.2014 в 10:32, Жажда Знаний сказал: Тогда число сравнения будет (float)-100, только в каком виде его записывать, в hex ?Почему -100, и именно Float? То есть, ты уверен в этом? Что тебе показывает анализатор структуры?И не обязательно число в HEX переводить, вполне можно обойтись такой записью:cmp [ecx+AA4],(float)-100Но ты имей в виду, что AA4 - мое предположение нужного тебе смещения. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 Так посмотрите, какие адреса используют Вашу инструкцию. (И изначально, тема так и должна называться - "Помогите найти фильтр".)Как делаем:1. В отладчике выделяем Вашу инструкцию (правой кнопкой выбираем из контекстного меню: "Найти адреса, получающие доступ к этой инструкции. ) Откроется новое окошко.2. Переходим в игру, открываем меню героя.3. Возвращаемся в СЕ , смотрим что в окошке.4. Если не только Ваши адреса, то выделяем адрес правой кнопкой показать регистры. Вот здесь, то и нужно будет изучить какой регистр (и какое его значение) использовать для использования фильтром в Вашем коде. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 10:44, garik66 сказал: Так посмотрите, какие адреса используют Вашу инструкцию. (И изначально, тема так и должна называться - "Помогите найти фильтр".) Как делаем: 1. В отладчике выделяем Вашу инструкцию (правой кнопкой выбираем из контекстного меню: "Найти адреса, получающие доступ к этой инструкции. ) Откроется новое окошко. 2. Переходим в игру, открываем меню героя. 3. Возвращаемся в СЕ , смотрим что в окошке. 4. Если не только Ваши адреса, то выделяем адрес правой кнопкой показать регистры. Вот здесь, то и нужно будет изучить какой регистр (и какое его значение) использовать для использования фильтром в Вашем коде.И не забыть про анализатор) Но в целом - плюс) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 (изменено) Посмотри на мой скрипт в этом посте (№ 4) здесь, там как раз тоже инструкция пишет не только по адресам, которые мне нужны, поэтому сделан фильтр.Здесь пример использования двойного фильтра: здесь.И ещё пример:здесь.Вообще вся тема практически посвящена фильтрам. Все фильтры написаны с использованием вышеизложенной методики.Да ещё, вспомнил, посмотри обязательно этот видео урок:здесь Изменено 19 февраля, 2015 пользователем garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 24 декабря, 2014 Автор Поделиться Опубликовано 24 декабря, 2014 (изменено) Спасибо вам ребята за помощь, Действительно вы правы. Я просто сомневался в том что для сравнения, значение можно ставить как (float)-100. Как оказалось что попросту я тупил. Вот рабочий скрипт newMem:fld dword ptr [esi+04]mov ecx,[esi+14]cmp [esi+314],(float)-100 // Cheaterscmp [esi+2c4],(float)-100 // Kriticall Killcmp [esi+aa4],(float)-100 // SpeedPunchje Testjmp returnHere Test:pushadmov [esi+314],(float)200 // Cheatersmov [esi+2c4],(float)200 // Kriticall Killmov [esi+aa4],(float)200 // SpeedPunchpopadjmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE] DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem) Конечно он еще на стадии доработки Но вот еще что после проверок и перезагруза игры стало меняться смещение на Хитрость, но не всегда. С чем это связано? Изменено 24 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 24 декабря, 2014 Поделиться Опубликовано 24 декабря, 2014 В 24.12.2014 в 21:39, Жажда Знаний сказал: Спасибо вам ребята за помощь, Действительно вы правы. Я просто сомневался в том что для сравнения, значение можно ставить как (float)-100.Молодец) Но возможно ответ получил бы и раньше, потому как лично меня сбивало то, что ты не раз повторял, что фильтры писать умеешь По твоему коду нужно обратить внимание на то, что ты изменяешь значения по смещению, которые проверяются скриптом. Проверка может быть неудачной, и тогда скрипт просто заглохнет.И еще: команды pushad и popad тебе в данном скрипте не нужны вовсе, так что их можешь просто убрать.Можешь попробовать этот скрипт:label(originalcode) // оригинальный кодlabel(critical) // создаем дополнительную меткуlabel(speed_punch) // и еще однуnewMem:cmp [esi+314],(float)-100 // Cheatersjne criticalmov [esi+314],(float)200 // Cheaterscritical:cmp [esi+2c4],(float)-100 // Kriticall Killjne speed_punchmov [esi+2c4],(float)200 // Kriticall Killspeed_punch:cmp [esi+aa4],(float)-100 // SpeedPunchjne originalcodemov [esi+aa4],(float)200 // SpeedPunchoriginalcode:fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE] DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem) В 24.12.2014 в 21:39, Жажда Знаний сказал: Но вот еще что после проверок и перезагруза игры стало меняться смещение на Хитрость, но не всегда. С чем это связано?Это скорее всего связано с самой игрой, и скрипт тут не при чем, как мне кажется. Можешь попробовать на эту самую Хитрость найти другую инструкцию, или попробовать поискать на нее отдельный фильтр. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 декабря, 2014 Поделиться Опубликовано 25 декабря, 2014 Для Жажда Знаний (который задал вопрос в личке) и тех кто читает, чтобы не повторяться, продолжу развивать тему нахождения фильтров. Использовать буду конкретный пример, выложенный мною сегодня скрипт (см. здесь). Фильтр деньги/товар найден с помощью стандартной методики "Анализ Структуры":1. В отладчике выделяем Вашу инструкцию (правой кнопкой выбираем из контекстного меню: "Найти адреса, получающие доступ к этой инструкции. ) Откроется новое окошко.2. Переходим в игру, открываем меню героя или то, что влияет на Вакшу инструкцию.3. Возвращаемся в СЕ , смотрим что в окошке.4. Если не только Ваши адреса, то выделяем адрес правой кнопкой показать регистры. Вот здесь, то и нужно будет изучить какой регистр (и какое его значение) использовать для использования фильтром в Вашем коде.5. Выбираем, интересующие нас адреса (в моём случае - это адреса денег ГГ, денег Торговца и два, три адреса товара для сравнения).6. Переходим обратно в "Отладчик", выделяем Вашу инструкцию, смотрим на самый верх отладчика, видим "Инструменты", жмём, далее выбираем "Анализ данных/структур". Откроется новое окно "Анализ структуры".7. Вносим все свои адреса (используя файл/добавить дополнительный адрес), не забывая отнимать Ваше смещение( в моём случае, допустим для инструкции sub [eax+04],esi это 04).8. Назовём Группу 1 - "Деньги" и добавим в неё деньги торговца и ГГ9. Добавим Группу 2 - "Товар" и добавим в неё два, три адреса товара для сравнения из п.5.10. Жмём наверху "Структуры"/Определить новую структуру", указываем название структуры (например "TORG"), дальше подтверждаем, следующее опять подтверждаем. В результате окно заполниться и в нём будут различные строчки разных цветов (для нахождения нашего фильтра нас интересуют строчки фиолетового цвета). 11. В моём случае фиолетового ничего не было, но см. смещения и видим (в моём случае на смещении 08 стоит Pointer (указатель), при раскрытии которого я получил кучу фиолетовых строк.12. Перебираем варианты (здесь уже больше от интуиции зависит, мне повезло на смещении 0144, у Группы Деньги было значение 2, а у Группы Товар - 0. Это смещение и значения в нём я выбрал для фильтра (см.мой скрипт.) ).13. Пишем скрипт, проверяем работу. Работает - хорошо.14 Проверяем стабильность (т.е. правильно ли мы выбрали фильтр) - загружаем вначале сейв игры. Работает - хорошо.15. Дополнительно (обязательно сделать раза 3) проверяем стабильность - выходим из игры, проверяем, Работает - хорошо.16. Если в пунктах 14 или 15 не работает , нужно повторить всё с самого начала и выбрать другое фиолетовое смещение. Теперь перейдём к фильтру в моём скрипте - фильтр Торговец/ГГв данном случае в "Анализе структуры" Группа 1 "Герой", Группа 2 "Торговцы".Но подобрать стандартным методом - методом "Анализа структуры" стабильный фильтр мне не удалось.Поэтому применил свой метод. т.е начинаем с п.1 и заканчиваем п.4 4. Если не только Ваши адреса, то выделяем адрес правой кнопкой показать регистры. Вот здесь, то и нужно будет изучить какой регистр (и какое его значение) использовать для использования фильтром в Вашем коде.Смотрю регистры денег у ГГ и у Торговцев и проверяю, какие из регистров, после загрузок сейвов, перезагрузки игры, остаются стабильными, вот их используем (в моём случае это был регистр ESP, но может быть и другой, в моих скриптах встречался, по моему EAX, найденный этим же способом ну и т.д.) По фильтрам вроде бы всё. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 25 декабря, 2014 Автор Поделиться Опубликовано 25 декабря, 2014 (изменено) спасибо. Немного доделал скрипт да рабочего состояния. Дело еще в том что никто не учел то что нельзя ставить число для сравнения а затем менять его. Скрипт сработает только раз затем смещения просто поменяются, Вот что получилось: [ENABLE]alloc(newMem, 2048)label(Test)label(returnHere) newMem:mov esi,ecxfld dword ptr [esi+04]cmp [ecx+198],(float)1000 // Cheaterscmp [ecx+148],(float)1000 // Kriticall Killcmp [ecx+928],(float)350 // SpeedPunchje Testjmp returnHere Test:mov [esi+194],(float)60 // Хитрость, %крит,уронаmov [esi+144],(float)80 // %критического нанесения mov [esi+924],(float)80 // скорость Атакиjmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA4:jmp newMemreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA4:mov esi,ecxfld dword ptr [esi+04]dealloc(newMem) Изменено 25 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 декабря, 2014 Поделиться Опубликовано 25 декабря, 2014 В 25.12.2014 в 16:08, Жажда Знаний сказал: Дело еще в том что никто не учел то что нельзя ставить число для сравнения а затем менять его. Скрипт сработает только раз затем смещения просто поменяются, Как раз учли (прочитайте внимательно п. 16). Ошибаетесь - смещения не поменяются, поменяются адреса (поэтому они и называются динамические) и их, если фильтр подобран не верно, нужно будет опять обновлять в Окне "Анализа структур", т.е. повторить все шаги с п.1 по 15. Продолжу: всё-таки судя по Вашему коду, Вы не до конца всё поняли.Не пожалейте времени (конечно видео занимает 40 минут), пересмотрите видео урок Coderа (и может несколько раз).Кидаю ещё раз ссылку на него (см.здесь). Теперь вернёмся к Вашему скрипту, я уверен практически на 100 %, что он работать не будет.Во- первых, так как у Вас одна игровая инструкция, то и для всех нужных Вам значений будет нужно только один фильтр, который подходит для всех нужных Вам адресов, а Вы накидали какие 3 условия:cmp [ecx+198],(float)1000 // Cheaterscmp [ecx+148],(float)1000 // Kriticall Killcmp [ecx+928],(float)350 // SpeedPunch Причём вместе и соответственно нужные Вам значения будут меняться только при соблюдении всех этих 3 условий.Об этом Вам писал NullAlex и делил их в предложенном варианте кода:cmp [esi+314],(float)-100 // Cheatersjne criticalmov [esi+314],(float)200 // Cheaterscritical:cmp [esi+2c4],(float)-100 // Kriticall Killjne speed_punchmov [esi+2c4],(float)200 // Kriticall Killspeed_punch:cmp [esi+aa4],(float)-100 // SpeedPunchjne originalcodemov [esi+aa4],(float)200 // SpeedPunch Так что пересмотрите видео, почитайте эту тему и поймёте. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 25 декабря, 2014 Автор Поделиться Опубликовано 25 декабря, 2014 В 25.12.2014 в 16:59, garik66 сказал: Как раз учли (прочитайте внимательно п. 16). Ошибаетесь - смещения не поменяются, поменяются адреса (поэтому они и называются динамические) и их, если фильтр подобран не верно, нужно будет опять обновлять в Окне "Анализа структур", т.е. повторить все шаги с п.1 по 15. Продолжу: всё-таки судя по Вашему коду, Вы не до конца всё поняли.Не пожалейте времени (конечно видео занимает 40 минут), пересмотрите видео урок Coderа (и может несколько раз).Кидаю ещё раз ссылку на него (см.здесь).Теперь вернёмся к Вашему скрипту, я уверен практически на 100 %, что он работать не будет.Во- первых, так как у Вас одна игровая инструкция, то и для всех нужных Вам значений будет нужно только один фильтр, который подходит для всех нужных Вам адресов, а Вы накидали какие 3 условия:cmp [ecx+198],(float)1000 // Cheaterscmp [ecx+148],(float)1000 // Kriticall Killcmp [ecx+928],(float)350 // SpeedPunchПричём вместе и соответственно нужные Вам значения будут меняться только при соблюдении всех этих 3 условий.Об этом Вам писал NullAlex и делил их в предложенном варианте кода:cmp [esi+314],(float)-100 // Cheatersjne criticalmov [esi+314],(float)200 // Cheaterscritical:cmp [esi+2c4],(float)-100 // Kriticall Killjne speed_punchmov [esi+2c4],(float)200 // Kriticall Killspeed_punch:cmp [esi+aa4],(float)-100 // SpeedPunchjne originalcodemov [esi+aa4],(float)200 // SpeedPunchТак что пересмотрите видео, почитайте эту тему и поймёте.Незнаю возможно вы и правы но скрипт полностью рабочий, проверял не один раз с переходом на локации, перезагрузкой уровня и игры.Еще хотел спросить, можно ли по этим сравнениям этого скрипта сделать бессмертие, значение этих адресов не меняется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 декабря, 2014 Поделиться Опубликовано 25 декабря, 2014 Понял, почему работает Ваш скрипт,Вот в этом месте (будут меняться только при соблюдении всех этих 3 условий.) я ошибся, у Вас работает именно одно условие - последнее: cmp [ecx+928],(float)350 // SpeedPunch А другие два условия можете безболезненно выкинуть из скрипта.И соответственно у Вас сейчас в игре Ваше значение SpeedPunch, которое находится по смещению 928 равно (Float)350.Если Вы уверены, что это значение в процессе игры не изменится, тогда ладно. Я просто не знаю, что это за значение, но всё-же скрипт советую чуть-чуть исправить (не нужно использовать ecx, если в игровой инструкции используется esi).Примерно так: Показать контент Можете проверить, этот скрипт тоже будет работать пока SpeedPunch будет равно 350. В 25.12.2014 в 17:44, Жажда Знаний сказал: Незнаю возможно вы и правы но скрипт полностью рабочий, проверял не один раз с переходом на локации, перезагрузкой уровня и игры.Еще хотел спросить, можно ли по этим сравнениям этого скрипта сделать бессмертие, значение этих адресов не меняется.Если значения в этих адресах не меняются, то бессмертие можно будет сделать.Но если инструкция работает и со здоровьем врагов, то они тоже станут бессмертными, поэтому нужно будет опять искать фильтр для отсеивания - свой/чужой.ENABLE]alloc(newMem, 64)label(Test)label(returnHere) newMem:mov esi,ecxfld dword ptr [esi+04]//cmp [ecx+198],(float)1000 // Cheaters // Эти две строчки - лишние, их можно//cmp [ecx+148],(float)1000 // Kriticall Kill // убрать.cmp [esi+928],(float)350 // SpeedPunch // Правильнее использовать esi, а не ecx. // потому-что это в Вашем случае совпало, je Test // что начало структуры лежит и в ecx и в // esi. В другой раз такого может и не бытьjmp returnHere Test:mov [esi+194],(float)60 // Хитрость, %крит,уронаmov [esi+144],(float)80 // %критического нанесения mov [esi+924],(float)80 // скорость Атакиjmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA4:jmp newMemreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA4:mov esi,ecxfld dword ptr [esi+04]dealloc(newMem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения