Submarina Опубликовано 26 июля, 2015 Поделиться Опубликовано 26 июля, 2015 Привет всем Гейхакерам, помогите пожалуйста, хочу сделать функцию возврата,например у игрока 5 видоворужия, 1, это пистолет 2,это дробовик 3,это автомат 4,это снайперская винтовка 5,это гранатомёт,нажал на скрипт, переключилось на 1 оружия ещё раз нажал, переключилось на в 2 оружия нажал,переключилось на 3 оружия, ну дак вот, что бы при каждом нажатии, не переключалось на 6,7,8,9 адошло до 5, ещё раз нажал, оно не пошло дальше пяти,6,7,8,9 а возвратилось на первое оружия то есть на 1 это пистолет, Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 26 июля, 2015 Поделиться Опубликовано 26 июля, 2015 Привет! Примерно так: [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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 26 июля, 2015 Автор Поделиться Опубликовано 26 июля, 2015 (изменено) Привет KENG, Спасибо тебе огромное KENG Изменено 26 июля, 2015 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 4 августа, 2015 Автор Поделиться Опубликовано 4 августа, 2015 (изменено) Привет 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 Изменено 4 августа, 2015 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 4 августа, 2015 Поделиться Опубликовано 4 августа, 2015 inc инструкция не принимает второй операнд (это увлечение значения на 1), поэтому вылетает.Тебе нужно использовать add. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 4 августа, 2015 Автор Поделиться Опубликовано 4 августа, 2015 Из пробовал поставить add, получилось при нажатии на активацию скрипта, становится 100 секунд, и игра вылетает с ошибкой,но верное я, что то упустил keng, в своём скрипте указал, делаем тут что то полезное, а что именно не понятно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 4 августа, 2015 Поделиться Опубликовано 4 августа, 2015 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) Ссылка на комментарий Поделиться на другие сайты Поделиться
Bromvol Опубликовано 4 августа, 2015 Поделиться Опубликовано 4 августа, 2015 Ребята я конечно может ничего не понимаю, но после слов cmp всегда идет какой-нибудь прыг. Может прыг изменить на условный или безусловный или вообще другую инструкцию использовать? Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 4 августа, 2015 Поделиться Опубликовано 4 августа, 2015 [terminus]Так, попробую расписать поподробнее. Для примера возьму Tutorial из Cheat Engine 6.4, версию x86. Находишь адрес: Далее смотришь, какая инструкция читает из этого адреса (ПКМ -> Find out what accesses this address, или F5): Вот инструкция в дизассемблере Cheat Engine: Далее включаем мозги. Нам нужно, чтобы при нажатии на кнопку (например), то есть при активации некоего события выполнялся наш код. В частности, чтобы к текущему значению по некоторому адресу прибавлялось значение, выбранное нами. Жмем меню Tools -> Auto Assemble или Ctrl+A, пишем такой скрипт: Скрипт регистрирует метку-флаг по имени flag, а дальше происходит магия. Построчно:Такие вот дела. Добавляешь скрипт в таблицу Cheat Engine, дальше тыкаешь "Add Address Manually", выбираешь тип "Byte", в адресе пишешь "flag" без кавычек. Готово, Вы великолепны! Всякий раз, когда при заинжекченном скрипте flag будет равен 1, скрипт припишет к текущему значению 10, а флаг сбросит: С работой флагов кое-как разобрались, попробуем сделать простой счетчик. В чемсуть? Увеличиваем значение и делаем какие-то действия в зависимости от этого.Как только значение достигает определенного - сбрасываем. И так по кругу. Пишем:Можно эти два скрипта совместить - чтобы счетчик увеличивался (или уменьшался)в зависимости от состояния флага. Все - от фантазии.[/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 ; Один байт. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 5 августа, 2015 Автор Поделиться Опубликовано 5 августа, 2015 Привет Garik66, я же сверху написал, что я хотел сделать, если бы я знал как это делать, я бы наверное не спрашивал у вас, у более о потныхлюдей, как буто я написал на китайском языке, я уже говорил не раз, что я только учусь,мене эти учения даются не просто, я не могу взять и выучить все за пару дней, и если я прошу помощи, то это значит только одно, что я не шарю в этом,давно пора запомнить, что на примере человек всегда поймет лучше чем на словах и это правильно.Спасибо всем, за помощь. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 5 августа, 2015 Поделиться Опубликовано 5 августа, 2015 [terminus]Baracuda, внимательно прочитай мой пост и ответь, правильно ли я понял вопрос и если да, то понятно ли ответил. Если какие-то вопросы останутся - смело спрашивай.[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 5 августа, 2015 Автор Поделиться Опубликовано 5 августа, 2015 (изменено) Происходит вылет, из за 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) Изменено 5 августа, 2015 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 5 августа, 2015 Поделиться Опубликовано 5 августа, 2015 [terminus]-------------------------------------------------------------------------------- Попробуй поставить игру на паузу, включи скрипт, на месте инструкции игры (в твоем случае - по адресу "MK10.exe"+0x3BE218) увидишь jmp 0x1234567, ПКМ -> Follow, перейдешь на начало заинжекченного скрипта. На первой же его строчке ПКМ -> Toggle Breakpoint, а затем сними игру с паузы. Отладчик прервет выполнение игры, так как ты поставил брейкпоинт, после чего пошагово выполни скрипт, переходя со строчки на строчку, нажимая F7, и выясни, где игра вылетает. -------------------------------------------------------------------------------- О, да, еще было бы неплохо проверить, находится ли таймер, значение которого ты изменяешь, на странице памяти с возможностью записи. Возможно дело в том, что ты пытаешься изменяешь read-only (только для чтения) значение. --------------------------------------------------------------------------------[/terminus] Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения