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

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

Такое впечатление что ни кто не понимает о чем тут речь.

Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально.

Ни кто не помогал, разобрался сам.

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

  • Ответов 63
  • Создана
  • Последний ответ

Топ авторов темы

Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально.

Помоги сам - опиши свою проблему, и ее решение, - многие тебе спасибо за это скажут.

Правильно сказал - плюсую.

А то часто читая форум, встречаешь темы, которые обрываются - нет решения в конце (а время на чтение убито).   

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

Какой вопрос - такой ответ. Хочешь получить ответ, который бы тебя устроил? - Опиши проблему детально.

Помоги сам - опиши свою проблему, и ее решение, - многие тебе спасибо за это скажут.

Я уже устал описывать это куда уж более детально, неужели вам это не понятно, или может не совсем 3накомо. К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать учения Изменено пользователем Жажда Знаний
Ссылка на комментарий
Поделиться на другие сайты

Я уже устал описывать это куда уж более детально, неужели вам это не понятно, или может не совсем 3накомо. К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать ученияТ

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

Так что обижаться тут не на кого, если не поняло не сколько человек, значит объяснено не правильно.

Ну например: на Ваш вопрос

 

Инструкция такая, на примере: mov [eax],ebx. Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях.

 

 

Вам ответили:

 

смещение = 0

И это правильно.
Дальше я не понимаю что. Но вот дошли до чего-то более конкретного:

 

Что то не получается такой вариант, может я что делаю нет так . Пробовал не нескольких играх, не сработало, игры сворачиваются. На примере игра Dragon Age 2, Ищу смещение на скорость Атаки(адрес 203E7F94). Ставя чтение на доступ на этот адрес Вылезает инструкция ( fld dword ptr [esi+04]  ). Затем ставя бряк на Адрес срабатывают такие регистры как :

eax 005AE690

ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе  203E7F94
ecx 203E7F90
edx 00BF5C1C
esi 203E7F90
edi 203D45F0
ebp 205895D0
По нему нахожу постоянное смещение (D84)
Вот Скрипт который я делал newMem:
cmp [ebx],d84
mov  [esi+04],или [esi+d84] (float)100
je @f
@@:
fld dword ptr [esi+04]
mov ecx,[esi+14]
jmp returnHere
 
DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:
jmp newMem
nop
returnHere:
 
[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).

 

Ну короче, из всей темы, лично я ничего не понял. 

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

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

Так что обижаться тут не на кого, если не поняло не сколько человек, значит объяснено не правильно.

Ну например: на Ваш вопрос

Вам ответили:

И это правильно.

Дальше я не понимаю что. Но вот дошли до чего-то более конкретного:

Причём здесь "ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94"? А этот фильтр "cmp [ebx],d84", в Вашем конкретном случае - полная лажа.

Я бы понял например, если был фильтр типа: cmp ebx, 203D47E4 (и то его можно использовать, если ebx всегда равно 203D47E4).

Ну короче, из всей темы, лично я ничего не понял.

Обьясняю почему, потому что идет выгрузка регистров в память процесса с самого нижнего регистра (eip). Эти регистры содержат одинаковую структуру отличающиеся друг от друга смещениями. Почему ebx потому что он похож на найденый адресс т.е на начало стр-ры, начало структуры оказалось в есх, который загружается в инструкцию (esi+04)находящиеся до самой инструкции(выше). Вот и всё. Над остальным я еще работаю, как будет готово напишу. Изменено пользователем Жажда Знаний
Ссылка на комментарий
Поделиться на другие сайты

К тому же от вас больше встречаешь банальной лени тем что просто отписывая "поищи, посмотри и т.д . Повторенье мать учения

Это потому, что многие вопросы и конкретные единичные ситуации много раз обсуждались, объяснялись, и приводились способы их решения. Писать гайд заново по указателям (к примеру) - каждый раз никто не станет, т.к. есть куча уроков и статей на эту тему. А если пользователь не желает поискать самостоятельно - вот где лень. Особенных на этом форуме нет, и если тебя отправили использовать поиск по форуму - значит решение твоего вопроса (частичное или полное) на форуме есть. Но я тебе это уже дважды объяснял, странно, почему ты до сих пор этого не понял.

из всей темы, лично я ничего не понял

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

Я думаю, просто человек немного запутался:

в его конкретном примере, начало структуры лежит и в ecx, и в esi - это 203E7F90.

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

newMem:mov dword ptr [esi+04],(float)100fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere 
Изменено пользователем 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)100

fld dword ptr [esi+04]

mov ecx,[esi+14]

jmp returnHere

Работает и без условных прыжков. Но игра вылетает когда переходишь в экран характеристик героя, значит присутствуют левые адресса, думаю решение это: 1е- писать фильтр чере3 указатель и 2е-писать в него нужные смещения

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

Либо ещё вариант с использованием константы:

-----------------label(Skorost)registersymbol(Skorost)newMem:fld dword ptr [Skorost]mov ecx,[esi+14]jmp returnHereSkorost:dd (float)100------------------unregistersymbol(Skorost)

Оба варианта это часть кода.

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

Я думаю, просто человек немного запутался

Автор уже пытался написать скрипт. Но я отталкиваюсь от того, что автор не раз говорил, что умеет писать фильтры.

Если попытаться разобрать его сообщение, то можно предположить, что

eax 005AE690

ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе  203E7F94

ecx 203E7F90

edx 00BF5C1C

esi 203E7F90

edi 203D45F0

ebp 205895D0

Эти регистры вообще ему не нужны, т.к. если оригинальная инструкция fld dword ptr [esi+04], то значение регистра esi - и есть начало структуры.

Далее.

По нему нахожу постоянное смещение (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.

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

Автор уже пытался написать скрипт. Но я отталкиваюсь от того, что автор не раз говорил, что умеет писать фильтры.

Если попытаться разобрать его сообщение, то можно предположить, что

Эти регистры вообще ему не нужны, т.к. если оригинальная инструкция 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)-100

jne Test

jmp returnHere

Test:

push eax

mov [ecx+314],(float)200 // Current

mov [ecx+2c4],(float)200 // Kriticall Kill

mov [ecx+aa4],(float)200 // SpeedPunch

pop eax

jmp returnHere

Работает и с ecx и esi одинаково

Что я делаю не так ?

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

Что я делаю не так ?

А ты уверен, что правильно пишешь фильтр?

Посмотри на код:

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 в стеке, а потом его выталкиваешь, если все-равно его не используешь?

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

newMem:

fld dword ptr [esi+04]

mov ecx,[esi+14]

cmp [ecx],aa4 // (float)-100

jne Test

jmp returnHere

Test:

push eax

mov [ecx+314],(float)200 // Current

mov [ecx+2c4],(float)200 // Kriticall Kill

mov [ecx+aa4],(float)200 // SpeedPunch

pop eax

jmp 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

Попробуйте так

Изменено пользователем 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
Попробуйте так
Я знаю, об этом и писал, что работает и без прыжков и на вашем примере. Опять же вы не понимаете то ли читаете не внимательно. Скрипт Значения меняет нужные но игра крашится когда переходишь на экран глав.героя. Возможно что присутствуют левые адреса и надо писать фильтр через указатель. Так думаю

А ты уверен, что правильно пишешь фильтр?

Посмотри на код:

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 ?
Ссылка на комментарий
Поделиться на другие сайты

Скрипт Значения меняет нужные но игра крашится когда переходишь на экран глав.героя. Возможно что присутствуют левые адреса и надо писать фильтр через указатель. Так думаю

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

 

Тогда число сравнения будет (float)-100, только в каком виде его записывать, в hex ?

Почему -100, и именно Float? То есть, ты уверен в этом? Что тебе показывает анализатор структуры?

И не обязательно число в HEX переводить, вполне можно обойтись такой записью:

cmp [ecx+AA4],(float)-100
Но ты имей в виду, что AA4 - мое предположение нужного тебе смещения.
Ссылка на комментарий
Поделиться на другие сайты

Так посмотрите, какие адреса используют Вашу инструкцию. (И изначально, тема так и должна называться - "Помогите найти фильтр".)

Как делаем:

1. В отладчике  выделяем Вашу инструкцию (правой кнопкой выбираем из контекстного меню: "Найти адреса, получающие доступ к этой инструкции. ) Откроется новое окошко.

2. Переходим в игру, открываем меню героя.

3. Возвращаемся в СЕ , смотрим что в окошке.

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

 

  

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

Так посмотрите, какие адреса используют Вашу инструкцию. (И изначально, тема так и должна называться - "Помогите найти фильтр".)

Как делаем:

1. В отладчике  выделяем Вашу инструкцию (правой кнопкой выбираем из контекстного меню: "Найти адреса, получающие доступ к этой инструкции. ) Откроется новое окошко.

2. Переходим в игру, открываем меню героя.

3. Возвращаемся в СЕ , смотрим что в окошке.

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

И не забыть про анализатор) Но в целом - плюс)
Ссылка на комментарий
Поделиться на другие сайты

Посмотри на мой скрипт в этом посте (№ 4) здесь, там как раз тоже инструкция пишет не только по адресам, которые мне нужны, поэтому сделан фильтр.


Здесь пример использования двойного фильтра: здесь.

И ещё пример:здесь.

Вообще вся тема практически посвящена фильтрам. Все фильтры написаны с использованием вышеизложенной методики.


Да ещё, вспомнил, посмотри обязательно этот видео урок:

здесь

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

Спасибо вам ребята за помощь, Действительно вы правы. Я просто сомневался в том что для  сравнения, значение можно ставить как  (float)-100. Как оказалось что попросту я тупил.  Вот рабочий скрипт 

 

 

newMem:
fld dword ptr [esi+04]
mov ecx,[esi+14]
cmp [esi+314],(float)-100  // Cheaters
cmp [esi+2c4],(float)-100 // Kriticall Kill
cmp [esi+aa4],(float)-100 // SpeedPunch
je Test
jmp returnHere
 
 
Test:
pushad
mov [esi+314],(float)200  // Cheaters
mov [esi+2c4],(float)200 // Kriticall Kill
mov [esi+aa4],(float)200 // SpeedPunch
popad
jmp returnHere
 
 
DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:
jmp newMem
nop
returnHere:
 
[DISABLE]
 
DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:
fld dword ptr [esi+04]
mov ecx,[esi+14]
 
dealloc(newMem)
 
Конечно он еще на стадии доработки
 
Но вот еще что после проверок и перезагруза игры стало меняться смещение на Хитрость, но не всегда. С чем это связано?
Изменено пользователем Жажда Знаний
Ссылка на комментарий
Поделиться на другие сайты

Спасибо вам ребята за помощь, Действительно вы правы. Я просто сомневался в том что для  сравнения, значение можно ставить как  (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)

Но вот еще что после проверок и перезагруза игры стало меняться смещение на Хитрость, но не всегда. С чем это связано?

Это скорее всего связано с самой игрой, и скрипт тут не при чем, как мне кажется. Можешь попробовать на эту самую Хитрость найти другую инструкцию, или попробовать поискать на нее отдельный фильтр.
Ссылка на комментарий
Поделиться на другие сайты

 Для Жажда Знаний (который задал вопрос в личке) и тех кто читает, чтобы не повторяться, продолжу развивать тему нахождения фильтров.

 

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

 

Фильтр деньги/товар найден с помощью стандартной методики "Анализ Структуры":

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
Ссылка на комментарий
Поделиться на другие сайты

спасибо. Немного доделал скрипт да рабочего состояния. Дело еще в том что никто не учел то что нельзя ставить число для сравнения а затем менять его. Скрипт сработает только раз затем смещения просто поменяются, Вот что получилось: 

 

[ENABLE]
alloc(newMem, 2048)
label(Test)
label(returnHere)
 
newMem:
mov esi,ecx
fld dword ptr [esi+04]
cmp [ecx+198],(float)1000 // Cheaters
cmp [ecx+148],(float)1000 // Kriticall Kill
cmp [ecx+928],(float)350 // SpeedPunch
je Test
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 newMem
returnHere:
 
[DISABLE]
DragonAge2.AK::MemoryMgr::GetPoolName+81EA4:
mov esi,ecx
fld dword ptr [esi+04]
dealloc(newMem)
Изменено пользователем Жажда Знаний
Ссылка на комментарий
Поделиться на другие сайты

 

Дело еще в том что никто не учел то что нельзя ставить число для сравнения а затем менять его. Скрипт сработает только раз затем смещения просто поменяются, 

 

Как раз учли (прочитайте внимательно п. 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
Ссылка на комментарий
Поделиться на другие сайты

Как раз учли (прочитайте внимательно п. 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
Так что пересмотрите видео, почитайте эту тему и поймёте.
Незнаю возможно вы и правы но скрипт полностью рабочий, проверял не один раз с переходом на локации, перезагрузкой уровня и игры.

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

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

Понял, почему работает Ваш скрипт,

Вот в этом месте (будут меняться только при соблюдении всех этих 3 условий.) я ошибся, у Вас работает именно одно условие - последнее:

 cmp [ecx+928],(float)350 // SpeedPunch  А другие два условия можете безболезненно выкинуть из скрипта.

И соответственно у Вас сейчас в игре Ваше значение SpeedPunch, которое находится по смещению 928 равно (Float)350.

Если Вы уверены, что это значение в процессе игры не изменится, тогда ладно. Я просто не знаю, что это за значение, но всё-же скрипт советую чуть-чуть исправить (не нужно использовать ecx, если в игровой инструкции используется esi).

Примерно так:

 

Можете проверить, этот скрипт тоже будет работать пока SpeedPunch будет равно 350.

 


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

Если значения в этих адресах не меняются, то бессмертие можно будет сделать.

Но если инструкция работает и со здоровьем врагов, то они тоже станут бессмертными, поэтому нужно будет опять искать фильтр для отсеивания - свой/чужой.

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) 
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

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

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