Graži Perlo programėlė

Kas čia vis sako, kad Perlo programos neįskaitomos dėl to kad pilna
visokių @$%&*; ? Pasirodo, kad galima rašyti ir labai
švarias ir tvarkingas Pelro programas – Perlmonksuose blockhead parašė
vieną geresnių
obfuscated“ programėlių
:

#!/usr/bin/perl

not exp log srand xor s qq qx xor
s x x length uc ord and print chr
ord for qw q join use sub tied qx
xor eval xor print qq q q xor int
eval lc q m cos and print chr ord
for qw y abs ne open tied hex exp
ref y m xor scalar srand print qq
q q xor int eval lc qq y sqrt cos
and print chr ord for qw x printf
each return local x y or print qq
s s and eval q s undef or oct xor
time xor ref print chr int ord lc
foreach qw y hex alarm chdir kill
exec return y s gt sin sort split

Šito kodo pervarymas per O::Deparse irgi neduoda naudos, netgi kaip tik dar viską supainioja:

moxliukas@www:~$ perl -MO=Deparse,q obfu.pl
print ' ' and eval " undef or oct xor\ntime xor ref print chr int ord lc\nforeac
h qw y hex alarm chdir kill\nexec return y " gt sin sort(split(" ", $_, 0)) unle
ss not exp log srand xor s// /x xor s/ / length uc ord and print chr\nord for qw
 q join use sub tied q/ xor eval $_ xor print ' ' xor int eval " cos and print c
hr ord\nfor qw y abs ne open tied hex exp\nref y " xor scalar srand print(' ') x
or int eval " sqrt cos\nand print chr ord for qw x printf\neach return local x "
;
obfu.pl syntax OK

Atrodo visa idėja yra gudrus xor naudojimas ir alternatyvių simbolių eilučių delimiterių nešykštėjimas. Reikės pasiknist dar giliau truputį ;)

9 Comments

  1. OK, idėja viso šito yra gana paprasta. xor faktiškai atskiria atskirus sakinius. Naudojantis skirtingais delimiteriais yra pakeičiami visi s/// ir "" į ką nors sunkiai įskaitomo. Tad iki ketvirto xor kodas būna toks:

    not exp log srand; s// /x;

    s/ / length uc ord and print chr ord for ("join", "use", "sub", "tied")/; eval;

    Ką būtų galima sutrumpinti (išmetus tą kodą, kuris nieko nedaro) iki:

    $_ = ' length uc ord and print chr ord for ("join", "use", "sub", "tied")'; eval;

    arba tiesiog:

    print chr ord for ("join", "use", "sub", "tied");

    kas atspausdina po pirmąją žodžių "join", "use", "sub", "tied" raidę (gaunasi "just")

    Panaši idėja naudojama ir toliau. Gerai sugalvota ;)

  2. daroma ne tik todėl, kad reikia, o ir todėl, kad malonu.

    čia ir yra programavimas dėl malonumo ar sportinio intereso.

Comments are closed.