Guest User

Untitled

a guest
Jan 30th, 2018
7,201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 10.71 KB | None | 0 0
  1. #!/usr/bin/ruby
  2.  
  3. require 'io/console'
  4.  
  5. termcap = %x{ stty -a <"$(tty)" }
  6.  
  7. $lines = termcap.gsub(/.*?(rows)\s*(\d+).*/m,'\\2').to_i
  8. $columns = termcap.gsub(/.*?(columns)\s*(\d+).*/m,'\\2').to_i
  9. $center_line = $lines / 2
  10. $center_column = $columns / 2
  11.  
  12. @red = "\e[38;5;196;48;5;16m"
  13. @redbg = "\e[38;5;231;48;5;196m"
  14. @green = "\e[38;5;46m"
  15. @greenbg = "\e[42m"
  16. @alien = "\e[38;5;155;48;5;16m"
  17. @normal = "\e[0m"
  18. @blink = "\e[05m"
  19. @blinkoff = "\e[25m"
  20. @clear = "\e[2J"
  21.  
  22. def setpos line,col
  23.     "\e[#{line};#{col}H"
  24. end
  25.  
  26. def setcol col
  27.     "\e[#{col}G"
  28. end
  29.  
  30. def progress title, tail='', color="\e[38;5;231;48;5;34m"
  31.     puts
  32.     on = "\e[1m" << color
  33.     off = "\e[1;38;5;231;48;5;16m"
  34.     n = 50
  35.     str = title.center(n)
  36.     print "\r[#{off}#{str}]#{setcol 2}"
  37.     print on
  38.     str.chars.each {|c|
  39.         print c
  40.         sleep 0.04
  41.     }
  42.     puts "\n#{@normal}#{tail.center(n+2)}\n\n"
  43. end
  44.  
  45. def hsv2rgb(h, s, v)
  46.     i = (h/ 120.0).floor
  47.     frac = ((h / 120.0) - i)
  48.     a = [1.0 - frac, frac, 0.0].rotate(-i)
  49.     a = a.map { |x| [x * 2.0, 1.0].min }
  50.     a = a.map { |x| v * ((1.0 - s) + x * s) }
  51.     a.map { |x| (x * 255).round }
  52. end
  53.  
  54. def format_color *v,fg_bg
  55.     "\033[#{[38,48][fg_bg]};2;#{v*';'}m"
  56. end
  57.  
  58. def format_color_hsv h,s,v,fg_bg=0
  59.     "\033[#{[38,48][fg_bg]};2;#{hsv2rgb(h,s,v).map(&:round)*';'}m"
  60. end
  61.  
  62. def printc(*v)
  63.     print "\033[38;2;#{v*';'}m"
  64. end
  65.  
  66. def printc2(fg,bg)
  67.     print "\033[38;2;#{fg*';'}m\033[48;2;#{bg*';'}m"
  68. end
  69.  
  70. def blend a,b,coef
  71.     c = a.map.with_index {|v,i|
  72.         (v * (1.0 - coef) + coef * b[i])
  73.     }
  74.     hsv2rgb(*c).map(&:round)
  75. end
  76.  
  77. def fade msg, a, b, ms
  78.     steps = (60.0 * ms / 1000.0).round
  79.     scale =  1.0 / steps
  80.     (0..steps).each {|i|
  81.         c = blend(a,b,i*scale)
  82.         print "\e[u"
  83.         printc(*c)
  84.         print msg+"\r"
  85.         sleep scale
  86.     }
  87. end
  88.  
  89. def gradient a, b, s
  90.     scale = 1.0 / s.length
  91.    
  92.     s.chars.each.with_index {|v,i|
  93.         c = blend(a,b,i*scale)
  94.         printc(*c)
  95.         print v
  96.     }
  97. end
  98.  
  99. def gradient_col a, b, s, col
  100.     scale = 1.0 / s.length
  101.     s.chars.each.with_index {|v,i|
  102.         c = blend(a,b,i*scale)
  103.         printc(*c)
  104.         print print "\e[#{i};#{col}H#{v}"
  105.     }
  106. end
  107.  
  108. @lines = termcap.gsub(/.*?(rows)\s*(\d+).*/m,'\\2').to_i
  109. @columns = termcap.gsub(/.*?(columns)\s*(\d+).*/m,'\\2').to_i
  110. @alienlang = File.read('./chars').gsub(/\s\r\n/,'').chars
  111.  
  112. def alien_language n=100
  113.     (0..n).each{|line|
  114.         s = @alienlang.shuffle[0,@columns]*''
  115.         pos = rand(@lines - 8)
  116.         print "\e[#{pos};1H"
  117.         bright = ((@lines-pos)/@lines.to_f)
  118.         gradient [160+line,0.3,bright], [320-line,1,0],s
  119.        
  120.         posc = rand(@columns)
  121.         bright = ((@columns-posc)/@columns.to_f)
  122.         s = s[0,@lines-4]
  123.         gradient_col [180+line,0.3,bright], [320-line,1,0.0],s,posc
  124.         sleep 0.03
  125.        
  126.     }
  127. end
  128.  
  129. class Crawler
  130.     attr_accessor :line, :line2, :visible
  131.     @@hsv1 = [120,1,0.5]
  132.     @@hsv2 = [120,0.5,1]
  133.     @@hsv3 = [120,0.95,0.2]
  134.     @@color1 = "\e[21m" << format_color_hsv(120,1,0.8,0)+format_color_hsv(120,1,0.125,1)
  135.     @@color2 = "\e[1m" <<
  136.         format_color_hsv(123,0.5,1,0) <<
  137.         format_color_hsv(122,0.85,0.35,1)
  138.        
  139.         @@color3 = "\e[38;5;22;48;20m"
  140.         @@black = "\e[0;38;5;16m"
  141.    
  142.     def initialize(s,col,line=0)
  143.         @s = s
  144.         @chars = s.chars
  145.         @col = col
  146.         @len = s.length
  147.         @line = line
  148.         @line2 = @line - ($lines/2)
  149.         @gradient = []
  150.         @color1 = @@black
  151.         @color2 = @@black
  152.         @color3 = @@black
  153.         @fade = "\e[0m"
  154.         @visible = false
  155.         make_gradient
  156.     end
  157.    
  158.     def make_gradient
  159.         scale = 1.0/@s.length
  160.         @gradient = (0..@len).map{|i|
  161.             fg = blend(@@hsv1,@@hsv2,i*scale)
  162.             #  bg = fg.map{|i| i / 2}
  163.             fg = fg*';'
  164.             #  bg = bg*';'
  165.             "\033[38;2;#{fg}m#{@s[i]}"
  166.         }
  167.         @gradient[-2] = format_color_hsv(120,0.5,1,0) <<
  168.         format_color_hsv(120,0.95,0.2,1) << @s[-2] << "\e[38;0m"
  169.         #  @gradient[0] = ' '
  170.         @gradient[-1] = @@color1+' '
  171.         @gradient[0] = @@color1+' '
  172.     end
  173.  
  174.     def print_pos char,os
  175.         print "\e[#{[@line+os,0].max};#{@col}H#{char}"
  176.     end
  177.  
  178.     def print_crawler
  179.         @gradient[
  180.             0..[0, $lines - @line,  @len].sort[1]
  181.         ].each.with_index {|c,i|
  182.             print "\e[#{[(@line+i),0].max};#{@col}H"
  183.             print c
  184.         }
  185.         @line += 1
  186.     end
  187.  
  188.     def print_crawler_end
  189.         @gradient[
  190.             0,
  191.             [0, $lines - @line,  @len].sort[1]
  192.         ].each.with_index {|c,i|
  193.             print "\e[#{[(@line+i) % $lines,0].max};#{@col}H"
  194.             print c
  195.         }
  196.         @line += 1
  197.     end
  198.  
  199.  
  200.     def print_crawler_wrap
  201.         @gradient[
  202.             0..[0, $lines - @line,  @len].sort[1]
  203.         ].each.with_index {|c,i|
  204.             print "\e[#{[(@line+i) % $lines,0].max};#{@col}H"
  205.             print c
  206.         }
  207.         @line = (@line + 1 + @len) % $lines
  208.         @line -= @len
  209.     end
  210.     @@half_height = $lines / 2
  211.  
  212.     def check_visible
  213.         if @line == 1
  214.             @color1 = @@color1
  215.             @color2 = @@color2
  216.             @visible = true
  217.         end
  218.     end
  219.  
  220.     def print_crawler2
  221.         if !@visible
  222.             @line = (@line+ 1) % ($lines)
  223.             @line2 = (@line2 + 1) % ($lines)
  224.             check_visible
  225.         else
  226.             @line = (@line + 1) % ($lines)
  227.             print "\e[#{@line};#{@col}H#{@color2}#{@s[@line]}"
  228.             print "\e[A#{@color1}\b#{@s[@line]}"
  229.  
  230.             print "\e[#{@line2};#{@col}H#{@fade} "
  231.             @color3 = ((@line2 = (@line2 + 1) % $lines) == 0) ? @@color3 : @color3
  232.             print "\e[#{@line2};#{@col}H#{@color3}#{@s[@line2]}"
  233.         end
  234.     end
  235.  
  236.     def check_visible_end
  237.         if @line <= 1
  238.             @color1 = @@black
  239.             @color2 = @@black
  240.             @visible = false
  241.         end
  242.     end
  243.     def print_crawler2_end
  244.         if @visible
  245.             check_visible_end
  246.             @line = (@line + 1) % ($lines)
  247.             print "\e[#{@line};#{@col}H#{@color2}#{@s[@line]}"
  248.             print "\e[A#{@color1}\b#{@s[@line]}"
  249.         end
  250.  
  251.             print "\e[#{@line2};#{@col}H\e[0m "
  252.             @line2 = (@line2 + 1) % $lines
  253.             if @line2 <= 0
  254.                 @color3 = @@black
  255.                 print "\e[#{@line2};#{@col}H#{@color3}"
  256.             else
  257.                 print "\e[#{@line2};#{@col}H#{@color3}#{@s[@line2]}"
  258.             end
  259.     end
  260. end
  261.  
  262. def alien_gibberish n
  263.     @alienlang.shuffle[0,n]*''
  264. end
  265.  
  266. @ascii_gibberish = ('!'..'~').to_a << (0..10).to_a*8
  267. def ascii_gibberish n
  268.     Array.new(n) {|i| @ascii_gibberish.sample}*''
  269. end
  270.  
  271. @katakana = (File.read(
  272.     './chars_katakana_half_width').gsub( /\s\r\n/,'')<<
  273.     '012345687908080808080812345678900123456789'
  274.             ).chars
  275.  
  276. @matrix_gibberish = File.read('./matrix_gibberish').chars
  277.  
  278. def matrix_gibberish n
  279.     Array.new(n) {|i| @matrix_gibberish.sample}*''
  280. end
  281.  
  282. def matrix
  283.     crawlers = Array.new($columns) {|i| Crawler.new(ascii_gibberish($lines),i,-rand($lines))}
  284.     center = ($columns/2).round
  285.     until (crawlers[center].visible) do
  286.      crawlers[center].print_crawler2  
  287.     end
  288.     20.times {
  289.         crawlers[center].print_crawler2
  290.         sleep 0.1
  291.     }
  292.     ($lines+1).times {
  293.         crawlers.each{|x|
  294.             x.print_crawler2
  295.         }
  296.         sleep 0.075
  297.     }
  298.     ($lines+$lines/2).times {
  299.         crawlers.each{|x|
  300.             x.print_crawler2_end
  301.         }
  302.         sleep 0.0875
  303.     }
  304. end
  305.  
  306. def type s, sec=0.06, wait=0.9
  307.     print "#{@green}\r> \e[K"
  308.     print "\e]50;CursorShape=0\C-G"
  309.     sleep wait
  310.     s.chars.each {|c| print c ; sleep sec }
  311.     puts "\e[0m\e]50;CursorShape=1\C-G"
  312. end
  313.  
  314. def clear_lines
  315.     print "\e[2A\r\e[K\e[1A\e[K\e[1A\e[K\e[1A\e[K"
  316. end
  317.  
  318. system('clear')
  319. print "\e[38;5;46m"
  320. banner =  `figlet -f big -t "LEGION  HACKER"` + "\n\n\n\n\n"
  321. print banner
  322.  
  323.  
  324. sleep 5
  325. print "\e[10;0H"
  326. progress "LOADING", "READY"
  327.  
  328. print "\e[14;0H"
  329.  
  330.  
  331. target = "CIA"
  332. type "HACK #{target.upcase}"
  333.  
  334. print "\e[2A\r\e[K\e[1A\e[K\e[1A\e[K\e[1A\e[K\e[1A"
  335.  
  336. puts "\n💀💀💀💀💀\e[1;05m#{@red} WARNING \e[0m💀💀💀💀💀"
  337. puts "\e[31m YOU ARE ABOUT TO HACK #{target}.#{@green}"
  338. print      "  Do you wish to continue?"
  339.  
  340. print "\e[14;0H"
  341. sleep 1.2
  342. type 'CONTINUE',0.08,0.5
  343.  
  344. clear_lines
  345. progress 'Hacking '+target, "\e[1;05m#{@red}#{' RESTRICTED ACCESS ONLY '.center(50,'*')}\e[0m"
  346.  
  347. type 'CRACK PASSWORD && OVERRIDE ALL SECURITY',0.08,0.2
  348. sleep 0.25
  349.  
  350. alien_language 50
  351.  
  352. stra = (1..$lines).map{|i| setpos(i,0) << "\e[K\r"}
  353. banner.split(/\n/).each.with_index{|s,i| stra[i] << s }
  354.  
  355. address = (0..3).map {|i| rand(255)}*'.'
  356. stra[10] << "#{@green}" << "ACCESS GRANTED".center(50)
  357. stra[11] << "#{@normal}" <<
  358.     "Connected to #{target} at #{address}".center(50) <<
  359.     @green
  360.    
  361.  
  362. print @green
  363. stra.shuffle.each {|s|
  364.     print s
  365.     sleep 0.035
  366. }
  367.  
  368.  
  369. print "\e[14;0H"
  370. type 'SCAN DATABASE && DOWNLOAD RECORDS'
  371. clear_lines
  372. progress 'Scanning database', "78651 records found."
  373.  
  374. print "\e[4A"
  375. #  clear_lines
  376. progress 'Downloading records', "Download complete."
  377.  
  378. type 'ANALYZE DATA && ENHANCE'
  379. clear_lines
  380. progress 'Analyzing data', "237 Visual Basic GUIs found."
  381. sleep 0.25
  382. print "\e[4A"
  383. progress 'Enhancing', "3,359,974 Visual Basic GUIs found."
  384.  
  385. sleep 0.25
  386. type 'DECRYPT DATA'
  387. clear_lines
  388.  
  389. decrypted = " WE ARE THE ILLUMINATI "
  390.  
  391. print "\e[10;0H\r\e[s"
  392. 181.times {|i|
  393.     s = matrix_gibberish(32) << ' '*8
  394.     print "\e[u"
  395.     gradient [6*i,0.5,1.0], [10*i,1.0,1.0],s
  396.     len = (decrypted.length * (i/180.0)).round
  397.     print "\e[u\n\r\e[K"
  398.     print decrypted[0..len] << s[0] << "\e[7m \e[27m\n\r\e[K"
  399.     sleep 0.05
  400. }
  401.  
  402. print "\e[11;0H\r#{@red}#{decrypted}   "
  403. print "\e[14;0H"
  404.  
  405.  
  406. type 'UPLOAD VIRUS'
  407. clear_lines
  408. progress '💀💀💀💀 Uploading virus 💀💀💀💀', "Virus installation successful.", @redbg
  409.  
  410. type 'INITIALIZE SELF-DESTRUCT SEQUENCE'
  411. clear_lines
  412. progress '💀💀💀💀  INITIALIZING SELF-DESTRUCT  ðŸ’€ðŸ’€ðŸ’€ðŸ’€', "Self-destruction in progress.", @redbg
  413.  
  414. matrix
  415.  
  416.  
  417. print @clear
  418. hashes = '#'*($columns)
  419. str = "       HACKING  COMPLETE     "
  420. press_any_key = "  PRESS ANY KEY TO CONTINUE  ".center($columns,'#')
  421. linestart = $center_line-2
  422.  
  423. (0..255).each {|i|
  424.     print "\e[#{linestart};0H"
  425.     print "\e[38;2;0;#{i};0m" << hashes
  426.     print "\e[#{linestart+1};0H"
  427.     print "#{hashes}\e"
  428.     print "\e[#{linestart+1};#{($columns - str.length) / 2 + 1}H#{@blink}#{str}#{@blinkoff}"
  429.     print "\e[#{linestart+2};0H" << press_any_key
  430.     print "\e[#{linestart+3};0H" << hashes
  431.     print "\r"
  432.     sleep 0.002
  433. }
  434. x = STDIN.getc
Advertisement
Add Comment
Please, Sign In to add comment