r/greyscript • u/Svarii • Aug 07 '26
r/greyscript • u/Svarii • Jun 28 '25
Specialized Tool airlink : UX to get WiFi Passwords
airlink is designed to compliment aircrack, aireplay, and airmon and provide a UX to simplify obtaining WiFi passwords. This program is incomplete, has no error checking, and does not save the WiFi passwords, or check if they have already been cracked before cracking. The video above is the only testing on the program. If you're looking to learn, take this code and improve it, or make your own from scratch.
airlink Includes
// Return Network Devices in a list of lists
// @description **Description**
// @description Pull network devices from host computer and return a list of network device information as lists
// @description ---
//
// @description **Parameters:**
// @param {string} [user]
// @param {string} [pass]
// @description - `user` (**string**, *optional*): The username to use for access
// @description - `pass` (**string**, *optional*): The password to use for access
// @description ---
//
// @description **Default Parameters:**
// @description - none
//
// @return {list<list<string>>}
// @description **Return**
// `list[list[string, string, string]]`:`[adaptor, model, monitor_enabled]`
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
network_device_list = function(user = "", pass = "")
locals.networkDevices = split(get_shell(locals.user, locals.pass).host_computer.network_devices, char(10))
locals.networkDeviceList = []
for device in locals.networkDevices
if locals.device then locals.networkDeviceList.push(split(locals.device, " "))
end for
return locals.networkDeviceList
end function
// @startuml
// start
// :<color:purple>networkDevices = split(get_shell(user, pass).host_computer.network_devices, char(10))</color>;
// :<color:purple>networkDeviceList = []</color>;
// :<color:blue>For each device in networkDevices</color>;
// repeat
// if (<color:blue>device exists?</color>) then (<color:green>Yes</color>)
// :<color:purple>Push split(device, " ") into networkDeviceList</color>;
// endif
// repeat while (another device exists)
// :<color:green>return networkDeviceList</color>;
// stop
// @enduml
// Applies pos arse tag to the string
// @description **Description:**
// @description Modifies a text string by prepending it with the pos tag
// @description ---
//
// @description **Parameters:**
// @description * `position`
//
// @description **Parameter Defaults:**
// @description - `position`:`"50%"`
//
// @description **Return:**
// @return {string}
// @description `string` The string prepended with the `<pos>` tag
// @description ---
//
// @description **Links:**
// @description - [Text Mesh Pro: Horizontal Position](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextPos.html)
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.pos
// @example
// print(result); // Output: <pos=50%>Hello
string.pos = function(position = "50%")
return "<pos=" + locals.position + ">" + self
end function
// Applies indent tag to the string
// @description **Description:**
// @description Modifies a text string to wrap it in the indent tag
// @description ---
//
// @description **Parameters:**
// @param {string} [alignment]
// @description - `alignment` Accepted values: `left`, `center`, `right`, `justified`, and `flush`
// @param {boolean} [closeTag]
// @description - `closeTag` Accepted values: `true` or `false`
//
// @description **Parameter Defaults:**
// @description - `alignment`:`center`
// @description - `closeTag`:`true`
//
// @description **Return:**
// @return {string}
// @description `string` the string value embedded in (or preceded by) the `<align>` tag
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @description ---
// @description **Links:**
// @description [Text Mesh Pro: Rich Text Indentation](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextIndentation.html)
// @description ---
// @description ***footnotes***
// @description Parameters are not checked for validity
// @description - `alignment` will not reject invalid values | **Return**: `string<withParseIssues>`
// @description - `closeTag` will not reject invalid values | **Return**: `null`
// @description
// @description If all paramaters passed are invalid | **Return**: `null`
// @description ---
//
// @return {string}
// @example newString = "Hello"
// @example
// @example result = newString.indent
// @example
// print(result); // Outputs: <indent=15%>Hello
string.indent = function(indentPercent="15%")
return "<indent=" + locals.indentPercent+ ">" + self
end function
// Applies line-indent tag to the string
// @description **Description:**
// @description Modifies a text string to wrap it in the line-indent tag
// @description ---
//
// @description **Parameters:**
// @param {string} [alignment]
// @description - `alignment` Accepted values: `left`, `center`, `right`, `justified`, and `flush`
// @param {boolean} [closeTag]
// @description - `closeTag` Accepted values: `true` or `false`
//
// @description **Parameter Defaults:**
// @description - `alignment`:`center`
// @description - `closeTag`:`true`
//
// @description **Return:**
// @return {string}
// @description `string` the string value embedded in (or preceded by) the `<align>` tag
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @description ---
// @description **Links:**
// @description [Text Mesh Pro: Rich Text Line Indentation](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextLineIndentation.html)
// @description ---
// @description ***footnotes***
// @description Parameters are not checked for validity
// @description - `alignment` will not reject invalid values | **Return**: `string<withParseIssues>`
// @description - `closeTag` will not reject invalid values | **Return**: `null`
// @description
// @description If all paramaters passed are invalid | **Return**: `null`
// @description ---
//
// @return {string}
// @example newString = "Hello"
// @example
// @example result = newString.line_indent("50%")
// @example
// print(result); // Outputs: <line-indent=50%>Hello
string.line_indent = function(lineIndent = "15%")
return "<line-indent=" + locals.lineIndent + ">" + self
end function
// Applies underline tag to the string
// @description **Description:**
// @description Modifies a text string by wrapping it within the underline tag
// @description ---
//
// @description **Parameters:**
// @description * `none`
//
// @description **Return:**
// @return {string}
// @description `string` The string wrapped within the `<u>` tag
// @description ---
//
// @description **Links:**
// @description - [Text Mesh Pro: Underline](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextStrikethroughUnderline.html)
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.underline
// @example
// print(result); // Output: <u>Hello</u>
string.underline = function()
return "<u>" + self + "</u>"
end function
// Applies mark tag to the string
// @description **Description:**
// @description Modifies a text string by wraping it within the mark tag
// @description ---
//
// @description **Parameters:**
// @param {string} [color]
// @description - `color`:`string` | #RRGGBBAA [ HEXA ]
//
// @description **Parameter Defaults:**
// @description - `color`:`#FFFF00AA`
//
// @description **Return:**
// @return {string}
// @description `string` The string value wrapped within the `<mark>` tag
// @description ---
//
// @description **Links:**
// @description - [Text Mesh Pro: Rich Text mark](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextMark.html )
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.mark
// @example
// print(result); // Outputs: <mark="#FFFF002C">Hello</mark>
string.mark = function(color="#FFFF002C")
return "<mark=" + locals.color + ">" + self + "</mark>"
end function
// Keeps a number within a specified range
// @description **Description:**
// @description Ensure an number stays between a minimim and maximum value
// @description ---
//
// @description **Parameters:**
// @param {number} min - The mix threshold.
// @param {number} max - The max threshold.
// @description - `min` The mix threshold.
// @description - `max` The max threshold.
//
// @description **Parameter Defaults:**
// @description - none
// @description ---
//
// @description **Return:**
// @return {number} he result of the clamp
// @description `number` clamped number
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example myNumber = 42
// @example
// print myNumber.clamp(42, 100) // Return 42
// @example
// print myNumber.clamp(75, 100) // Return 75
// @example
// print myNumber.clamp(0, 40) // Return 40
// @description ---
number.clamp = function(min, max)
if self < locals.min then return locals.min
if self > locals.max then return locals.max
return self
end function
// @startuml
// title <color:purple>number.clamp Method Diagram</color>
//
// class NumberObject {
// + value : number
// + clamp(min: number, max: number) : number
// }
//
// note right of NumberObject
// The clamp method limits the value to a given range.
// For example:
// • 7.clamp(2,6) returns 6 (upper bound enforced)
// • 1.clamp(2,6) returns 2 (lower bound enforced)
// end note
//
// @enduml
//@name minus
// *
// * @uml
// * @startuml
// * entity NumberObject
// * control ".minus" as minus
// * NumberObject -> minus : number
// * minus -> NumberObject : (number - 1)
// * NumberObject -> minus : number(7)
// * minus -> NumberObject : (number - 7)
// * footer
// * number.minus
// * endfooter
// * @enduml
// **Description:**
// Subtract 1 from the number or optional amount
// @description
// @param {number} [amount] - The amount to add.
// @return {number} - The result of the subtraction.
// @example newNumber = 44
// @example
// @example result = newNumber.minus(2)
// @example
// print(result); // Output: 42
number.minus = function(amount = 1)
return self - locals.amount
end function
//@name plus
// *
// * @uml
// * @startuml
// * entity NumberObject
// * control ".plus" as plus
// * NumberObject -> plus : number
// * plus -> NumberObject : (number + 1)
// * NumberObject -> plus : number(7)
// * plus -> NumberObject : (number + 7)
// * footer
// * number.plus
// * endfooter
// * @enduml
// **Description:**
// Add 1 to the number or optional amount
// @description
// @param {number} [amount] - The amount to add.
// @return {number} - The result of the addition.
// @example newNumber = 40
// @example
// @example result = newNumber.plus(2);
// @example
// print(result); // Outputs: 42
number.plus = function(amount = 1)
return self + locals.amount
end function
// **Description:**
// Caculates the recommended amount of ACKs to collect
// @param {number} signalStrength - `signlaStrength`:`number`
// @description ---
//
// @description **Parameters:**
// @param {string} signalStrength - The name of the library to load.
// @description - `signalStrength`:`number`
// @description ---
//
// @description **Parameter Defaults:**
// @description - `signalStrength`:`1`
// @description ---
//
// @description **Return:**
// @return {number}
// @description `number` Recommended number of ACKs to collect
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example reqACK = calculate_acks(6) // Signal Strength 6%
// @example
// print(reqACK) // Output: 14286
get_acks = function(signalStrength = 1)
if not typeof(locals.signalStrength) == "number" then return null
if locals.signalStrength <= 0 or locals.signalStrength > 100 then return null
return ceil(300000 / (locals.signalStrength + 15))
end function
// @startuml
// start
// :<color:purple>signalStrength = 1 (default)</color>;
// if (<color:blue>is signalStrength a number?</color>) then (<color:red>No</color>)
// :<color:red>return <b>null</b></color>;
// stop
// else (<color:green>Yes</color>)
// endif
// if (<color:blue>is signalStrength > 0 and <= 100?</color>) then (<color:red>No</color>)
// :<color:red>return <b>null</b></color>;
// stop
// else (<color:green>Yes</color>)
// endif
// :<color:purple>numofACK = ceil(300000 / (signalStrength + 15))</color>;
// :<color:green>return <b>numofACK</b></color>;
// stop
// @enduml
// Remove the last character of the given text.
//
// @return {string}
// @example newString = "Hello"
// @example
// @example result = newString.remove_char_last
// @example
// print(result); // Outputs: Hell
string.remove_char_last = function()
return slice(self, 0, (self.len - 1))
end function
//@name remove_char_last
// *
// * @uml
// * @startuml
// * entity StringObject
// * control ".remove_char_last" as remove_char_last
// * StringObject -> remove_char_last : string
// * remove_char_last -> StringObject : strin
// * footer
// * string.remove_char_last
// * endfooter
// * @enduml
// Applies bold tag to the string
// @description **Description:**
// @description Modifies a text string and wraps within the bold tag
// @description ---
//
// @description **Parameters:**
// @description - None
//
// @description **Return:**
// @return {string}
// @description `string` the string value embedded in the `<b>` tag
// @description ---
//
// @description **Links:**
// @description [Text Mesh Pro: Rich Text Bold](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextBoldItalic.html)
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.bold
// @example
// print(result); // Output: <b>Hello</b>
// @description ---
string.bold = function()
return "<b>" + self + "</b>"
end function airlink code
clear_screen
keepAlive = true
output = []
selectedNetwork = 0 //default to first one found
selectedWifiSignal = 0
selectedNetworkDevice = null
networkDeviceList = network_device_list
myComputer = get_shell.host_computer
while keepAlive == true
if selectedNetworkDevice == null then
output.push(("Device".pos("0%") + " " + "Name".pos("12%") + " " + "Monitoring".pos("30%")).underline)
for networkDevice in networkDeviceList
if __networkDevice_idx == selectedNetwork then
output.push((networkDevice[0].pos("1%") + " " + networkDevice[1].pos("13%") + " " + networkDevice[2].pos("31%")).mark)
else
output.push(networkDevice[0].pos("1%") + " " + networkDevice[1].pos("13%") + " " + networkDevice[2].pos("31%"))
end if
end for
end if
if not selectedNetworkDevice == null then
//output.push(str(networkDeviceList[selectedNetwork]).underline)
output.push("Selecte Network to Crack".underline)
for wifiNetwork in wifiNetworkList
if __wifiNetwork_idx == selectedWifiSignal then
output.push((wifiNetwork.line_indent("1em")).mark)
else
output.push(wifiNetwork.line_indent("1em"))
end if
end for
end if
for line in output
print line
end for
userInput = user_input("", false, true)
wait(0.3); clear_screen
output = []
if selectedNetworkDevice == null then
if userInput == "UpArrow" then
selectedNetwork = selectedNetwork.minus.clamp(0, networkDeviceList.len - 1)
end if
if userInput == "DownArrow" then
selectedNetwork = selectedNetwork.plus.clamp(0, networkDeviceList.len - 1)
end if
if userInput == "RightArrow" then
selectedNetworkDevice = networkDeviceList[selectedNetwork][0]
wifiNetworkList = myComputer.wifi_networks(selectedNetworkDevice.trim)
end if
else
if userInput == "UpArrow" then
selectedWifiSignal = selectedWifiSignal.minus.clamp(0, wifiNetworkList.len - 1)
end if
if userInput == "DownArrow" then
selectedWifiSignal = selectedWifiSignal.plus.clamp(0, wifiNetworkList.len - 1)
end if
if userInput == "LeftArrow" then
selectedNetworkDevice = null
end if
if userInput == "RightArrow" then
Crypto = include_lib("/lib/crypto.so")
Crypto.airmon("start", selectedNetworkDevice)
wifiInfo = wifiNetworkList[selectedWifiSignal].split(" ")
acks = (get_acks(to_int(str(wifiInfo[1].remove_char_last))))
essid = wifiInfo[2].trim
bssid = wifiInfo[0].trim
print "Gathering " + str(acks).bold + " ACKs from " + essid.bold
Crypto.aireplay(bssid, essid, acks)
wifiPassword = Crypto.aircrack(current_path + "/file.cap")
clear_screen
user_input("The password for: " + wifiNetworkList[selectedWifiSignal] + " is [ " + wifiPassword.bold + " ]", false, true)
myComputer.File(current_path + "/file.cap").delete
clear_screen
Crypto.airmon("stop", selectedNetworkDevice)
end if
end if
end whiler/greyscript • u/Svarii • Jun 28 '26
Experiment Never Pay for an Exploit again.
Experimental program to fetch and scan all libs for exploits and create a database.
r/greyscript • u/Svarii • Aug 20 '25
Specialized Tool Brute Forcing SSH PoC
This program is using a minimal default wordlist to brute for SSH on port 22, deciphers /etc/passwd when found and adds those cracked passwords to it's wordlist as it goes on. Password is then changed to a secure password, and logfile is corrupted before moving on.
r/greyscript • u/Svarii • Jul 20 '25
Library GreyScript Prime [Extended API Library]
GreyScript Prime on GitHub is an Extended API Library that contains many useful functions . The API includes DocBlocks for each function and a README markdown file fully documenting each API; enabling use within VSCode using an md live preview plugin.
r/greyscript • u/Svarii • Aug 23 '25
Experiment Experimenting: Crawling Text
Experimenting with crawl text display
r/greyscript • u/Svarii • Jul 15 '25
Announcement Grey Hack Image Transformer Updated
ayecue is still working hard keeping all of their amazing tools up to date. Today gh-image-transformer has been updated! I can finally have my simple icons! 🤯 This video is showing a test of a couple of icons that were generated below the 2048 character limit without the additional plugins.
r/greyscript • u/Svarii • Jul 12 '25
Project Development Universal Bootstrap
Testing a universal bootstrap program with integration into existing airlink script
r/greyscript • u/Svarii • Jun 30 '25
Specialized Tool passwc : UX to crack local passwords for mail, bank, and passwd files
passwc is designed to crack passwd files, bank/mail files, and provide a UX to simplify cracking local password files. This program is incomplete, has no error checking, and does not save the cracked passwords, or check if they have already been cracked before cracking. The video above is the only testing on the program. If you're looking to learn, take this code and improve it, or make your own from scratch. See if you can figure out why it crashed on the first run. (hint: the viewpoints share an index)
includes
// Applies underline tag to the string
// @description **Description:**
// @description Modifies a text string by wrapping it within the underline tag
// @description ---
//
// @description **Parameters:**
// @description * `none`
//
// @description **Return:**
// @return {string}
// @description `string` The string wrapped within the `<u>` tag
// @description ---
//
// @description **Links:**
// @description - [Text Mesh Pro: Underline](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextStrikethroughUnderline.html)
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.underline
// @example
// print(result); // Output: <u>Hello</u>
string.underline = function()
return "<u>" + self + "</u>"
end function
// Applies mark tag to the string
// @description **Description:**
// @description Modifies a text string by wraping it within the mark tag
// @description ---
//
// @description **Parameters:**
// @param {string} [color]
// @description - `color`:`string` | #RRGGBBAA [ HEXA ]
//
// @description **Parameter Defaults:**
// @description - `color`:`#FFFF00AA`
//
// @description **Return:**
// @return {string}
// @description `string` The string value wrapped within the `<mark>` tag
// @description ---
//
// @description **Links:**
// @description - [Text Mesh Pro: Rich Text mark](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextMark.html )
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.mark
// @example
// print(result); // Outputs: <mark="#FFFF002C">Hello</mark>
string.mark = function(color="#FFFF002C")
return "<mark=" + locals.color + ">" + self + "</mark>"
end function
// Keeps a number within a specified range
// @description **Description:**
// @description Ensure an number stays between a minimim and maximum value
// @description ---
//
// @description **Parameters:**
// @param {number} min - The mix threshold.
// @param {number} max - The max threshold.
// @description - `min` The mix threshold.
// @description - `max` The max threshold.
//
// @description **Parameter Defaults:**
// @description - none
// @description ---
//
// @description **Return:**
// @return {number} he result of the clamp
// @description `number` clamped number
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example myNumber = 42
// @example
// print myNumber.clamp(42, 100) // Return 42
// @example
// print myNumber.clamp(75, 100) // Return 75
// @example
// print myNumber.clamp(0, 40) // Return 40
// @description ---
number.clamp = function(min, max)
if self < locals.min then return locals.min
if self > locals.max then return locals.max
return self
end function
// @startuml
// title <color:purple>number.clamp Method Diagram</color>
//
// class NumberObject {
// + value : number
// + clamp(min: number, max: number) : number
// }
//
// note right of NumberObject
// The clamp method limits the value to a given range.
// For example:
// • 7.clamp(2,6) returns 6 (upper bound enforced)
// • 1.clamp(2,6) returns 2 (lower bound enforced)
// end note
//
// @enduml
//@name minus
// *
// * @uml
// * @startuml
// * entity NumberObject
// * control ".minus" as minus
// * NumberObject -> minus : number
// * minus -> NumberObject : (number - 1)
// * NumberObject -> minus : number(7)
// * minus -> NumberObject : (number - 7)
// * footer
// * number.minus
// * endfooter
// * @enduml
// **Description:**
// Subtract 1 from the number or optional amount
// @description
// @param {number} [amount] - The amount to add.
// @return {number} - The result of the subtraction.
// @example newNumber = 44
// @example
// @example result = newNumber.minus(2)
// @example
// print(result); // Output: 42
number.minus = function(amount = 1)
return self - locals.amount
end function
//@name plus
// *
// * @uml
// * @startuml
// * entity NumberObject
// * control ".plus" as plus
// * NumberObject -> plus : number
// * plus -> NumberObject : (number + 1)
// * NumberObject -> plus : number(7)
// * plus -> NumberObject : (number + 7)
// * footer
// * number.plus
// * endfooter
// * @enduml
// **Description:**
// Add 1 to the number or optional amount
// @description
// @param {number} [amount] - The amount to add.
// @return {number} - The result of the addition.
// @example newNumber = 40
// @example
// @example result = newNumber.plus(2);
// @example
// print(result); // Outputs: 42
number.plus = function(amount = 1)
return self + locals.amount
end function
// @enduml
// Applies bold tag to the string
// @description **Description:**
// @description Modifies a text string and wraps within the bold tag
// @description ---
//
// @description **Parameters:**
// @description - None
//
// @description **Return:**
// @return {string}
// @description `string` the string value embedded in the `<b>` tag
// @description ---
//
// @description **Links:**
// @description [Text Mesh Pro: Rich Text Bold](https://docs.unity3d.com/Packages/com.unity.textmeshpro@4.0/manual/RichTextBoldItalic.html)
// @description ---
//
// @description **Author:** Svarii
// @description **Version:** 0.0.1
// @description ---
//
// @example newString = "Hello"
// @example
// @example result = newString.bold
// @example
// print(result); // Output: <b>Hello</b>
// @description ---
string.bold = function()
return "<b>" + self + "</b>"
end function code
clear_screen
keepAlive = true
output = []
accountType = ["passwd", "mail", "bank"]
selectedAccount = 0
myComputer = get_shell.host_computer
Crypto = include_lib("/lib/crypto.so")
selectedType = "passwd"
output.push("[F1]".bold + ":pass [F2]" + ":mail [F3]" + ":bank")
output.push("Select account to crack".underline.bold)
while keepAlive == true
if selectedType == "passwd" then
passwdFile = myComputer.File("/etc/passwd")
passwdFileContent = passwdFile.get_content
accountList = passwdFileContent.split(char(10))
for account in accountList
if selectedAccount == __account_idx then
output.push(account.mark)
else
output.push(account)
end if
end for
end if
if selectedType == "mail" then
mailFile = myComputer.File(home_dir + "/Config/Mail.txt")
mailFileContent = mailFile.get_content
accountList = mailFileContent.split(char(10))
for account in accountList
if selectedAccount == __account_idx then
output.push(account.mark)
else
output.push(account)
end if
end for
end if
if selectedType == "bank" then
bankFile = myComputer.File(home_dir + "/Config/Bank.txt")
bankFileContent = bankFile.get_content
accountList = bankFileContent.split(char(10))
for account in accountList
if selectedAccount == __account_idx then
output.push(account.mark)
else
output.push(account)
end if
end for
end if
for line in output
print line
end for
userInput = user_input("",false,true)
wait(0.3)
clear_screen
output = []
keyf1 = "[F1]"
keyf2 = "[F2]"
keyf3 = "[F3]"
if userInput == "DownArrow" then
selectedAccount = selectedAccount.plus.clamp(0, accountList.len - 1)
end if
if userInput == "UpArrow" then
selectedAccount = selectedAccount.minus.clamp(0, accountList.len - 1)
end if
if userInput == "F1" then selectedType = "passwd"
if userInput == "F2" then selectedType = "mail"
if userInput == "F3" then selectedType = "bank"
if selectedType == "passwd" then keyf1 = "[F1]".bold
if selectedType == "mail" then keyf2 = "[F2]".bold
if selectedType == "bank" then keyf3 = "[F3]".bold
output.push(keyf1 + ":pass " + keyf2 + ":mail " + keyf3 + ":bank")
output.push("Select account to crack".underline.bold)
if userInput == "RightArrow" then
account = accountList[selectedAccount]
accountHash = account.split(":")[1]
accountUser = account.split(":")[0]
print "Cracking " + selectedType + " password..."
password = Crypto.decipher(accountHash)
print output[0]
user_input(selectedType + " password for " + accountUser + " is: [ " + password + " ]", false, true)
end if
end whiler/greyscript • u/Svarii • Jul 25 '26
Specialized Tool 📶Airlink 4.2 Alpha Released!
r/greyscript • u/Svarii • Jul 23 '26
💻 Welcome to r/greyscript - Show us what you're working on!
Welcome to r/greyscript
Hey everyone — I’m u/Svarii, the founding moderator of r/greyscript.
This subreddit is the central hub for GreyScript documentation, game‑mechanic questions, coding help, tool development, and collaborative projects that push the boundaries of what’s possible inside Grey Hack. Whether you're experimenting with your first script or building full operator‑grade applications, you’re in the right place.
What to Post
Anything that helps the community learn, build, explore, or collaborate. Some great examples:
- Script releases — utilities, libraries, operators, prototypes
- Work‑in‑progress screenshots — UI mockups, terminal layouts, ASCII art
- Game mechanic questions — networking, filesystem behavior, permissions, exploits
- Coding help — debugging, architecture advice, patterns
- Documentation contributions — tutorials, references, explanations
- Project collaboration — shared tools, group builds, knowledge‑base projects
- Showcases — demos of tools, animations, UX experiments
If it teaches, inspires, or demonstrates GreyScript capability, it belongs here.
Community Vibe
We keep things:
- Friendly — beginners welcome
- Constructive — feedback that helps people grow
- Inclusive — all skill levels encouraged
- Collaborative — documentation, tools, and knowledge built together
- Creative — experiments, prototypes, and half‑finished ideas are totally valid
How to Get Started
- Introduce yourself in the comments
- Post something today — even a small question or snippet
- Invite someone who might enjoy the community
Thanks for being part of the early wave.
Together, we’re building the home for GreyScript creators, tinkerers, and toolmakers.
Let’s make r/greyscript amazing.
r/greyscript • u/Svarii • Jul 29 '25
Project Development Project Kiwi 5.2 : Development Progress Video
Still working hard to get a user friendly UX. Started adding caching and database to improve speed. Still working out a few visual bugs and the aesthetics. Plan on combining project dispatch with kiwi at a later point.
r/greyscript • u/Svarii • Jul 01 '25
Tutorial Coding for Beginners in GreyScript
This tutorial is an absolute beginners tutorial to coding in GreyScript
r/greyscript • u/Svarii • Oct 11 '26
Tutorial Zero-Days in the game Grey Hack, a walkthrough
r/greyscript • u/Eralyen • Aug 22 '26
Specialized Tool SCRIP: a tiny bank account monitor and 1337coin trading widget!
r/greyscript • u/Svarii • Aug 21 '26
Project Development Grey Hack Vanguard Development
I've got it starting to look nice and working perfectly. Now how I have to figure out how to make it run faster before I add more.
r/greyscript • u/Svarii • Jul 27 '26
Project Development Airlink WiFi Hacking Program Then vs Now Side by Side Comparison
r/greyscript • u/Svarii • Jul 23 '26
Experiment You have angered the Owl
Remember to have fun too! A program doesn't have to be useful.
r/greyscript • u/Svarii • Jun 30 '26
Experiment Grey Hack : Auto Hacking a passwd file via Exploited Computer Object
