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į ;)
cool,
fantastika.
ji tikrai veikia. :)
o ka ji daro? :)
OK, idėja viso šito yra gana paprasta.
xor
faktiškai atskiria atskirus sakinius. Naudojantis skirtingais delimiteriais yra pakeičiami visis///
ir""
į ką nors sunkiai įskaitomo. Tad iki ketvirtoxor
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 ;)
zjbs ideja ;)
ir kam visa to reikia?
daroma ne tik todėl, kad reikia, o ir todėl, kad malonu.
čia ir yra programavimas dėl malonumo ar sportinio intereso.
supratau.
man atrodo kad ce šudas o kaip atrodo jums
labas asiliukai