R Oblox S Cript Execut utor (rsexec)-это интерфейс командной строки, который в первую очередь использует API Wearedevs для запуска сценариев на клиенте Rōblox. Сестринское хранилище в личные сценарии клиентов Roblox.
Чтобы запустить мою программу, убедитесь, что Python установлен и что вы используете Windows.
PIP установка -R Требования.
Я использовал jjsploit в течение нескольких лет и обнаружил, что необходимость разобраться с GUI там, когда большинство других моих рабочих процессов живут в PowerShell, не подходит для производительности. Для меня было хлопот открыть новое окно селектора файлов и изменить несколько начальных значений, чтобы получить сценарий, который я сохранил для запуска. Слишком много кликов!
Чтобы решить эту проблему, я должен был итерацию. Я начал с добавления глобальной функции getrenv().exec
, которая проходит в пути файла, относительно /workspace
и несколько других параметров. Затем мне пришлось изменить существующие сценарии для работы с моей системой параметризации. Я позаботился о том, чтобы сценарии также могли вернуться на случай, если им понадобится т. Это превратило мой элементарный центр сценария в расширяемую библиотеку функций!
Я еще не закончил! Я написал программу Python, чтобы подключить DLL Wearedevs через finj.exe
и связан с названными трубами, не выходя из моего терминала. Вывод все еще был напечатан на консоли разработчика, которая все еще требовалась вмешательства мыши, поэтому я написал неуклюжий код обертки, который выводит модуль модуля в консоли (и не используя rconsoleprint). С тех пор это значительно улучшилось.
Показанные команды не отражают то, что доступно в средах lua getrenv()
или getfenv()
.
Команды состоят из двух основных частей: голова и тело.
Голова -это подстрока, начиная от первого персонажа, не относящегося к бегству, до первого пространства после него.
Голова часто указывает на псевдоним, который является файлом в следующем формате:
$ {Root_folder}/workspace/$ {base_name} .lua
Тело - это все после этого.
Некоторые команды (такие как find
) разделяют тело дальше на различные параметры с использованием космического разделителя. Другие (такие как output
) рассматривают все тело как единый аргумент.
Команды префикс заполнены любым ;
или :
как ни один из них не используется, чтобы начать утверждение в Lua (U).
> ;output 6+4 10
> ;output "string" string
> ;output workspace game.Workspace
output
префикса может быть заменен на o
.
Можно хранить многозначные кортежи в переменной LUA _E.OUTPUT
в сценарии рабочего пространства (см. «Форматирование вывода»). Сгенерированный выход из нескольких возвращаемых значений отделен ;
Полем Функция string.gsub()
в LUA, например, всегда возвращает кортеж, состоящий из (строка, номер) :
> ;output (string.gsub("abb", "b", "c")) acc; 2
/workspace
> ;chat "I'm exploiting and probably will catch someone's attention!" 6
Если /workspace/chat.lua
существует, она будет выполнена, с глобальной таблицей _E.ARGS
инициализирована как:
{"Я эксплуатирую и, вероятно, привлечет чье -то внимание!", 6}
Некоторые сценарии возвращают вещи.
> ;plr 'vis' game.Players.VisualPlugin
Как и любая хорошая платформа выполнения сценариев, RSEXEC должен иметь возможность запускать сценарии из Интернета. Название loadstring
здесь вводит в заблуждение, потому что в отличие от его аналога Lua, оно также захватывает код LUA из предоставленного URL. Обратите внимание, что URL не обернут в кавычки, так как он не проанализирован из объекта LUA.
> ;ls https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source
Это работает более или менее так же, как:
loadstring(game:HttpGet('https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source'))()
Префикс ls
может быть заменен на loadstring
.
Кодовые блоки без командного префикса будут переданы как есть оценщику.
> game.Players.LocalPlayer.Character.Humanoid.Health = 0
> ;snippet game.Players.LocalPlayer.Character.Humanoid.Health = 0
Ваш персонаж должен умереть в любом случае.
В качестве альтернативы вы можете использовать префикс snippet
.
Префикс snippet
может быть заменен на snip
или s
Многослойные фрагменты продолжают принимать вход до первой пустой линии. Полезно для прототипирования ... я думаю?
> ;multiline game.Players.LocalPlayer.Character.Humanoid.Health = 0 > ;o 6 6
Это еще один способ умереть ваш персонаж. Он также печатает 6, чтобы способствовать различимости.
Префикс multiline
может быть заменен ml
или m
> ;del [[tree game.Workspace:GetDescendants()]]
От /workspace/tree.lua
, возвращает список всех объектов в вашем рабочем пространстве.
Затем из /workspace/del.lua
удаляет все в списке.
Чтобы создать человеческий выход, некоторые сценарии рабочего пространства печатают индивидуальную строку при вызове на верхнем уровне. Эти скрипты Callee инициализируют необязательную таблицу _E.OUTPUT
в конце тела.
Многие из этих пользовательских выходов используют цветные коды ANSI для улучшения читаемости.
> ;tree game.ReplicatedStorage [02] game.ReplicatedStorage.EmoteBar {ModuleScript} [03] game.ReplicatedStorage.EmoteBar.clientConfig {ModuleScript} [03] game.ReplicatedStorage.EmoteBar.emotes {ModuleScript} [03] game.ReplicatedStorage.EmoteBar.enums {ModuleScript} ...
Тем не менее, это поведение не применяется, когда это сделано из вложенного звонка. Следующий фрагмент печатает таблицу с машиной LUA:
> ;output [[tree game.ReplicatedStorage]] { game.ReplicatedStorage.EmoteBar, game.ReplicatedStorage.EmoteBar.clientConfig, game.ReplicatedStorage.EmoteBar.emotes, game.ReplicatedStorage.EmoteBar.enums, ...
Rsexec запускает удаленный шпион сразу же, как только он будет введен. События, отправленные клиенту Vía OnclientEvent, также получены, в отличие от других передовых реализаций удаленного шпиона. Там нет графиков, чтобы загромождать экран. Удаленные, однако, заполняются в /workspace/_rspy.dat
на основе. Rsexec предлагает способ сбросить удаленные шпионские журналы в консоли, как показано ниже. Выполнение dump
запускает указатель файла с конца предыдущего чтения, на имя файла:
> dump rspy
> ;tree game.workspace [[function return a1.Parent.Name == 'Head']] [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.Head {WrapTarget} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.NeckRigAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.FaceFrontAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.HatAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.HairAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.FaceCenterAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.Neck {Motor6D} ...
Результатом /workspace/tree.lua
здесь является все объекты в рабочем пространстве, имя родителя которого является «голова».
Строка:
[[function return a1.Parent.Name == 'Head']]
... заменяется:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
function
префикса может быть заменена на func
или f
.
Lambdas полезны для написания динамических однострочников, которые используют другие особенности языка rsexec. Я лично использую это много для команды tree
.
> ;tree game.workspace [[lambda a1.Parent.Name == 'Head']] [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.Head {WrapTarget} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.NeckRigAttachment {Attachment} [06] game.Workspace.InteractiveModels.AvatarEditorModel.NpcModel.Head.FaceFrontAttachment {Attachment} ...
Lambdas работают аналогично префиксу f
, но добавляет ключевое слово return
перед корпусом функции.
Строка:
[[lambda a1.Parent.Name == 'Head']]
... заменяется:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
Префикс lambda
может быть заменен на l
.