R OBLOX S CRIPT EXEC UTOR (RSEXEC) adalah antarmuka baris perintah yang terutama menggunakan API Wearedevs untuk menjalankan skrip pada klien Rōblox. Sister Repository to pribadi skrip klien roblox.
Untuk menjalankan program saya, pastikan Python diinstal dan Anda menggunakan Windows.
PIP menginstal -r persyaratan.txtpython src/main.py
Saya menggunakan JJSploit selama beberapa tahun dan menemukan bahwa harus berurusan dengan GUI di sana ketika sebagian besar alur kerja saya yang lain tinggal di PowerShell tidak bagus untuk produktivitas. Merepotkan bagi saya untuk membuka jendela pemilih file baru dan memodifikasi beberapa nilai awal hanya untuk mendapatkan skrip yang saya simpan untuk dijalankan. Terlalu banyak klik!
Untuk mengatasi masalah itu, saya harus mengulangi. Saya mulai dengan menambahkan fungsi global getrenv().exec
yang lewat di jalur file, relatif ke /workspace
dan beberapa parameter lainnya. Kemudian saya harus memodifikasi skrip yang ada untuk bekerja dengan sistem parameterisasi saya. Saya memastikan bahwa skrip juga dapat kembali jika mereka membutuhkan t. Ini mengubah hub skrip dasar saya menjadi perpustakaan fungsi yang dapat diperluas!
Saya belum selesai! Saya menulis program Python untuk mengaitkan Dll Weangedevs melalui finj.exe
dan terhubung dengan pipa bernama dari kenyamanan terminal saya. Output masih dicetak ke konsol pengembang, yang masih membutuhkan intervensi mouse - jadi saya menulis kode pembungkus clunky yang menyalurkan output modul ke konsol (dan tidak menggunakan rconsoleprint). Sejak itu meningkat secara drastis.
Perintah yang ditampilkan tidak mencerminkan apa pun yang tersedia di lingkungan LUA getrenv()
atau getfenv()
.
Perintah terdiri dari dua bagian utama: kepala dan tubuh.
Kepala adalah substring mulai dari karakter non-whitespace pertama hingga ruang pertama setelah itu.
Kepala sering menunjuk ke alias yang merupakan file dalam format berikut:
$ {Root_folder}/workspace/$ {base_name} .lua
Tubuh adalah segalanya setelahnya.
Beberapa perintah (seperti find
) membagi tubuh lebih jauh menjadi parameter yang berbeda menggunakan pembatas ruang. Lainnya (seperti output
) memperlakukan seluruh tubuh sebagai argumen tunggal.
Perintah diawali oleh keduanya ;
atau :
karena tidak ada yang digunakan untuk memulai pernyataan di Lua (U).
> ;output 6+4 10
> ;output "string" string
> ;output workspace game.Workspace
output
awalan dapat diganti dengan o
Dimungkinkan untuk menyimpan tupel multi-value ke dalam variabel LUA _E.OUTPUT
dalam skrip ruang kerja (lihat 'format output'). Output yang dihasilkan dari beberapa nilai pengembalian dipisahkan oleh ;
. Fungsi string.gsub()
di LUA misalnya selalu mengembalikan tuple yang terdiri dari (string, angka) :
> ;output (string.gsub("abb", "b", "c")) acc; 2
/workspace
> ;chat "I'm exploiting and probably will catch someone's attention!" 6
If /workspace/chat.lua
ada, itu akan dieksekusi, dengan tabel global _E.ARGS
diinisialisasi sebagai:
{"Saya mengeksploitasi dan mungkin akan menarik perhatian seseorang!", 6}
Beberapa skrip mengembalikan barang.
> ;plr 'vis' game.Players.VisualPlugin
Seperti platform eksekusi skrip yang bagus, RSEXEC harus dapat menjalankan skrip dari Internet. Nama loadstring
menyesatkan di sini karena tidak seperti rekan LUA -nya, ia juga mengambil kode LUA dari URL yang disediakan. Perhatikan bahwa URL tidak dibungkus dengan kutipan, karena tidak diuraikan dari objek LUA.
> ;ls https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source
Ini bekerja lebih atau kurang sama seperti:
loadstring(game:HttpGet('https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source'))()
Awalan ls
dapat diganti dengan loadstring
.
Blok kode tanpa awalan perintah akan diteruskan di AS-IS kepada evaluator.
> game.Players.LocalPlayer.Character.Humanoid.Health = 0
> ;snippet game.Players.LocalPlayer.Character.Humanoid.Health = 0
Karakter Anda harus mati dengan cara apa pun.
Atau, Anda dapat menggunakan snippet
awalan.
snippet
awalan dapat diganti dengan snip
atau s
.
Cuplikan multi-line terus menerima input hingga garis kosong pertama. Berguna untuk membuat prototipe ... kurasa?
> ;multiline game.Players.LocalPlayer.Character.Humanoid.Health = 0 > ;o 6 6
Itulah cara lain karakter Anda bisa mati. Ini juga mencetak 6 untuk mempromosikan kemampuan membedakan.
multiline
awalan dapat diganti dengan ml
atau m
.
> ;del [[tree game.Workspace:GetDescendants()]]
Dari /workspace/tree.lua
, mengembalikan daftar semua objek di ruang kerja Anda.
Kemudian, dari /workspace/del.lua
, menghapus semuanya dalam daftar.
Untuk menghasilkan output yang sesuai manusia, beberapa skrip ruang kerja mencetak string khusus ketika dipanggil di tingkat atas. Script Callee ini menginisialisasi tabel _E.OUTPUT
opsional di dekat ujung tubuh.
Banyak dari output khusus tersebut menggunakan kode warna ANSI untuk meningkatkan keterbacaan.
> ;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} ...
Namun, perilaku ini tidak diterapkan ketika dilakukan dari panggilan bersarang. Cuplikan berikut akan mencetak tabel Lua yang dibaca mesin:
> ;output [[tree game.ReplicatedStorage]] { game.ReplicatedStorage.EmoteBar, game.ReplicatedStorage.EmoteBar.clientConfig, game.ReplicatedStorage.EmoteBar.emotes, game.ReplicatedStorage.EmoteBar.enums, ...
RSEXEC menjalankan mata -mata jarak jauh segera setelah disuntikkan. Acara yang dikirim ke klien Vía OnclientEvent juga diterima, tidak seperti implementasi Lanjutan dari Remote Spy. Tidak ada GUI yang ada untuk mengacaukan layar. Namun remote mengisi di /workspace/_rspy.dat
berdasarkan per sesi. RSEXEC menawarkan cara untuk membuang log mata -mata jarak jauh ke konsol, seperti yang ditunjukkan di bawah ini. Mengeksekusi dump
memulai pointer file dari akhir pembacaan sebelumnya, per nama file:
> 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} ...
Hasil /workspace/tree.lua
di sini adalah setiap objek di ruang kerja yang nama orangtuanya adalah 'head'.
String:
[[function return a1.Parent.Name == 'Head']]
... diganti dengan:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
function
awalan dapat diganti dengan func
atau f
.
Lambdas berguna untuk menulis satu kalimat dinamis yang memanfaatkan fitur lain dari bahasa RSEXEC. Saya pribadi banyak menggunakannya untuk perintah 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 bekerja mirip dengan awalan f
, tetapi menambahkan kata kunci return
sebelum badan fungsi.
String:
[[lambda a1.Parent.Name == 'Head']]
... diganti dengan:
(function(a1, a2, ...) return a1.Parent.Name == 'Head' end)
Awalan lambda
dapat diganti dengan l
.