http://www.perlmonks.org?node_id=544503


in reply to My first obfu

I golfed it down a little and furthered the obfuscation a bit as well, but kept your basic premise. The golfing removes some of the easy readability of your original code garnered by running the likes of:

sed s/eval/print/ mpeg.pl | perl | sed s/eval/print/ | perl | perl -MO +=Deparse

Which of course gives us an easy to read, and easy to understand:

@_ = (104, 97, [112, 2], 121, 32, 98, 105, 114, 116, 104, 100, 97, 121 +, 10); foreach $_ (@_) { print chr $_ if not ref $_; print chr($$_[0]) x $$_[1] if ref $_; }
$ _ = ' $ _ =\')01,121,79,001 ,401,611,411,501, 89,23,121,]2,211[ ,79,401(rof)rhc:] 1[_$$x)]0[_$$(rhc ?)fer((tnirp\';s, ,reverse,ee';s'\s '$_'geex;m,,mgsix

And I just noticed that my version seems a bit harder to handily pick apart with sed | Deparse (or variation thereof) - the de-obfuscator needs to do a bit more work.



--chargrill
$,=42;for(34,0,-3,9,-11,11,-17,7,-5){$*.=pack'c'=>$,+=$_}for(reverse s +plit//=>$* ){$%++?$ %%2?push@C,$_,$":push@c,$_,$":(push@C,$_,$")&&push@c,$"}$C[$# +C]=$/;($#C >$#c)?($ c=\@C)&&($ C=\@c):($ c=\@c)&&($C=\@C);$%=$|;for(@$c){print$_^ +$$C[$%++]}