Like you, I'm only just starting out in the world of
obfuscation... This is just a few thoughts that came into
my head when I read your code. Not necessarily criticisms!
Try to avoid assigning to "real" variables like
@n etc. Use perl builtin variables
like $= or $; or just
put the values inline. I changed your assignment of
@l to a quoted string using qw;;
(there are lots of options for the delimiters of quoted
strings, ; is one I've been playing about
with recently) - more obfu than an "English" word like
split.
You also had some dupes in @l which I
removed. I'm not sure if they were in there on purpose
(to confuse/mislead) or not. Same goes for q0, which
I removed. Again this doesn't necessary make it more (or less) obfuscated but it does compact things a bit.
You could also consider muddling up the list in non-alphabetic order.
I re-arranged a few other things, using $1,$2 instead of $e,$r
and re-ordered the print/pack code into something
a little shorter, without changing the basic meaning
of the code.
for(qw;
a01001010 b01111100 c01011111 d00110101 e01110100 f00110100
g01011100 h00110000 i00101101 j00110011 k01010010 l01010000
m01110010 n01001000 o00111110 p00111100;){/(\w)(\d+)/;$g{$1}=$2}
for(split//,q;abcbdeqfbgbhebibjkqljmbqnfophk;){print
$g{$_}?pack"B8",$g{$_}:' '}
I hope this is useful, if only a little. Others
more experienced (or with more warped minds, depending
on how you look at it) may suggest more interesting
ways to obfuscate your code. Perhaps you could consider
changing from binary to some other more wacky pack
format (maybe uuencode?). Good luck anyway.
s^^unp(;75N=&9I<V@`ack(u,^;s|\(.+\`|"$`$'\"$&\"\)"|ee;/m.+h/&&print$&
|