R Oxox S Cript Exec Utor (RSEXEC) ist eine Befehlszeilenschnittstelle, die hauptsächlich die Weartevs-API verwendet, um Skripte auf dem Rōblox-Client auszuführen. Schwester -Repository zu persönlichen Roblox -Client -Skripten.
Um mein Programm auszuführen, stellen Sie sicher, dass Python installiert ist und Sie Windows verwenden.
PIP Installation -r Anforderungen.txtpython SRC/Main.py
Ich habe JJSPLOIT einige Jahre lang verwendet und festgestellt, dass es für die Produktivität nicht großartig ist, wenn die meisten meiner anderen Workflows in PowerShell leben, wenn die meisten meiner anderen Workflows leben. Es war ein Problem für mich, ein neues Datei-Selector-Fenster zu öffnen und ein paar Anfangswerte zu ändern, um ein Skript zu erhalten, das ich zum Ausführen speichert habe. Zu viele Klicks!
Um dieses Problem zu lösen, musste ich iterieren. Ich habe mit dem Hinzufügen einer globalen Funktion getrenv().exec
gestartet, der in einem Dateipfad, relativ zu /workspace
und einigen anderen Parametern übergeht. Dann musste ich vorhandene Skripte so ändern, dass sie mit meinem Parameterisierungssystem arbeiten. Ich habe dafür gesorgt, dass Skripte auch zurückkehren könnten, falls sie t brauchten. Dies verwandelte meinen rudimentären Skript -Hub in eine erweiterbare Funktionsbibliothek!
Ich war noch nicht fertig! Ich schrieb ein Python -Programm, um die Weetevs DLL durch finj.exe
zu hängen und mich bequem von meinem Terminal mit den genannten Pipes zu verbinden. Die Ausgabe wurde weiterhin auf die Entwicklerkonsole gedruckt, für die noch eine Mausintervention erforderlich war. Deshalb schrieb ich klobiger Wrapper -Code, der das Modul -Ausgang in die Konsole eingeht (und nicht mit Rconsoleprint verwendet). Es hat sich seitdem drastisch verbessert.
Die angezeigten Befehle spiegeln nicht das wider, was in der Lua getrenv()
oder getfenv()
Umgebungen verfügbar ist.
Befehle bestehen aus zwei Hauptteilen: dem Kopf und dem Körper.
Der Kopf ist der Substring, der vom ersten Nicht-Whitespace-Charakter bis zum ersten Raum danach reicht.
Der Kopf zeigt oft auf einen Alias, der im folgenden Format eine Datei ist:
$ {Root_Folder}/Workspace/$ {Base_name} .lua
Der Körper ist alles danach.
Einige Befehle (z. B. find
) teilen den Körper unter Verwendung eines Raumtrainers weiter in verschiedene Parameter auf. Andere (wie output
) behandeln den gesamten Körper als ein einziges Argument.
Befehle werden von beiden vorangestellt ;
oder :
da weder verwendet wird, um eine Aussage in Lua (u) zu beginnen.
> ;output 6+4 10
> ;output "string" string
> ;output workspace game.Workspace
Der output
kann für o
ersetzt werden.
Es ist möglich, Multi-Wert-Tupel in einem Arbeitsbereichsskript in die LUA-Variable _E.OUTPUT
zu speichern (siehe 'Ausgabeformatierung'). Die generierte Ausgabe aus mehreren Rückgabewerten wird durch getrennt ;
. Die Funktion von string.gsub()
in Lua gibt beispielsweise immer ein Tupel zurück, das aus (String, Nummer) besteht:
> ;output (string.gsub("abb", "b", "c")) acc; 2
/workspace
> ;chat "I'm exploiting and probably will catch someone's attention!" 6
Wenn /workspace/chat.lua
existiert, wird es ausgeführt, wobei die globale Tabelle _E.ARGS
initialisiert wurde als:
{"Ich nutze aus und werde wahrscheinlich die Aufmerksamkeit von jemandem erregen!", 6}
Einige Skripte geben Sachen zurück.
> ;plr 'vis' game.Players.VisualPlugin
Wie bei jeder guten Skript -Ausführungsplattform sollte RSEXEC in der Lage sein, Skripte aus dem Internet auszuführen. Der Name loadstring
ist hier irreführend, da sie im Gegensatz zu seinem LUA -Gegenstück auch den Lua -Code von einer bereitgestellten URL erfasst. Beachten Sie, dass die URL nicht in Zitate eingewickelt ist, da sie nicht aus einem Lua -Objekt analysiert wird.
> ;ls https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source
Dies funktioniert mehr oder weniger wie:
loadstring(game:HttpGet('https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source'))()
Das Präfix ls
kann durch loadstring
ersetzt werden.
Codeblöcke ohne Befehlspräfix werden in As-IS an den Evaluator weitergeleitet.
> game.Players.LocalPlayer.Character.Humanoid.Health = 0
> ;snippet game.Players.LocalPlayer.Character.Humanoid.Health = 0
Dein Charakter sollte so oder so sterben.
Alternativ können Sie Präfix snippet
verwenden.
Das Präfix snippet
kann durch snip
oder s
ersetzt werden.
Multi-Line-Snippets akzeptieren immer wieder Eingaben bis zur ersten leeren Linie. Nützlich für Prototypen ... ich denke?
> ;multiline game.Players.LocalPlayer.Character.Humanoid.Health = 0 > ;o 6 6
Das ist ein anderer Weg, wie Ihr Charakter sterben kann. Es druckt auch 6, um die Unterscheidbarkeit zu fördern.
Das Präfix multiline
kann durch ml
oder m
ersetzt werden.
> ;del [[tree game.Workspace:GetDescendants()]]
Aus /workspace/tree.lua
gibt eine Liste aller Objekte in Ihrem Arbeitsbereich zurück.
Dann löscht von /workspace/del.lua
alles in der Liste.
Um menschlich zu erzeugen, drucken einige Arbeitsbereichskripte eine benutzerdefinierte Zeichenfolge, wenn sie auf der oberen Ebene aufgerufen werden. Diese Callee -Skripte initialisieren eine optionale _E.OUTPUT
-Tabelle am Ende des Körpers.
Viele dieser benutzerdefinierten Ausgänge verwenden ANSI -Farbcodes, um die Lesbarkeit zu verbessern.
> ;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} ...
Dieses Verhalten wird jedoch nicht angewendet, wenn es aus einem verschachtelten Anruf ausgeführt wird. Das folgende Snippet druckt eine maschinellere LUA-Tabelle:
> ;output [[tree game.ReplicatedStorage]] { game.ReplicatedStorage.EmoteBar, game.ReplicatedStorage.EmoteBar.clientConfig, game.ReplicatedStorage.EmoteBar.emotes, game.ReplicatedStorage.EmoteBar.enums, ...
RSEXEC führt unmittelbar nach der Injektion von Remote Spy aus. Im Gegensatz zu anderen fortgeschrittenen Implementierungen von Remote Spy werden ebenfalls an den Kunden vía oncliseEvent gesendet. Es gibt keine GUIs, um den Bildschirm zu überladen. Die Fernbedienungen füllen jedoch in /workspace/_rspy.dat
auf einer Basis pro Sitzung aus. RSEXEC bietet eine Möglichkeit, Remote -Spionageprotokolle in die Konsole abzugeben, wie unten gezeigt. Ausführende dump
startet den Dateizeiger am Ende der vorherigen Lesung gemäß Dateinamen:
> 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} ...
Das Ergebnis von /workspace/tree.lua
hier ist jedes Objekt im Arbeitsbereich, dessen Name des Elternteils "Kopf" ist.
Die Zeichenfolge:
[[function return a1.Parent.Name == 'Head']]
... wird ersetzt mit:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
Die function
kann für func
oder f
ersetzt werden.
Lambdas sind nützlich, um dynamische Einzeiler zu schreiben, die andere Merkmale der RSEXEC-Sprache nutzen. Ich persönlich benutze es viel für den 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 funktioniert ähnlich wie das f
-Präfix, fügt jedoch das return
-Schlüsselwort vor der Funktionskörper hinzu.
Die Zeichenfolge:
[[lambda a1.Parent.Name == 'Head']]
... wird ersetzt durch:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
Das Präfix lambda
kann durch l
ersetzt werden.