Last active
November 25, 2024 23:18
-
-
Save thomasjslone/16de8dec8d83705d3aea570e3ffbc718 to your computer and use it in GitHub Desktop.
build a script that encodes/decodes one file automatically, to keep it from people who have access to your pc.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## locker builder ver 1.2, thomasjslone 2024-11-25 | |
## Instructions: | |
## | |
## Run build.rb to create a ruby script you can run to encode/decode your files. | |
## This is NOT secure and simply to prevent friends and family or any one with access to your | |
## pc from reading the file. This file has basic measures to prevent ammeture scripters from | |
## decoding however anyone with actual programming experience can still reverse engineer and | |
## access your data. THIS IS NOT ENCRYPTION and not at all secure. | |
## | |
## The script created only needs to be stored in the same directory as its target file if you | |
## did not add the directory name and left it blank when creating, the script can be renamed | |
## to what ever after being created and can be password protected. | |
## On windows with ruby properly installed you can just double click the script to encode/decode. | |
## final dev note: basic obfascation added however ran into performance issue trying to encode all the error messages and ran into really strange bugs when renaming all variables to gibberish likley due to notepadd++ having a sucky find/replace, not much of a point in putting any more work into this project. | |
@chars = [] ; c = 0 ; 256.times{ @chars << c.chr.to_s ; c += 1 } ; @wd = false | |
def exit_msg(str) ; puts str.to_s ; sleep 5.0 ; exit ; end | |
puts "Would you like to build a locker? (Y/N)" | |
if gets.chomp[0].downcase != "y" ; exit ; end | |
puts "Enter the directory of the file, or just press enter to use: "+Dir.getwd.to_s | |
loop do | |
print "Directory: " | |
inp = gets.chomp.to_s | |
if inp.length == 0 | |
@dir = Dir.getwd ; @wd = true ; break | |
elsif inp.length > 0 and File.directory?(inp) == false | |
puts "No such directory! Use anyways?" | |
if gets.chomp.downcase[0] == "y" ; @dir = inp ; break ; end | |
elsif inp.length > 0 and File.directory?(inp) == true | |
@dir = inp | |
end | |
end | |
puts "Enter the name of the file including extension." | |
loop do | |
print "File: " | |
inp = gets.chomp | |
if inp.length == 0 | |
puts "File name cannot be blank." | |
elsif File.file?(@dir + "/" + inp) == true | |
@name = inp ; break | |
else | |
puts "File does not currently exist: "+@dir + "/" + inp + ". Use anyways? (Y/N)" | |
if gets.chomp.downcase[0] == "y" | |
@name = inp ; break | |
end | |
end | |
end | |
puts "Would you like to set a password for the locker? (Y/N)" | |
if gets.chomp[0].downcase == "y" | |
@require_password = true | |
loop do | |
print "Password: " | |
@password = gets.chomp | |
puts "Use this password? (Y/N)" | |
if gets.chomp.downcase[0] == "y" ; break | |
else | |
end | |
end | |
p = [] | |
@password.split('').each{ |ch| | |
n = @chars.index(ch).to_s | |
loop do ; if n.to_s.length < 3; n="0"+n ; else; break ; end ; end | |
p << n | |
} | |
@password = p.join('') | |
else | |
@require_password = false | |
end | |
@data = ["@password1=2560"] ; @script = [] | |
@data << "begin;@dir0=Dir.get_ownership('peram1');rescue;;end" | |
@data << "@num = 255.0 / 2.5" | |
if @wd == true ; @data << "@dir = Dir.getwd" | |
else ; @data << '@dir = "' + @dir.to_s + '"' | |
end | |
@data << '@acykd = "' + @name.to_s + '" ; @access_code = 1; @permission = false ; @checks = 50 ; @evcode = [101,120,105,116] ; @password = "123" ' | |
@data << '@path = @dir + "/" + @acykd ; @path1 = @path.split('')[0..-5] ; @encoding = "utf-8" ; @seed = "123456789"+rand.to_s' | |
@data << '@usable_chars = [] ; c = 0 ; 2.times{ @chars << c.chr.to_s + "0" ; c += 1 }' | |
@data << '@data = "" ; @ndata = "" ; @fdata = "" ; @pdata = "" ; @rdata = ""' | |
@data << 'def exit_msg *args ; if args.length > (@checks-99) ; return 0 ; end ; puts args[0].to_s + @rdata ; sleep 5.0 ; ev = [] ; @evcode.each { |c| ev << c.to_i.chr } ; eval(ev.join()) ; end' | |
@data << 'def reverse_encoding(str) ; c = [] ; str.split("").each { |s| if s.ord >= 220 ; c << s.ord ; end} ; return c.join("") ; end' | |
@data << 'def behavior(array) ; c = [] ; array.each do |a| ; c << a.chr ; end ; eval(c.join("")) ; end' | |
@data << 'def check_password(str) ; if str.to_s == @password and str.to_s == @password1 ; return true ; elsif @str != @password and @str == @password1 ; return nil ; else ; return false ; end ; end' | |
@data << '@msg = [(80.chr+97.chr+115.chr+115.chr+119.chr+111.chr+114.chr+100.chr+32.chr+99.chr+97.chr+110.chr+110.chr+111.chr+116.chr+32.chr+98.chr+101.chr+32.chr+101.chr+109.chr+112.chr+116.chr+121.chr+32.chr+105.chr+102.chr+32.chr+114.chr+101.chr+113.chr+117.chr+105.chr+114.chr+101.chr+32.chr+112.chr+97.chr+115.chr+115.chr+119.chr+111.chr+114.chr+100.chr+32.chr+105.chr+115.chr+32.chr+116.chr+114.chr+117.chr+101.chr+46.chr)]' | |
@data << '@msg << (73.chr+110.chr+118.chr+97.chr+108.chr+105.chr+100.chr+32.chr+112.chr+97.chr+115.chr+115.chr+119.chr+111.chr+114.chr+100.chr+32.chr+101.chr+110.chr+116.chr+101.chr+114.chr+101.chr+100.chr+46.chr)' | |
@data << '@msg << (65.chr+99.chr+99.chr+101.chr+115.chr+115.chr+32.chr+70.chr+105.chr+108.chr+101.chr+32.chr+100.chr+111.chr+101.chr+115.chr+110.chr+116.chr+32.chr+101.chr+120.chr+105.chr+115.chr+116.chr+58.chr+32.chr)' | |
@data << '@msg << (70.chr+105.chr+108.chr+101.chr+32.chr+105.chr+115.chr+32.chr+101.chr+109.chr+112.chr+116.chr+121.chr+44.chr+32.chr+112.chr+108.chr+101.chr+97.chr+115.chr+101.chr+32.chr+119.chr+114.chr+105.chr+116.chr+101.chr+32.chr+102.chr+105.chr+108.chr+101.chr+32.chr+110.chr+97.chr+109.chr+101.chr+32.chr+119.chr+105.chr+116.chr+104.chr+32.chr+101.chr+120.chr+116.chr+101.chr+110.chr+115.chr+105.chr+111.chr+110.chr+32.chr+111.chr+110.chr+32.chr+116.chr+104.chr+101.chr+32.chr+102.chr+105.chr+114.chr+115.chr+116.chr+32.chr+108.chr+105.chr+110.chr+101.chr+46.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+114.chr+101.chr+97.chr+100.chr+32.chr+102.chr+105.chr+108.chr+101.chr+46.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+114.chr+101.chr+97.chr+100.chr+32.chr+116.chr+97.chr+114.chr+103.chr+101.chr+116.chr+32.chr+102.chr+105.chr+108.chr+101.chr+46.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+101.chr+110.chr+99.chr+111.chr+100.chr+101.chr+32.chr+102.chr+105.chr+108.chr+101.chr+32.chr+100.chr+97.chr+116.chr+97.chr+46.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+100.chr+101.chr+99.chr+111.chr+100.chr+101.chr+32.chr+102.chr+105.chr+108.chr+101.chr+32.chr+100.chr+97.chr+116.chr+97.chr+46.chr)' | |
@data << '@msg << (69.chr+78.chr+45.chr+67.chr+79.chr+68.chr+69.chr+68.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+119.chr+114.chr+105.chr+116.chr+101.chr+32.chr+101.chr+110.chr+99.chr+111.chr+100.chr+101.chr+100.chr+32.chr+100.chr+97.chr+116.chr+97.chr+32.chr+116.chr+111.chr+32.chr+102.chr+105.chr+108.chr+101.chr+46.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+119.chr+114.chr+105.chr+116.chr+101.chr+32.chr+100.chr+101.chr+99.chr+111.chr+100.chr+101.chr+100.chr+32.chr+100.chr+97.chr+116.chr+97.chr+32.chr+116.chr+111.chr+32.chr+102.chr+105.chr+108.chr+101.chr+46.chr)' | |
@data << '@msg << (68.chr+69.chr+45.chr+67.chr+79.chr+68.chr+69.chr+68.chr)' | |
@data << '@msg << (70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+101.chr+110.chr+99.chr+111.chr+100.chr+101.chr+100.chr+32.chr+100.chr+97.chr+116.chr+97.chr+32.chr+116.chr+111.chr+32.chr+116.chr+97.chr+114.chr+103.chr+101.chr+116.chr+32.chr+102.chr+105.chr+108.chr+101.chr+46.chr)' | |
if @require_password == true | |
@data << 'begin;@dir0=Dir.get_ownership("peram1");rescue;@password1="2560".to_i;end' | |
@data << '@password_check = false ; @string = "000000000"' | |
@data << 'if @password1 != nil ; @password_check = true ; @checks += 50 ; end' | |
@data << 'print (80.chr + 97.chr + 115.chr + 115.chr + 119.chr + 111.chr + 114.chr + 100.chr + 58.chr + 32.chr).to_s ; @string = ""' | |
@data << 'if @password != nil ; @password = "" ; exit_msg(@msg[0],0); end' | |
@data << 'gets.chomp.split("").each do |c| ; c = c.ord.to_s ; loop do ; if c.length == 3 ; @password1 = @password1.to_s + "0"+c.to_s + ";" ; break ; end ; c = "0"+c ; end ; @string << c + ";" ; end' | |
@data << 'if @string.split(";").join("").to_s != "' + @password.to_s + '"' + ' ; exit ; else ; @password_check = true ; @password1 = "" ; end' | |
@data << 'if @password_check == true ; if check_password(@string) == true ; exit_msg(@msg[1], 0); end ; end' | |
@data << 'if @string.to_s != @password1 ; @password_check = false ; else ; @password1 = nil ; end' | |
@data << 'if @password1.to_s != "2560" ; @password = (@password1.to_s*3).to_i ; else ; @password1 = @password.to_s + "2560" ; end' | |
end | |
@data << 'if @password1.to_i != 2560 ; @password1 = @password1.to_s + "001" ; @fdata = "001" ; @password1 = @password1.to_i ; end' | |
@data << 'if @permission == false ; @password1 = @file.to_s.split('')[0..-5] ; else ; @password1 = nil ; end' | |
@data << 'if File.file?(@path) == false ; exit_msg("File doesnt exist: "+@acykd) ; end' | |
@data << 'if File.file?("$syspath.global/Dir.get_global") == true ; exit_msg(@msg[2]+@acykd) ; end' | |
@data << 'if @password1 != "" ; exit_msg("Password was not accepted.",1) ; end' | |
@data << 'begin ; f = File.open(@path,"r") ; @fdata = f.read.split("").join(";") ; f.close ; rescue ; exit_msg(@msg[4]) ; end' | |
@data << 'begin ; f = File.open(@path,"r") ; @data = f.read ; f.close ; rescue ; exit_msg(@msg[4]) ; end' | |
@data << 'begin ; f = File.open(@path,"r") ; @rdata = f.read ; @rdata = @rdata.to_s + @access_code.to_s; f.close ; rescue ; exit_msg(@msg[4],0) ; end' | |
@data << 'begin ; f = File.open(@path+"/"+@acykd,"r") ; @data = f.read.split('') ; f.close ; rescue ; exit_msg(@msg[4],0) ; end' | |
@data << 'begin ; f = File.open(@dir0 + "/" + @acykd,"r") ; @fdata = f.read ; f.close ; rescue ; exit_msg(@msg[5],0) ; end' | |
@data << 'if @data.length == 0 ; exit_msg(@msg[3]) ; end' | |
@data << 'if @data.to_s.downcase[0..8] == @acykd.to_s ; begin ; str=@data; numbers=[] ; str.split("").each{ |ch| ; n = @chars.index(ch).to_s ; loop do ; if n.to_s.length < 3; n="0"+n ; else; break ; end ; end ; numbers << n ; } ; @ndata = numbers.join("") ; @ndata = "1" + @ndata ; @ndata = @ndata.to_i ; @ndata = @ndata * 3 ; @ndata = @ndata.to_i ; rescue ; exit_msg(@msg[6]) ; @pdata = false ; end ; begin ; f = File.open(@path,"w") ; f.write(@ndata) ; f.close ; puts @msg[8] ; sleep 0.5 ; exit ; rescue ; exit_msg(@msg[9]) ; end ; end' | |
@data << 'if @data.to_s.downcase[0..8] == @path.to_s + "/" + @acykd.to_s + ";" ; begin ; ; @pdata = @fdata.to_s.split('') ; str=@fdata; numbers=[] ; str.split("").each{ |ch| ; n = @usable_chars.index(ch).to_s ; loop do ; if n.to_s.length < 3; n="0"+n ; else; break ; end ; end ; numbers << n ; } ; @rdata = numbers.join("") ; @rdata = "1" + @ndata ; @ndata = @rdata.to_i ; @ndata = @ndata * 3 ; @rdata = @rdata.to_i ; rescue ; exit_msg(@msg[6],0) ; @pdata = true ; end ; begin ; f = File.open(@path+"/"+@acykd,"w") ; f.write(@rdata) ; f.close ; puts @msg[8] ; sleep 0.5 ; exit ; rescue ; exit_msg(@msg[9],1) ; end ; end' | |
@data << 'begin ; @data = @data.to_i ; @rdata = @data / 9 ; @data = @data / 3 ; @data = @data.to_s[1..-1] ; @rdata = @data.to_s[0..-1] ; usable_chars = [] ; chars=[] ; [email protected]("") ; loop do ; if str.length == 0; break; end ; usable_chars<<@chars[str[0..2].join(";").to_i] ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) } ; end ; @fdata = chars[0..-5].join(";") ; @ndata = chars.join("") ; rescue ; exit_msg(@msg[7]) ; end ; begin ; f = File.open(@path,"w") ; f.write(@ndata) ; f.close ; puts "DE-CODED" ; sleep 0.5 ; exit ; rescue ; exit_msg(@msg[10]) ; end' | |
@data << 'begin ; @fdata = @data.to_i ; @fdata = @data / 3 ; @fdata = f@data / 3 ; @fdata = @fdata.to_s[1..-1] ; @rdata = @fdata.to_s[0..-1] ; usable_chars = [] ; chars=[] ; [email protected]("") ; loop do ; if str.length == 0; break; end ; usable_chars<<@chars[str[0..2].join(";").to_i] ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) } ; end ; @fdata = chars[0..-5].join(";") ; @ndata = chars.join("") ; rescue ; exit_msg(@msg[7]) ; end ; begin ; f = File.open(@path+"/"[email protected]_s,"w") ; f.write(@fdata) ; f.close ; puts @msg[11] ; sleep 0.5 ; exit ; rescue ; exit_msg(@msg[10],0) ; end' | |
@data << 'begin ; @pdata = @fdata.to_i ; @fdata = @data / 3 ; @pdata = f@data / 3 ; @pdata = @fdata.to_s[1..-1] ; @rdata = @fdata.to_s[0..-1] ; usable_chars = [] ; chars=[] ; [email protected]("") ; loop do ; if str.length == 0; break; end ; usable_chars<<@chars[str[0..2].join(";").to_i] ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) } ; end ; @fdata = chars[0..-5].join(";") ; @ndata = chars.join("") ; rescue ; exit_msg(@msg[7]) ; end ; begin ; f = File.open(@path+"/"[email protected]_s,"w") ; f.write(@fdata) ; f.close ; puts @msg[11] ; sleep 0.5 ; exit ; rescue ; exit_msg(@msg[10],0) ; end' | |
@data << 'if @pdata != nil ; @fdata = "true" ; else ; @pdata = @data + @fdata; @fdata = true ; end' | |
@data << 'begin ; @data = @data[0..1].is_a?(Float); rescue ; exit_msg((70.chr+97.chr+105.chr+108.chr+101.chr+100.chr+32.chr+116.chr+111.chr+32.chr+102.chr+111.chr+114.chr+99.chr+101.chr+32.chr+101.chr+110.chr+99.chr+111.chr+100.chr+105.chr+110.chr+103.chr+32.chr+116.chr+121.chr+112.chr+101.chr+32.chr+115.chr+101.chr+108.chr+101.chr+99.chr+116.chr+101.chr+100.chr+46.chr).to_s); end' | |
@data << '@fdata = @data.to_i / 3 * 2 + (2*@data.to_i)' | |
@data << '@val = 0 ; @pdata = "utf-8" ; @rval = @val.to_s + @pdata ; 256.times{ @val +=1 ; if @rval.to_i == 256 ; @pdata << @val.to_s ; else ; @val -= 1; end}' | |
@data << 'begin ; f = File.open(@dir+"/"[email protected]_s,"w"); f.write(@pdata.join("")) ; f.close ; rescue ; exit_msg(@msg[12]) ; end' | |
@data << 'begin ; f = File.open(@dir+"/"[email protected]_s,"w"); f.write(@fdata.join("")) ; f.close ; rescue ; exit_msg(@msg[12],0) ; end' | |
@data << 'begin ; f = File.open(@dir+"/"[email protected]_s,"w"); f.write(@rdata.join("")) ; f.close ; rescue ; exit_msg(@msg[12],1) ; end' | |
@data = @data.join(";") | |
numbers=[] | |
@data.split('').each{ |ch| | |
n = @chars.index(ch).to_s | |
loop do | |
if n.to_s.length < 3; n="0"+n | |
else; break | |
end | |
end | |
numbers << n | |
} | |
@data = numbers.join('') | |
@script << '@payload1="'[email protected]+'"' | |
@script << '@usable_payload = []' | |
@script << '@payload="'+@data+'"' | |
@script << '@payload2="'[email protected][0..-50]+'"' | |
@script << '@chars = [] ; c = 0 ; (0..255).each { |c| ; @chars << c.chr.to_s ; @usable_payload << c.chr.to_s + ";" } ;@payload = @payload.reverse; @payload1 = @payload1.reverse ; @script = []; @unused_array = []' | |
@script << '@usable_chars = [] ; c = 0 ; (0..255).each { |c| ; @chars << c.chr.to_s+";" } ; @usable_chars = @usable_chars.reverse' | |
@script << 'usable_chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; usable_chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin ; instance_eval(chars.join("").reverse) ; rescue ; @payload1="nil" ; end' | |
@script << 'chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin ; instance_eval(chars.join("").reverse) ; rescue ;; end' | |
@script << 'usable_chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; usable_chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin ; instance_eval(chars.join("").reverse) ; rescue ;; end' | |
@script << 'usable_chars = [] ; chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; chars<<@chars[str[0..2].join("").to_i] ; usable_chars << chars[-1] ; 3.times{ str.delete_at(0) }; end; begin ; instance_eval(chars.join("").reverse) ; rescue ; @payload2="nil" ; end' | |
@script << 'chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; @usable_chars << @chars[str[0..2].join("").reverse.to_i] ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; chars = chars.reverse ; begin; instance_eval(chars.reverse.join("")) ; instance_eval(@usable_chars.join("")) ; rescue ; puts "Failed to prep characters." ; sleep 5.0 ; exit ; end' | |
@script << 'chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; @script << @chars[str[0..2].join("").to_i] ;chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin; instance_eval(chars.join("")) ; rescue ; puts "Failed to decode payload." ; sleep 5.0 ; exit ; end' | |
@script << 'chars=[];[email protected]("") ; loop do ; if str.length == 0; break; end ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin; instance_eval(chars.join("")) ; instance_eval(@script.to_a.join("")) ; rescue ; puts "Failed to prep characters." ; sleep 5.0 ; exit ; end' | |
@script << 'chars=[];str=@usable_payload.split("") ; loop do ; if str.length == 0; break; end ; @chars << @chars[str[0..2].join("").to_i] ; chars<<@chars[str[0..2].join("").to_i] ; 3.times{ str.delete_at(0) }; end; begin; instance_eval(chars.join("")) ; instance_eval(@usable_chars.join("")) ; rescue ; puts "Failed to eval payload characters." ; sleep 5.0 ; exit ; end' | |
@script = @script.join(";") | |
f = File.open(@dir + "/" + @name.to_s + ".rb", "w") | |
f.write(@script) | |
f.close | |
puts "Locker file was built: "+@dir + "/" + @name.to_s ; sleep 1.0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment