Files
StatelessUsb/stateless.ps1
T

189 lines
5.4 KiB
PowerShell
Raw Normal View History

2023-02-27 19:41:26 -07:00
$conf = Get-Content .\data.json -Raw | ConvertFrom-Json
echo "StatelessUsb By ASTATIN3"
$charLowercase = "qwertyuioppasdfghjklzxcvbnm"
$charUppercase = "QWERTYUIOPASDFGHJKLZXCVBNM"
$charNumber = "1234567890"
$charSymbol = "``~!@#$%^&*()_+[]`\{}|;`':`",./<>?"
$fullCharset = $charLowercase + $charUppercase + $charNumber + $charSymbol
function printOpts() {
echo ""
echo "0 - Exit"
echo "1 - Site: $site"
echo "2 - Username: $user"
echo "3 - Length: $length"
echo "4 - Include Lowercase: $isLower"
echo "5 - Include Uppercase: $isUpper"
echo "6 - Include Numbers: $isNumber"
echo "7 - Include Symbols: $isSymbol"
echo "8 - Print"
echo "9 - Generate"
echo "10 - Save"
}
function selector() {
printOpts
:manual while(1){
$opt2 = Read-Host -Prompt ">"
echo ""
switch($opt2){
0 {
return
}
1 {$site = Read-Host -Prompt "Site>"}
2 {$user = Read-Host -Prompt "Username>"}
3 {$length = Read-Host -Prompt "Length>"}
4 {$isLower = (Read-Host -Prompt "Include Lowercase>") -eq "True"}
5 {$isUpper = (Read-Host -Prompt "Include Uppercase>") -eq "True"}
6 {$isNumber = (Read-Host -Prompt "Include Numbers>") -eq "True"}
7 {$isSymbol = (Read-Host -Prompt "Include Symbols>") -eq "True"}
8 {
printOpts
}
9 {
echo "Enter Master Password"
$pass = Read-Host -AsSecureString -Prompt ">"
$pass = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($pass))
echo "Copied to clipboard"
Set-Clipboard (RandStr ((toInt $site) + (toInt $user) + (toInt $pass)))
}
10 {
$tempconf = "["
for($i = 0; $i -lt $conf.length; $i++){
if($i -ne 0){ $tempconf += ","}
$tempconf += ConvertTo-Json @{
site = $conf[$i].site
user = $conf[$i].user
length = $conf[$i].length
lower = $conf[$i].lower
upper = $conf[$i].upper
number = $conf[$i].number
symbol = $conf[$i].symbol
}
}
$tempconf += ","
$tempconf += ConvertTo-Json @{
site=$site
user=$user
length=$length
lower=$isLower
upper=$isUpper
number=$isNumber
symbol=$isSymbol
}
$tempconf += "]"
echo $tempconf > ./data.json
}
default {continue}
}
}
}
function toInt($Str){
$result = ''
for($i = 0; $i -le $Str.length-1; $i++){
$result += $fullCharset.IndexOf($Str[$i])
}
$result = $result -as [Int64]
echo $result
}
function RandStr($seed){
$charset = ''
if(!$site -or !$user){
echo "Invalid Configuration"
return
}
if($isLower){ $charset += $charLowercase}
if($isUpper){ $charset += $charUppercase}
if($isNumber){ $charset += $charNumber}
if($isSymbol){ $charset += $charSymbol}
$result = ''
for($i = 0; $i -lt $length; $i++){
$result += $charset[(Rand $seed $i $charset.length)]
}
return $result
}
function Rand(){
param(
$state1,
$state2,
$limit
)
$mod1=4294967087 -as [Int64]
$mul1=65539 -as [Int64]
$mod2=4294965887 -as [Int64]
$mul2=65537 -as [Int64]
$state1 = $state1 -as [Int64]
$state2 = $state2 -as [Int64]
$limit = $limit -as [Int32]
$state1=$state1 % ($mod1-1)+1
$state2=$state2 % ($mod2-1)+1
$state1=($state1*$mul1)%$mod1
$state2=($state2*$mul2)%$mod2
if($state1 -lt $limit -and $state2 -lt $limit -and $state1 -lt $mod1%$limit -and $state2 -lt $mod2%$limit){
return random($limit)
}
return (($state1+$state2) % $limit)
}
:main while(1){
echo ""
echo "0 - Exit"
echo "1 - Read existing entry"
echo "2 - Manual"
$opt = Read-Host -Prompt ">"
echo ""
switch($opt){
0 {break main}
1 {
for($i = 0;$i -le $conf.length-1;$i++){
echo ([String]$i + " - " + $conf[$i].site)
}
while(1){
$opt = read-host ">"
if($opt -le $conf.length-1 -and $opt -ge 0){
break
}
echo "Incorrect option"
}
$site = $conf[$opt].site
$user = $conf[$opt].user
$length = $conf[$opt].length
$isLower = $conf[$opt].lower
$isUpper = $conf[$opt].upper
$isNumber = $conf[$opt].number
$isSymbol = $conf[$opt].symbol
selector
}
2 {
$site = ""
$user = ""
$length = 16
$isLower = $true
$isUpper = $true
$isNumber = $true
$isSymbol = $true
selector
}
default {continue main}
}
}