Submarina Опубликовано 17 июня, 2016 Поделиться Опубликовано 17 июня, 2016 Здравствуйте помогите сделать Автоматическую Активацию скрипта AA при запуске игры, и Автоматическое отключения скрипта AA при закрытии игры, если конечно это возможно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 17 июня, 2016 Автор Поделиться Опубликовано 17 июня, 2016 вот скрипт, на него хочу это сделать, и на скрипт Жизни. Скрытый текст [ENABLE] aobscanmodule(Ammo2,gamedll_x64_rwdi.dll,41 8B 5C C0 04 45) alloc(newmem,2048,Ammo2) label(returnhere) label(originalcode) newmem: mov [r8+rax*8+04],406 originalcode: mov ebx,[r8+rax*8+04] jmp returnhere Ammo2: jmp newmem returnhere: registersymbol(Ammo2) [DISABLE] Ammo2: db 41 8B 5C C0 04 unregistersymbol(Ammo2) dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 17 июня, 2016 Поделиться Опубликовано 17 июня, 2016 20 часа назад, Baracuda сказал: Автоматическую Активацию скрипта AA при запуске игры, Скрипт "Скоростное прохождение шагов (2-9) Tutorial (v.3.2) для CE 6.5" (из моей таблички): Скрытый текст [ENABLE] {$LUA} showMessage("Активируем решение всех шагов сразу") function SetStateRecord(description, state) local addressList = getAddressList() local memoryRecord = addressList.getMemoryRecordByDescription(description) memoryRecord.Active = state end SetStateRecord("Step2", true) SetStateRecord("Step3", true) SetStateRecord("Step4", true) SetStateRecord("Step5", true) SetStateRecord("Step6", true) SetStateRecord("Step7", true) SetStateRecord("Step8", true) SetStateRecord("Step9", true) {$ASM} [DISABLE] {$LUA} showMessage("Дективируем решение всех шагов сразу") SetStateRecord("Step2", false) SetStateRecord("Step3", false) SetStateRecord("Step4", false) SetStateRecord("Step5", false) SetStateRecord("Step6", false) SetStateRecord("Step7", false) SetStateRecord("Step8", false) SetStateRecord("Step9", false) Скрипт, написанный для тебя (с автооткрытием процесса игры в СЕ): Скрытый текст function SetStateRecord(description, state) local addressList = getAddressList() local memoryRecord = addressList.getMemoryRecordByDescription(description) memoryRecord.Active = state end local timerAutorun = createTimer(nil, true) timerAutorun.Interval = 1000 timerAutorun.OnTimer = function () if (getProcessIDFromProcessName("Tutorial-i386.exe")~=nil) then OpenProcess("Tutorial-i386.exe") SetStateRecord("Step2", true) SetStateRecord("Step3", true) SetStateRecord("Step4", true) SetStateRecord("Step5", true) SetStateRecord("Step6", true) SetStateRecord("Step7", true) SetStateRecord("Step8", true) SetStateRecord("Step9", true) else -- Эта часть скрипта не работает, с ней нужно разбираться. if (getProcessIDFromProcessName("Tutorial-i386.exe")==nil) then SetStateRecord("Step2", false) SetStateRecord("Step3", false) SetStateRecord("Step4", false) SetStateRecord("Step5", false) SetStateRecord("Step6", false) SetStateRecord("Step7", false) SetStateRecord("Step8", false) SetStateRecord("Step9", false) end end end Видео: https://youtu.be/HbW0TBUYNsE // NullAlex ??? А что теперь видео у нас только в виде ссылки можно сделать, или это Тюб чёй-то мутит? NullAlex: Ответ. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) можно сделать как ни будь, чтобы авто подключения было не от названия процесса Tutorial-i386.exe, а например от сигнатуры 8D 58 01 48 89 D8 48, почему потому что если у ярлыка поменять названия например не Tutorial-i386.exe, его назвать а как ни будь 1234.exe то авто включения скрипта не будет работать.ИЛИ Я ОШИБАЮСЬ С ЭТИМ Я РАЗОБРАЛСЯ, ОСТАЛОСЬ АВТО ОТКЛЮЧЕНИЯ СДЕЛАТЬ. Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 Всё таки вопрос я не решил. Надо именно по сигнатуре авто подключения сделать. можно сделать как ни будь, чтобы авто подключения было не от названия процесса Tutorial-i386.exe, а например от сигнатуры 8D 58 01 48 89 D8 48, почему потому что если у ярлыка поменять названия например не Tutorial-i386.exe, его назвать а как ни будь 1234.exe то авто включения скрипта не будет работать Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 Можно. Вот тебе логика работы алгоритма: 1. Получение списка процессов 2. Присоединение к каждому процессу, и поиск сигнатуры Только учти, что сигнатура совпадет если не во всех, то почти во всех процессах, а это значит, что тебе заранее нужно знать значение, которое указало бы на нужный процесс. Это - самый очевидный подводный камень, с которым тебе придется разобраться. Второй такой камень тебя ждет именно тогда, когда вспомнишь слово "быстродействие", т.к. перебор кучи процессов в системе, и поиск по сигнатуре в каждом из них - займет некоторое время. Можно пойти извращаться дальше, и снять хэш-сумму с нужного тебе исполняемого файла, и также - получать список процессов, и снимать хэш с каждого файла, но это - также долго. А можно просто перед запуском программы дать юзеру возможность самому указать путь к нужному исполняемому файлу, путем выдачи окна выбора файла. Или, на крайний случай, выдать сообщение юзеру, что процесса "qwerty.exe" не существует. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 (изменено) В 18.06.2016в10:58, Baracuda сказал: Всё таки вопрос я не решил. Надо именно по сигнатуре авто подключения сделать. Скрипт: Скрытый текст function SetStateRecord(ID, state) addressList = getAddressList() memoryRecord = addressList.getMemoryRecordByID(326) memoryRecord.Active = state end timerAutorun = createTimer(nil,true) timerAutorun.Interval = 1000 timerAutorun.OnTimer = function () if (getProcessIDFromProcessName("FALLOUT2.exe")~=nil) then OpenProcess("FALLOUT2.exe") SetStateRecord("326",true) end end Видео: Изменено 19 июня, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) то есть я так понял ID этот у каждой игры свой, я так понял по этому ID авто запускается скрипт, а не по названия Fallout2.exe я тебя правильно понял. Garik66 Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 (изменено) 15 минуту назад, Baracuda сказал: то есть я так понял ID этот у каждой игры свой, я так понял по этому ID авто запускается скрипт, а не по названия Fallout2.exe я тебя правильно понял. Garik66 Нет ID в скрипте на видео - это ID записи в таблице и оно будет уникально для твоей таблице (в случае на видео именно скрипта "100% theft") и трейнера, созданного из этой таблицы. Изменено 18 июня, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 А где мене достать этот Index, что то не понял, я прописал на форуме в поисковике Index, не нашёл, где я могу прочитать обетом. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 2 минуты назад, Baracuda сказал: А где мене достать этот Index, что то не понял, я прописал на форуме в поисковике Index, не нашёл, где я могу прочитать обетом. Тут Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 Спасибо, Garik66. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 (изменено) 3 минуты назад, Baracuda сказал: Спасибо, Garik66. Baracuda, обрати внимание на то, что сам СЕ при генерации трейнера опирается именно на ID записей. Так что ID записей наиболее уникальная штука, в отличии от индекса и названия. Ну например название скрипта пользователь может поменять на своё, а ID уже не поменяется никогда. Изменено 18 июня, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) 6 часов назад, NullAlex сказал: Только учти, что сигнатура совпадет если не во всех, то почти во всех процессах, а это значит, что тебе заранее нужно знать значение, которое указало бы на нужный процесс. Это - самый очевидный подводный камень, с которым тебе придется разобраться. Второй такой камень тебя ждет именно тогда, когда вспомнишь слово "быстродействие", т.к. перебор кучи процессов в системе, и поиск по сигнатуре в каждом из них - займет некоторое время. я понял, то есть всё таки можно сделать по сигнатуре, КТО НИ БУДЬ ПОДСКАЖИТЕ КАК. чтобы сканировало сигнатуру, и автоматически запускало скрипт. МЕНЕ НУЖНО ЧТОБЫ СКАНИРОВАЛО СИГНАТУРУ И АВТОМАТИЧЕСКИ АКТИВИРОВАЛО СКРИПТ, НЕ ВАЖНО СОВПАДАЕТ ОНА С ДРУГОЙ СИГНАТУРОЙ ИЛИ НЕТ. Скрытый текст function SetStateRecord(description, state) local addressList = getAddressList() local memoryRecord = addressList.getMemoryRecordByDescription(description) memoryRecord.Active = state end local timerAutorun = createTimer(nil, true) timerAutorun.Interval = 1000 timerAutorun.OnTimer = function () if (getProcessIDFromProcessName("Tutorial-i386.exe")~=nil) then надо чтобы сдесь сканировало сигнатуру а не названия OpenProcess("Tutorial-i386.exe")надо чтобы сдесь сканировало сигнатуру а не названия SetStateRecord("Step2", true) end end Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 В 17.06.2016в09:22, Baracuda сказал: Автоматическую Активацию скрипта AA при запуске игры, 58 минут назад, Baracuda сказал: МЕНЕ НУЖНО ЧТОБЫ СКАНИРОВАЛО СИГНАТУРУ И АВТОМАТИЧЕСКИ АКТИВИРОВАЛО СКРИПТ 58 минут назад, Baracuda сказал: надо чтобы сдесь сканировало сигнатуру а не названия Вопрос твой совсем не понятен. Давай так попробую сформулировать. Ты хочешь, чтобы при запуске игры в ранее запущеной таблице СЕ активировался, какой нибудь скрипт по сигнатуре в скрипте (т.е. аобскан) без названия процесса игры. ТАК? Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 Я, если честно, вообще не могу понять, почему важно именно имя исполняемого файла - есть же окно, его название и класс, узнать PID по ним - раз плюнуть. А присоединяться к первому попавшемуся процессу, и активировать скрипт, если название неважно, и не важно, совпадут ли сигнатуры - это как-то (минимум) неправильно... Хотя я чего-то не понимаю, может. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 (изменено) 4 минуты назад, NullAlex сказал: Хотя я чего-то не понимаю, может. Я тоже не понимаю задачу, поэтому и написал предыдущий пост, в котором видно, что задача, как я её сформулировал - полная хрень. и чем не устравивает мой скрипт? Изменено 18 июня, 2016 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) Да Garik66 именно так Я ПОСТАРАЮСЬ ОБЪЯСНИТЬ ЕСТЬ ИГРЫ, В КОТОРЫХ ЗАПУСК СКРИПТА ОСУЩЕСТВЛЯЕТСЯ НЕ ПО НАЗВАНИЮ, А ПО СИГНАТУРЕ, ВОТ ИГРА ОДНА ИЗ ИХ Wasteland 2 СКРИПТ НАПРИМЕР, ЗАПУСКАЕТСЯ НЕ СРАЗУ, А ПОЧЕМУ А ПОТОМУ ЧТО, СКАНИРОВАНИЯ СИГНАТУРЫ ИДЁТ КАКОЕ ТО ВРЕМЯ, И ПОСЛЕ ОН ЗАПУСКАЕТСЯ. Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 Только что, Baracuda сказал: Да Garik66 именно так Прочитай предыдущее сообщение, такая задача - полная хрень. Ты можешь просто написать скрипт на LUA, который будет, если запущена игра (по названию, ID процесса, по названию ID окна - это не важно) сразу же по аобскану выполнять внутренний скрипт, и если не запущена, то не выполнять его. - Такая задача понятна. А вот активация скрипта в таблице по его сигнатуре, без названия процесса - это хрень. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 5 минут назад, Baracuda сказал: Я ПОСТАРАЮСЬ ОБЪЯСНИТЬ ЕСТЬ ИГРЫ, В КОТОРЫХ ЗАПУСК СКРИПТА ОСУЩЕСТВЛЯЕТСЯ НЕ ПО НАЗВАНИЮ, А ПО СИГНАТУРЕ, ВОТ ИГРА ОДНА ИЗ ИХ Wasteland 2 Не понятно, выложи пример. Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) Ну что тут не понятно, ВОТ ПРИМЕР, ЗАПУСТИ НЕСКОЛЬКО СРАЗУ ПРОГРАММ Cheat Engine, ШТУКИ 3 ЗАПУСТИЛ СРАЗУ, У НИХ У ВСЕХ, РАЗНЫЙ ID, НО НАЗВАНИЯ ОСТАЮТСЯ ПРЕЖНИМ, ДО ТЕХ ПОР ПОКА ТЫ НЕ ПОМЕНЯЕШЬ ЕГО НА КАКОЕ НИ БУДЬ ДРУГОЕ, И ПОСЛЕ СКРИПТ КОТОРЫЙ ТЫ СДЕЛАЛ НЕ БУДЕТ РАБОТАТЬ, А ЕСЛИ СДЕЛАТЬ СКАНИРОВАНИЯ СИГНАТУРЫ, ТО НЕ ВАЖНО СКОЛЬКО ПРОГРАММ, ТЫ СРАЗУ ЗАПУСТИЛ 2-3 ИЛИ 5 сразу,СКРИПТ БУДЕТ РАБОТАТЬ НАДЕЮСЬ ПОНЯТНО ОБЪЯСНИЛ. ЭТО ВСЁ РОВНО ЧТО TRAINER, КОТОРЫЙ РАБОТАЕТ, НА ЛЮБОЙ ВЕРСИИ ИГРЫ. Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 1 минуту назад, Baracuda сказал: Ну что тут не понятно, ВОТ ПРИМЕР, ЗАПУСТИ НЕСКОЛЬКО СРАЗУ ПРОГРАММ Cheat Engine, ШТУКИ 3 ЗАПУСТИЛ СРАЗУ, У НИХ У ВСЕХ, РАЗНЫЙ ID, НО НАЗВАНИЯ ОСТАЮТСЯ ПРЕЖНИМ, ДО ТЕХ ПОР ПОКА ТЫ НЕ ПОМЕНЯЕШЬ ЕГО НА КАКОЕ НИ БУДЬ ДРУГОЕ, И ПОСЛЕ СКРИПТ КОТОРЫЙ ТЫ СДЕЛАЛ НЕ БУДЕТ РАБОТАТЬ, А ЕСЛИ СДЕЛАТЬ СКАНИРОВАНИЯ СИГНАТУРЫ, ТО НЕ ВАЖНО СКОЛЬКО ПРОГРАММ, ТЫ СРАЗУ ЗАПУСТИЛ 2-3 ИЛИ 5 сразу,СКРИПТ БУДЕТ РАБОТАТЬ НАДЕЮСЬ ПОНЯТНО ОБЪЯСНИЛ. Это то понятно, при чём здесь тогда активация скрипта в таблице? Есть скрипт, который работает нормально независимо от названия игры (например в зависимости от репака, некоторые репакеры изменяют название exe-ника, также может поменяться название в МОДах), Думаю в таком случае нужно в моём в скрипте перечислить возможные разные названия exe-файла игры. if (getProcessIDFromProcessName("FALLOUT2.exe")~=nil) then ....... if (getProcessIDFromProcessName("FALLOUT2MOD.exe")~=nil) then ....... -- и т.д. А не вмешивать сюда сигнатуру. Либо активировать скрипт просто вручную. (по хоткею, по нажатию кнопки на трейнере) Ссылка на комментарий Поделиться на другие сайты Поделиться
Submarina Опубликовано 18 июня, 2016 Автор Поделиться Опубликовано 18 июня, 2016 (изменено) ИМЕННО НАДО ЧТОБЫ СКАНИРОВАЛА СИГНАТУРУ, И ЗАПУСКАЛО АВТОМАТИЧЕСКИ ЭТОТ СКРИПТ, В КОТОРОМ ЭТО СИГНАТУРА УКАЗАННА, НО КАК СКАЗАЛ NullAlex В ТАКОМ СЛУЧАЕ, СИГНАТУРЫ МОГУТ СОВПАДАТЬ,МЕНЕ ЭТО НЕ ВАЖНО, ВОТ ЭТО МЕНЕ И НАДО. Изменено 18 июня, 2016 пользователем Baracuda Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 30 минуты назад, Baracuda сказал: ИМЕННО НАДО ЧТОБЫ СКАНИРОВАЛА СИГНАТУРУ, И ЗАПУСКАЛО АВТОМАТИЧЕСКИ ЭТОТ СКРИПТ, В КОТОРОМ ЭТО СИГНАТУРА УКАЗАННА, НО КАК СКАЗАЛ NullAlex В ТАКОМ СЛУЧАЕ, СИГНАТУРЫ МОГУТ СОВПАДАТЬ,МЕНЕ ЭТО НЕ ВАЖНО, ВОТ ЭТО МЕНЕ И НАДО. Короче понял твою мысль (всё-таки плохо ты иногда излагаешь свои мысли): Если находится любая сигнатура (то игра включена и название тогда действительно не важно) и соответственно активировать автоматически нужный нам скрипт: Вот переделал скрипт для Fallout2, который выкладывал вместе с видео (видео сейчас записывать не буду). В данном случае (именно для автоактивации скрипта, таймер уже не нужен и я его выкинул). Скрытый текст function SetStateRecord(ID, state) addressList = getAddressList() memoryRecord = addressList.getMemoryRecordByID(326) memoryRecord.Active = state end signatura = AOBScan("8B 84 98 1C 01 00 00") if signatura ~= nil then SetStateRecord("326",true) end Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 18 июня, 2016 Поделиться Опубликовано 18 июня, 2016 Используй FindWindow, укажешь заголовок окна и его класс, и при нахождении такого окна - получишь его дескриптор. Дальше тебе останется только получить ID процесса - тут уже используй GetWindowThreadProcessId, с полученным дескриптором. В итоге у тебя будет ID процесса, и дальше к нему подключайся в обычном режиме, а скрипт активируй уже как душе угодно. Garik66 тебе уже предложил вариант. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения