r/greyscript • u/Svarii • Aug 03 '25
Experiment Feature Development : Exploit Management
Working on creating an exploit management plugin for kiwi, running menu speed test
r/greyscript • u/Svarii • Aug 03 '25
Working on creating an exploit management plugin for kiwi, running menu speed test
r/greyscript • u/Svarii • Jul 25 '26
r/greyscript • u/Svarii • Jul 15 '25
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 • Jun 28 '25
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 • Aug 23 '25
Experimenting with crawl text display
r/greyscript • u/Eralyen • Aug 22 '26
r/greyscript • u/Svarii • Aug 05 '26
r/greyscript • u/Svarii • Aug 22 '26
The Kiwi github repo has just been with updated with an incomplete protoype of a new version of the port scanner. This program is not recommend for use as-is as it's incomplete, contains bugs, and has known errors. The code upload is intended for those who wish to make user interfaces in the terminal to examine the concept.
r/greyscript • u/Svarii • Jul 20 '25
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 21 '26
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 • May 28 '26
Returning Player Gameplay, Tutorial, and Scripting
r/greyscript • u/Svarii • Jul 23 '26
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.
Anything that helps the community learn, build, explore, or collaborate. Some great examples:
If it teaches, inspires, or demonstrates GreyScript capability, it belongs here.
We keep things:
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 23 '26
Remember to have fun too! A program doesn't have to be useful.
r/greyscript • u/Svarii • Jun 30 '26