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

Как сделать Функцию возврата в АА Скрипте


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

Привет всем Гейхакерам, помогите пожалуйста, хочу сделать функцию возврата,например у игрока 5 видов

оружия, 1, это пистолет 2,это дробовик 3,это автомат 4,это снайперская винтовка 5,это гранатомёт,

нажал на скрипт, переключилось на 1 оружия ещё раз нажал, переключилось на в 2 оружия нажал,

переключилось на 3 оружия, ну дак вот, что бы при каждом нажатии, не переключалось на 6,7,8,9 а

дошло до 5, ещё раз нажал, оно не пошло дальше пяти,6,7,8,9 а возвратилось на первое оружия то есть на 1 это пистолет,

 

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

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

 

[ENABLE]alloc(newmem,2048) newmem:CMP [0064840F],5 // Берем адрес, где храним текущее значение счетчикаJE @F // Если там уже максимальное значение, то выходимINC [0064840F] // Увеличиваем счетчик// Делаем тут что-то полезноеFLDZ // Игровая инструкцияRET // Выход@@:MOV [0064840F],1 // Если счетчик достиг максимального значения - сбрасываем его на 1FLDZ // Игровая инструкцияRET // Выход "Tutorial-i386.exe"+27DA6:CALL newmem [DISABLE]"Tutorial-i386.exe"+27DA6:MOV [EBX+04],EAXFLDZdealloc(newmem)
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Привет keng, я чё та явно делаю не так, помоги пожалуйста помоги подправить инструкцию,

решил сделать инструкция на время, мортал комбат Х там дается 90 секунд на бой,

хочу сделать прибавления по 10, секунд каждое нажатия прибавляет по 10 секунд,

9 раз нажал получилось 90 секунд, потом 10 раз нажал и сбросило до 10 секунд,

но что то не выходит, что то делаю не так. при включении инструкции, игра вылетает с ошибкой,

уже и проверял на ошибки, но что то не так делаю.

[ENABLE]alloc(newmem,2048,"MK10.exe"+3BE218)label(returnhere)newmem:cmp dword ptr [rax+000019BC],#10 секундje @Finc dword ptr [rax+000019BC],ebxadd [rax+000019BC],#10cmp [rax+000019BC],ebxreturnhere@@:mov dword ptr [rax+000019BC],#10 секундcmp [rax+000019BC],ebxreturnhere"MK10.exe"+3BE218:jmp newmemnopreturnhere:[DISABLE]dealloc(newmem)"MK10.exe"+3BE218:cmp [rax+000019BC],ebx
Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

Из пробовал поставить add, получилось при нажатии на активацию скрипта, становится 100 секунд, и игра вылетает с ошибкой,

но верное я, что то упустил keng, в своём скрипте указал, делаем тут что то полезное, а что именно не понятно.

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

Baracuda, объяснение путанное и не понятно что ты хочешь сделать, на что нажимать?

А скрипт твой - совсем ужас %) , честно от тебя не ожидал, мне казалось, что опыта у тебя уже больше.

Предположу, что по адресу  [rax+000019BC] лежит значение таймера. И инструкция cmp [rax+000019BC],ebx очень часто обращается к адресу.

Если не нужен фильтр. То допустим  можно попробовать заморозить таймер:

 

Попробуй этот скрипт.

А, если тебе нужно что-то другое, объясни получше.

 

[ENABLE]alloc(newmem,64)label(returnhere)newmem:mov [rax+000019BC],#90cmp [rax+000019BC],ebxreturnhere"MK10.exe"+3BE218:jmp newmemnopreturnhere:[DISABLE]"MK10.exe"+3BE218:cmp [rax+000019BC],ebxdealloc(newmem) 
Ссылка на комментарий
Поделиться на другие сайты

Ребята я конечно может ничего не понимаю, но после слов cmp всегда идет какой-нибудь прыг. Может прыг изменить на условный или безусловный или вообще другую инструкцию использовать?

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

[terminus]Так, попробую расписать поподробнее. Для примера возьму Tutorial из Cheat 

Engine 6.4, версию x86. Находишь адрес:

 

post-6695-0-06824200-1438719800_thumb.pn

 

Далее смотришь, какая инструкция читает из этого адреса (ПКМ -> Find out what 

accesses this address, или F5):

 

post-6695-0-54683800-1438719811_thumb.pn

 

Вот инструкция в дизассемблере Cheat Engine:

 

post-6695-0-80979900-1438719826_thumb.pn

 

Далее включаем мозги. Нам нужно, чтобы при нажатии на кнопку (например), то 

есть при активации некоего события выполнялся наш код. В частности, чтобы к 

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

Жмем меню Tools -> Auto Assemble или Ctrl+A, пишем такой скрипт:

 

post-6695-0-92566700-1438719927_thumb.pn

 

Скрипт регистрирует метку-флаг по имени flag, а дальше происходит магия. 

Построчно:

Такие вот дела. Добавляешь скрипт в таблицу Cheat Engine, дальше тыкаешь "Add 

Address Manually", выбираешь тип "Byte", в адресе пишешь "flag" без кавычек. 

Готово, Вы великолепны! Всякий раз, когда при заинжекченном скрипте flag будет 

равен 1, скрипт припишет к текущему значению 10, а флаг сбросит:

 

post-6695-0-38355900-1438719927_thumb.pn

С работой флагов кое-как разобрались, попробуем сделать простой счетчик. В чем

суть? Увеличиваем значение и делаем какие-то действия в зависимости от этого.

Как только значение достигает определенного - сбрасываем. И так по кругу. Пишем:

post-6695-0-97571000-1438720896_thumb.pn

Можно эти два скрипта совместить - чтобы счетчик увеличивался (или уменьшался)

в зависимости от состояния флага. Все - от фантазии.

[/terminus]

pushfd            ; Сохраняем флагиcmp [flag],1      ; Сравниваем значение flag с 1jne @F            ; Если не равно - прыгаем на метку ниже по коду                   ; (F - Forward - Вперед)mov [flag],0      ; Ставим флаг в 0add [ebx+480],10  ; Добавляем к нужному нам адресу 10popfd             ; Восстанавливаем флаги@@:               ; Та самая метка, безымяннаяmov eax,[ebx+480] ; Оригинальная инструкция "игры"ret               ; Выход. Я люблю использовать call+ret вместо jmp+jmp, когда                   ; это возможноflag:             ; Сам флаг, место его храненияdb 0              ; Один байт.
Ссылка на комментарий
Поделиться на другие сайты

Привет Garik66, я же сверху написал, что я хотел сделать, если бы я знал как это делать, я бы наверное не спрашивал у вас, у более о потных

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


Спасибо всем, за помощь.

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

[terminus]Baracuda, внимательно прочитай мой пост и ответь, правильно ли я понял вопрос и 

если да, то понятно ли ответил. Если какие-то вопросы останутся - смело 

спрашивай.[/terminus]

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

Происходит вылет, из за pushfd и popfd, игра вылетает с ошибкой, я убрал pushfd и popfd, все равно происходит вылет с ошибкой, при активации скрипта.

[ENABLE]alloc(newmem,2048,"MK10.exe"+3BE218)label(returnhere)label(counter)registersymbol(counter)newmem:pushfdcmp [counter],#10 секундjne @Fmov [counter],0@@:popfdinc [counter]add [rax+000019BC],countercmp [rax+000019BC],ebxjmp returnherecounter:db 0"MK10.exe"+3BE218:jmp newmemnopreturnhere:[DISABLE]"MK10.exe"+3BE218:cmp [rax+000019BC],ebxunregistersymbol(counter)dealloc(newmem)
Изменено пользователем Baracuda
Ссылка на комментарий
Поделиться на другие сайты

[terminus]--------------------------------------------------------------------------------

Попробуй поставить игру на паузу, включи скрипт, на месте инструкции игры (в

твоем случае - по адресу "MK10.exe"+0x3BE218) увидишь jmp 0x1234567, ПКМ ->

Follow, перейдешь на начало заинжекченного скрипта. На первой же его строчке ПКМ

-> Toggle Breakpoint, а затем сними игру с паузы. Отладчик прервет выполнение

игры, так как ты поставил брейкпоинт, после чего пошагово выполни скрипт,

переходя со строчки на строчку, нажимая F7, и выясни, где игра вылетает.

--------------------------------------------------------------------------------

О, да, еще было бы неплохо проверить, находится ли таймер, значение которого ты

изменяешь, на странице памяти с возможностью записи. Возможно дело в том, что ты

пытаешься изменяешь read-only (только для чтения) значение.

--------------------------------------------------------------------------------[/terminus]

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

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

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

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