Advertisement
Narzew

IxPack Secure Packer & Crypter

Nov 18th, 2013
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.67 KB | None | 0 0
  1. #** Ix Pack Secure Archive Packer & Crypter by Narzew
  2. #** v 1.00
  3. #** 18.10.2013
  4.  
  5. require 'zlib'
  6.  
  7. $master_key = rand(0xFFFFFF)
  8. $master_key2 = "msv739fc1"
  9.  
  10. module NRGSS
  11.     def self.location_table(locations_ary)
  12.         result = []
  13.         locations_ary.each{|location|
  14.         Dir.foreach(location){|x|
  15.             if x != '.'
  16.                 if x != '..'
  17.                     result << "#{location}/#{x}"
  18.                 end
  19.             end
  20.             }
  21.         }
  22.         return result
  23.     end
  24. end
  25.  
  26. module IxPack
  27.     def self.transform_key(x)
  28.         r = 0
  29.         c = 1
  30.         x.to_s.crypt("#{$master_key2}-#{$master_key}").each_byte{|x|
  31.             r += x.to_i*(c*256)
  32.             c += 1
  33.         }
  34.         r = r%0xFFFFFF
  35.         return r
  36.     end
  37.     def self.encrypt_stream(x,k)
  38.         k = IxPack.transform_key(k)
  39.         srand(IxPack.transform_key(k))
  40.         s = ""
  41.         x.each_byte{|b|
  42.             s << ((b+rand(999999)+7+k-transform_key("#{$master_key}+#{$master_key2}"))%256).chr
  43.             k=(k*6+4)%0xFFFFFF
  44.             srand(k)   
  45.         }
  46.         return s
  47.     end
  48.     def self.decrypt_stream(x,k)
  49.         k = IxPack.transform_key(k)
  50.         srand(IxPack.transform_key(k))
  51.         s = ""
  52.         x.each_byte{|b|
  53.             s << ((b-k-7-rand(999999)+transform_key("#{$master_key}+#{$master_key2}"))%256).chr
  54.             k=(k*6+4)%0xFFFFFF
  55.             srand(k)
  56.         }
  57.         return s
  58.     end
  59.     def self.pack(files,arch)
  60.         $result = ["IXP1",$master_key,[]]
  61.         files.each{|x|
  62.             name = x.crypt("#{$master_key}.#{$master_key2}")
  63.             name2 = x.crypt("sfn9as8fh#{$master_key2},#{$master_key}$")
  64.             data = lambda{|x|File.open(x,'rb'){|f|return Zlib::Deflate.deflate(f.read,9)}}.call(x)
  65.             data = IxPack.encrypt_stream(data,name)
  66.             $result[2] << [name2,data]
  67.         }
  68.         $result = Marshal.dump($result)
  69.         File.open(arch,'wb'){|w|w.write($result)}
  70.     end
  71.     def self.decrypt_file(filename, arch, key="")
  72.         if key != nil && key != ""
  73.             $master_key2 = key
  74.         end
  75.         data = lambda{|x|File.open(x,'rb'){|f|return f.read}}.call(arch)
  76.         data = Marshal.load(data)
  77.         $master_key = data[1]
  78.         data = data[2]
  79.         name = filename.crypt("sfn9as8fh#{$master_key2},#{$master_key}$")
  80.         data.each{|x|
  81.             if x[0] == name
  82.                 data = x[1]
  83.                 break
  84.             end
  85.         }
  86.         key = filename.crypt("#{$master_key}.#{$master_key2}")
  87.         data = IxPack.decrypt_stream(data,key)
  88.         data = Zlib::Inflate.inflate(data)
  89.         File.open(filename,'wb'){|w|w.write(data)}
  90.     end
  91. end
  92.        
  93.        
  94. begin
  95.     print "IxPack v 1.00 by Narzew\n"
  96.     if ARGV.size == 0
  97.         print "Invalid Args!\nType IxPack.rb h for help\n"
  98.     elsif ARGV[0] == "e"
  99.         $files = NRGSS.location_table([ARGV[1]])
  100.         if ARGV[3] != nil && ARGV[3] != ""
  101.             $master_key2 = ARGV[3]
  102.         end
  103.         IxPack.pack($files,ARGV[2])
  104.     elsif ARGV[0] == "d"
  105.         IxPack.decrypt_file(ARGV[1],ARGV[2],ARGV[3])
  106.     elsif ARGV[0] == "h"
  107.         print "IxPack.rb e folder file key - encrypt\nIxPack.rb d filename file key - decrypt\nIxPack.rb h - show help\n"
  108.     end
  109. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement