Die Programmiersprache Ruby

Blog| Forum| Wiki  

Die Artikel HowToObfuscate2 und HowToObfuscate überschneiden sich inhaltlich. Bitte hilf mit, das zu verbessern, indem du die Artikel unter einem Namen zusammenführst.
Bitte entferne anschließend den Redundanz-Baustein.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#! /usr/bin/env ruby
# murphy's rb2art
# version 2005.august.11
# Licence: LGPL

if ARGV.empty?
  puts <<-INFO
    Usage: ruby rb2art.rb <script:file> <graphic:file> <scale:float> <intens: -/+ 1..16>
  INFO
  exit
end

intens = ARGV.size==4 ? ARGV.pop.to_i : 5
scale = ARGV.size==3 ? ARGV.pop : 1

require 'RMagick'
graphic = Magick::ImageList.new ARGV.pop
c, r = graphic.columns, graphic.rows
graphic.resize! c * scale.to_f, r * 0.625 * scale.to_f
c, r = graphic.columns, graphic.rows
a = graphic.export_pixels 0, 0, c, r, 'I'
max_int = (a.max/16)
colors = intens > 0 ? ('#' * intens) : (' '*(16+intens) + '#'*(-intens))

require 'enumerator'
ascii = ''

a.each_slice(c) do |row|
  ascii << row.map { |x| x=x/max_int; colors[ x > 15 ? 15 : x, 1]||' ' }.join.sub(/ +$/,'') << "\n"
end

program = File.read ARGV.pop

module AsciiMask
  ENCODE = {
    "\s" => '=s',
    "\t" => '=t',
    "\n" => '=n',
    "\r" => '=r',
    "=" => '==',
    "#" => '=#',
  }
  DECODE = ENCODE.invert

  def encode s
    s.gsub!(/[\s#=]/) { |c| ENCODE[c] }
  end

  def decode s
    s.gsub!(/=./m) { |c| DECODE[c] }
  end
end

include AsciiMask

program = encode program

i = -1
art = ascii.split('').map do |a|
  if a == '#'
    if i + 1 < program.size
      program[i += 1,1]
    else
      '#'
    end
  else
    a
  end
end.join
$stderr.puts "Warning: Graphic is too small for script! #{i+1} #{program.size}" if i + 1 != program.size

puts <<-'ART' % art
#! /usr/bin/env ruby
eval <<-'RUBY'.gsub(/\s/,'').gsub(/=./){|c|{'=s'=>"\s",'=t'=>"\t",'=n'=>"\n",'=r'=>"\r",'=='=>'=','=#' => '#'}[c]
%sRUBY
ART</pre></code>

<code><pre>#! /usr/bin/env ruby
eval <<-'RUBY'.gsub(/\s/,'').gsub(/=./){|c|{'=s'=>"\s",'=t'=>"\t",'=n'=>"\n",'=r'=>"\r",'=='=>'=','=#' => '#'}[c]}




                      =#!                       =s
                     /usr/     bin/env    =sr
                    uby=n=#=   smurphy's=srb2ar  t=n   =#
                    =sversion =s2005.august.11=n=#=sLi   cenc
                    e:=sLGPL=n=nif=sARGV.empty?=n=s=sput
                     s=s<<-INFO=n=s=s=s=sUsage:=sruby=s
                        rb2art.rb=s<script:file>=s
                           <graphic:file>=s<scale:float
                           >=s<intens:=s-/+=s1-16>=n=s=
                         sINFO=n=s=sexit=nend=n=nintens
                       =s===sARGV.size====4=s?=sARGV.
                     pop.to_i=s:=s5=nscale=s===sARGV.siz
                      e====3     =s?=sARGV.pop=s:=s1=n=             nreq  uire=s
                        'RMagi        ck'=ngraphic=s===sM         ag ick::ImageList.
                          ne            w=s ARGV.pop=nc,        =sr=s===sgraphic.column                  s,=   sg   rap
                                             hic.rows=ng    r aphic.resize!=sc=s*=ssc                  ale .to_f,=sr=s*=
                                            s0.625=s*=ss   cale.to_f=nc,=sr=s===sgraphi               c.columns,=sgraphic.row
                                           s=na=s===sgra    phic.export_pixels=s0,=s0,=s          c,=sr,=s'I'=nmax_int=s===s(a.
                                          max/16)=ncolor  s= s===sintens=s>=s0=s?=s('=#'=s*         =sintens)=s:=s('=s'*(16+intens)=s +=s'=#'
                                         *(-intens))=n  =nrequire=s'enumerator'=nascii=s        ===s''=n=na.each_slice(c)=sdo=s |row
                                        |=n=s=sascii=    s<<=srow.map=s{=s|x|=sx==x/max_i        nt;=scolors[=sx=s>=s15=s?=s15=s:=  sx,
                                       =s1]||'= s'=s}.  join.sub(/=s+$/,    '')=s<<=s"\n"=n       end=n=npr         ogram=s===sFi
                                      le.read=sARGV.pop=n=nmodule=sAsci      iMask=n=s=sEN     CODE=s===s            {=n=s=s=s=
                                      s"\s"=s==>=s'= =s',=n=s=s=s=s"\t        "=s==>=s'==    t',=n=s=s=s               =s"\n"
                                    =s==>=s'==n',=n =s=s=s=s"\r"=s         ==>=s'==r',=n=  s=s=s=s"
                                 =="=s==>=s'== ==',=n=s=s=s=s"=#         "=s==>=s'===#',    =n=s=s}
      =n=s=sDECO                  DE=s===sENCODE.invert=n=n=s=sde          f=sencode=ss=n=s=s  =s=ss.gs
      ub!(/[\s=#==]/              )=s{=s|c|=sENCODE[c]=s}=n=s=s          end=n=s=s=n=s=sdef= sdecode=
      ss=n=s=s=s=ss.gs            ub!(/==./m)=s{=s|c|=sDECODE[         c]=s}=n=s=send=nend=n=ninclud
      e=      sAsciiMask=         n=nprogram=s===sencode=sprogram=n       =ni=s===s-1=nart=s===sascii.s          p
                  lit('').map=sdo=s|a|=n=s=sif=sa=s=====s'=#'=n=s=s=s       =sif=si=s+=s1=s<=sprogram.size     =n=
                    s=s=s=s=s=sprogram[i=s+===s1,1]=n=s=s=s=selse=n=       s=s=s=s=s=s'=#'=n=s=s=s=send=n=s=   se
                      lse=n=s=s=s=sa=n=s=send=nend.join=n$stderr.p        uts=s"Warning:=sGraphic=sis=stoo=s  sm
                         all=sfor=sscript!=s=#{i+1}=s=#{program.size}     "=sif=si=s+=s1=s!===sprog   ram.size=n=
                           nputs=s<<-'ART'=s%=sart=n=#!=s/usr/bin/en v=sruby=n      eva          l=s<<-'R
                            UBY'.         gsub(/\s/,'').       gsub(/==./){|c|{'==s                        '==>"\
                            s",'=                          =t'==>"\t",'==n'==>"\                         n",'
                                                                ==r'==>"\r",'===                        ='==>
                                                                '==','                                 ===#'=s==
                                                       >=    s'=#'}                               [c]}=n%sR
                                                    UBY=nART=n#############                           ########
                                                   #######################
                                                    #   #######    #

RUBY