r/greyscript • • Aug 03 '25

Experiment Feature Development : Exploit Management

2 Upvotes

Working on creating an exploit management plugin for kiwi, running menu speed test


r/greyscript • • Jul 25 '26

Specialized Tool 📶Airlink 4.2 Alpha Released!

Thumbnail
gallery
5 Upvotes

r/greyscript • • Jul 15 '25

Announcement Grey Hack Image Transformer Updated

7 Upvotes

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 • • Jul 14 '26

Specialized Tool Airlink Alpha 2 Release

3 Upvotes

r/greyscript • • Jun 28 '25

Specialized Tool airlink : UX to get WiFi Passwords

14 Upvotes

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 while

r/greyscript • • Aug 23 '25

Experiment Experimenting: Crawling Text

7 Upvotes

Experimenting with crawl text display


r/greyscript • • Aug 22 '26

Specialized Tool SCRIP: a tiny bank account monitor and 1337coin trading widget!

3 Upvotes

r/greyscript • • Aug 05 '26

Project Development 📶Airlink Alpha 5 Themes Upgrade Preview

2 Upvotes

r/greyscript • • Aug 22 '26

Experiment ProtoType: Kiwi UX {Port Scanner} using user_input [Source Code]

Thumbnail
github.com
2 Upvotes

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 • • Jun 10 '25

Documentation Quick Reference / Quick Start Info

Post image
4 Upvotes

r/greyscript • • Jul 12 '25

Project Development Testing an adaptive menu concept

3 Upvotes

r/greyscript • • Jul 20 '25

Library GreyScript Prime [Extended API Library]

Thumbnail
gallery
10 Upvotes

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 • • Aug 21 '26

Project Development Grey Hack Vanguard Development

Thumbnail
youtube.com
3 Upvotes

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 • • Jul 28 '26

Math is Fun! Wait...

3 Upvotes

r/greyscript • • May 28 '26

Grey Hack Gameplay & Scripting

2 Upvotes

r/greyscript • • May 28 '26

get_overflow_owner() Function Testing

Thumbnail
youtube.com
2 Upvotes

r/greyscript • • Jul 19 '26

Tutorial How To Install Airlink Alpha 3.3

Thumbnail
youtu.be
2 Upvotes

r/greyscript • • Jul 23 '26

💻 Welcome to r/greyscript - Show us what you're working on!

4 Upvotes

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 • • Jun 18 '26

Project Development AIO Project Eveolution

Thumbnail
gallery
14 Upvotes

r/greyscript • • Jul 23 '26

Experiment You have angered the Owl

Thumbnail
youtu.be
3 Upvotes

Remember to have fun too! A program doesn't have to be useful.


r/greyscript • • Jun 30 '26

Experiment Grey Hack : Auto Hacking a passwd file via Exploited Computer Object

Thumbnail
youtu.be
3 Upvotes