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

Автоматическая Активация Скрипта при запуске игры


Submarina

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

Здравствуйте помогите сделать Автоматическую Активацию скрипта AA при запуске игры, и Автоматическое отключения скрипта AA при закрытии игры, если конечно это возможно.

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

вот скрипт, на него хочу это сделать, и на скрипт Жизни.

Скрытый текст

[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)

 

 

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

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

можно сделать как ни будь, чтобы авто подключения было не от названия  процесса Tutorial-i386.exe, а например от сигнатуры 8D 58 01 48 89 D8 48, почему потому что если у ярлыка поменять названия например не Tutorial-i386.exe, его назвать а как ни будь 1234.exe то авто включения скрипта не будет работать.ИЛИ Я ОШИБАЮСЬ 

 

С ЭТИМ Я РАЗОБРАЛСЯ, ОСТАЛОСЬ АВТО ОТКЛЮЧЕНИЯ СДЕЛАТЬ.

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

Всё таки вопрос я не решил. Надо  именно по сигнатуре авто подключения сделать. 

можно сделать как ни будь, чтобы авто подключения было не от названия  процесса Tutorial-i386.exe, а например от сигнатуры 8D 58 01 48 89 D8 48, почему потому что если у ярлыка поменять названия например не Tutorial-i386.exe, его назвать а как ни будь 1234.exe то авто включения скрипта не будет работать

 

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

Можно. Вот тебе логика работы алгоритма:

1. Получение списка процессов

2. Присоединение к каждому процессу, и поиск сигнатуры

 

Только учти, что сигнатура совпадет если не во всех, то почти во всех процессах, а это значит, что тебе заранее нужно знать значение, которое указало бы на нужный процесс. Это - самый очевидный подводный камень, с которым тебе придется разобраться. Второй такой камень тебя ждет именно тогда, когда вспомнишь слово "быстродействие", т.к. перебор кучи процессов в системе, и поиск по сигнатуре в каждом из них - займет некоторое время.

 

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

 

А можно просто перед запуском программы дать юзеру возможность самому указать путь к нужному исполняемому файлу, путем выдачи окна выбора файла. Или, на крайний случай, выдать сообщение юзеру, что процесса "qwerty.exe" не существует.

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

В 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

 

Видео: 

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

то есть я так понял ID этот у каждой игры свой, я так понял по этому ID авто запускается скрипт, а не по названия Fallout2.exe я тебя правильно понял. Garik66

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

15 минуту назад, Baracuda сказал:

то есть я так понял ID этот у каждой игры свой, я так понял по этому ID авто запускается скрипт, а не по названия Fallout2.exe я тебя правильно понял. Garik66

Нет ID в скрипте на видео - это ID записи в таблице и оно будет уникально для твоей таблице (в случае на видео именно скрипта "100% theft") и трейнера, созданного из этой таблицы. 

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

А где мене достать этот Index, что то не понял, я прописал на форуме в поисковике Index, не нашёл, где я могу прочитать обетом. 

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

2 минуты назад, Baracuda сказал:

А где мене достать этот Index, что то не понял, я прописал на форуме в поисковике Index, не нашёл, где я могу прочитать обетом. 

Тут

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

3 минуты назад, Baracuda сказал:

СпасибоGarik66.

Baracuda, обрати внимание на то, что сам СЕ при генерации трейнера опирается именно на ID записей.

Так что  ID записей наиболее уникальная штука, в отличии от индекса и названия.

Ну например название скрипта пользователь может поменять на своё, а ID уже не поменяется никогда. 

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

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

 

 

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

В 17.06.2016в09:22, Baracuda сказал:

Автоматическую Активацию скрипта AA при запуске игры,

 

58 минут назад, Baracuda сказал:

МЕНЕ НУЖНО ЧТОБЫ СКАНИРОВАЛО СИГНАТУРУ И АВТОМАТИЧЕСКИ АКТИВИРОВАЛО СКРИПТ

 

58 минут назад, Baracuda сказал:

надо чтобы сдесь сканировало сигнатуру а не названия

Вопрос твой совсем не понятен.

Давай так попробую сформулировать.

Ты хочешь, чтобы при запуске игры в ранее запущеной таблице СЕ активировался, какой нибудь скрипт по сигнатуре в скрипте (т.е. аобскан) без названия процесса игры.

ТАК?

 

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

Я, если честно, вообще не могу понять, почему важно именно имя исполняемого файла - есть же окно, его название и класс, узнать PID по ним - раз плюнуть. А присоединяться к первому попавшемуся процессу, и активировать скрипт, если название неважно, и не важно, совпадут ли сигнатуры - это как-то (минимум) неправильно... Хотя я чего-то не понимаю, может.

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

4 минуты назад, NullAlex сказал:

Хотя я чего-то не понимаю, может.

Я тоже не понимаю задачу, поэтому и написал предыдущий пост, в котором видно, что задача, как я её сформулировал - полная хрень.:wacko:

и чем не устравивает мой скрипт?

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

Да Garik66 именно так 

Я ПОСТАРАЮСЬ ОБЪЯСНИТЬ 

ЕСТЬ ИГРЫ, В КОТОРЫХ ЗАПУСК СКРИПТА ОСУЩЕСТВЛЯЕТСЯ НЕ ПО НАЗВАНИЮ, А ПО СИГНАТУРЕ, ВОТ ИГРА ОДНА ИЗ ИХ Wasteland 2 СКРИПТ НАПРИМЕР, ЗАПУСКАЕТСЯ НЕ СРАЗУ, А ПОЧЕМУ А ПОТОМУ ЧТО, СКАНИРОВАНИЯ СИГНАТУРЫ ИДЁТ КАКОЕ ТО ВРЕМЯ, И ПОСЛЕ ОН ЗАПУСКАЕТСЯ.

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

Только что, Baracuda сказал:

Да Garik66 именно так 

 

Прочитай предыдущее сообщение, такая задача - полная хрень.

 

Ты можешь просто написать скрипт на LUA, который  будет, если запущена игра (по названию, ID процесса, по названию ID окна - это не важно) сразу же по аобскану выполнять внутренний скрипт, и если не запущена, то не выполнять его. - Такая задача понятна.

А вот активация скрипта в таблице по его сигнатуре, без названия процесса - это хрень.

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

5 минут назад, Baracuda сказал:

Я ПОСТАРАЮСЬ ОБЪЯСНИТЬ 

ЕСТЬ ИГРЫ, В КОТОРЫХ ЗАПУСК СКРИПТА ОСУЩЕСТВЛЯЕТСЯ НЕ ПО НАЗВАНИЮ, А ПО СИГНАТУРЕ, ВОТ ИГРА ОДНА ИЗ ИХ Wasteland 2

Не понятно, выложи пример.

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

Ну что тут не понятно, ВОТ ПРИМЕР, ЗАПУСТИ НЕСКОЛЬКО СРАЗУ ПРОГРАММ Cheat Engine, ШТУКИ 3 ЗАПУСТИЛ СРАЗУ, У НИХ У ВСЕХ, РАЗНЫЙ ID, НО НАЗВАНИЯ ОСТАЮТСЯ ПРЕЖНИМ, ДО ТЕХ ПОР ПОКА ТЫ НЕ ПОМЕНЯЕШЬ ЕГО НА КАКОЕ НИ БУДЬ ДРУГОЕ, И ПОСЛЕ СКРИПТ КОТОРЫЙ ТЫ СДЕЛАЛ НЕ БУДЕТ РАБОТАТЬ, А ЕСЛИ СДЕЛАТЬ СКАНИРОВАНИЯ СИГНАТУРЫ, ТО НЕ ВАЖНО СКОЛЬКО ПРОГРАММ, ТЫ СРАЗУ ЗАПУСТИЛ 2-3 ИЛИ 5 сразу,СКРИПТ БУДЕТ РАБОТАТЬ НАДЕЮСЬ ПОНЯТНО ОБЪЯСНИЛ.

 

ЭТО ВСЁ РОВНО ЧТО TRAINER, КОТОРЫЙ РАБОТАЕТ, НА ЛЮБОЙ ВЕРСИИ ИГРЫ.

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

1 минуту назад, Baracuda сказал:

Ну что тут не понятно, ВОТ ПРИМЕР, ЗАПУСТИ НЕСКОЛЬКО СРАЗУ ПРОГРАММ Cheat Engine, ШТУКИ 3 ЗАПУСТИЛ СРАЗУ, У НИХ У ВСЕХ, РАЗНЫЙ ID, НО НАЗВАНИЯ ОСТАЮТСЯ ПРЕЖНИМ, ДО ТЕХ ПОР ПОКА ТЫ НЕ ПОМЕНЯЕШЬ ЕГО НА КАКОЕ НИ БУДЬ ДРУГОЕ, И ПОСЛЕ СКРИПТ КОТОРЫЙ ТЫ СДЕЛАЛ НЕ БУДЕТ РАБОТАТЬ, А ЕСЛИ СДЕЛАТЬ СКАНИРОВАНИЯ СИГНАТУРЫ, ТО НЕ ВАЖНО СКОЛЬКО ПРОГРАММ, ТЫ СРАЗУ ЗАПУСТИЛ 2-3 ИЛИ 5 сразу,СКРИПТ БУДЕТ РАБОТАТЬ НАДЕЮСЬ ПОНЯТНО ОБЪЯСНИЛ.

Это то понятно, при чём здесь тогда активация скрипта в таблице? 

Есть скрипт, который работает нормально независимо от названия игры (например в зависимости от  репака, некоторые репакеры изменяют название exe-ника, также может поменяться название в МОДах),

Думаю в таком случае нужно в моём в скрипте перечислить возможные разные названия exe-файла игры.

if (getProcessIDFromProcessName("FALLOUT2.exe")~=nil) then
.......
if (getProcessIDFromProcessName("FALLOUT2MOD.exe")~=nil) then
.......
-- и т.д.

А не вмешивать сюда сигнатуру.

 

Либо активировать скрипт просто вручную. (по хоткею, по нажатию кнопки на трейнере)

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

ИМЕННО НАДО ЧТОБЫ СКАНИРОВАЛА СИГНАТУРУ, И ЗАПУСКАЛО АВТОМАТИЧЕСКИ ЭТОТ СКРИПТ, В КОТОРОМ ЭТО СИГНАТУРА УКАЗАННА,  НО КАК СКАЗАЛ NullAlex В ТАКОМ СЛУЧАЕ, СИГНАТУРЫ МОГУТ СОВПАДАТЬ,МЕНЕ ЭТО НЕ ВАЖНО, ВОТ ЭТО МЕНЕ И НАДО.

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

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

 

 

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

Используй FindWindow, укажешь заголовок окна и его класс, и при нахождении такого окна - получишь его дескриптор. Дальше тебе останется только получить ID процесса - тут уже используй GetWindowThreadProcessId, с полученным дескриптором. В итоге у тебя будет ID процесса, и дальше к нему подключайся в обычном режиме, а скрипт активируй уже как душе угодно. Garik66 тебе уже предложил вариант.

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

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

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

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