I decided that after a week without a spoiler, it would probably be worthwhile for me to post a brief explanation as to the workings of this code - It is based, loosely around an obfuscation written by Erudil entitled "My 2 cents worth". In terms of obfuscation and code complexity, this code is fairly simple, the obscurity with this code implemented primarily through formatting and function substition.
As such, the first step in evaluating the working of this code would be to reformat it, remove redundant brackets (introduced deliberately to obscure the code and also 'pad' out the code to fit the raven-bird shape) and add some whitespace so that it is more readable:
$_ = ' $_ = y(x($;) + x($;) + x($;) + x($;)) .
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($"))))
+.
y(x($") + x($") + x($") + x($") - x($;) + x($") - x($;) +
+z(y(x($;)))) .
y(x($;) + x($;)) + x($;) + x($;) - z(z(x($")) . y(x($")))
+.
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($")) .
+y(x($")) . y(x($")))) .
y(x($")) .
y(x($") + z(y(x($;)) . y(x($;)))) .
y(x($") + x($") + x($") - x($;) + x($") - x($;) + x($") -
+x($;) + x($") - x($;) + z(y(x($;)))) .
y(x($;) + x($;) + x($;) + x($") + z(y(x($;)))) .
y(x($;) + x($;) + x($;) + x($;) - z(y(x($")))) .
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($")) .
+y(x($")) . y(x($")))) .
y(x($") + x($") + x($") + x($") - x($;) + x($") - x($;)) .
y(x($")) .
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($")) .
+y(x($")) . y(x($")))) .
y(x($") + x($") + x($") + x($") - x($;) + x($") - x($;)) .
y(x($") + x($") + x($") + x($") - x($;) + z(y(x($;)))) .
y(x($")) .
y(x($") + x($") + x($") - x($;) + x($") - x($;) + x($") -
+x($;) + x($") - x($;) + z(y(x($;)) . y(x($;)))) .
y(x($") + x($") + x($") + z(y(x($;)))) .
y(x($") + x($;) + x($;) + x($") - z(y(x($;)) . y(x($;))))
+.
y(x($") + x($") + x($") + x($") - x($;) + z(y(x($;)))) .
y(x($;) + x($;) + x($;) + x($;) - z(y(x($")) . y(x($"))))
+.
y(x($")) .
y(x($") + x($;) + x($")) .
y(x($") + z(z(x($;)) . y(x($;)))) .
y(x($") + x($") + x($") - x($;) + x($") - x($;) + x($") -
+x($;) + z(y(x($;)) . y(x($;)))) .
y(x($") + x($") + x($") + x($") - x($;) + z(y(x($;)))) .
y(x($") + x($;) + x($;) + x($") - z(y(x($;)) . y(x($;))))
+.
y(x($") + x($") + x($") + x($") - x($;) + z(y(x($;)))) .
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($"))))
+.
y(x($;) + x($;) + x($;) + x($;) - z(y(x($")) . y(x($")) .
+y(x($")))) .
y(x($;) + x($;) + x($;) + x($;) - z(y(x($")))) .
y(x($;) + x($;) + x($;) + x($;) + z(y(x($")) . y(x($"))))
+.
y(x($") + x($") + x($") + x($") - x($;) + z(y(x($;)))) .
y(x($") + x($") - x($;) + x($") - x($;) + x($") - x($;) +
+z(y(x($;)) . y(x($")))) .
y(x($") + x($;) + x($")) .
y(x($") + z(y(x($;)) . y(x($;)))) .
y(x($") - x($;) + x($") - x($;) + z(y($") . y($;))) .
y(x($") + z(y(x($;)) . y(x($;))));
eval;';
s/x/ord/g;
s/y/chr/g;
s/z/length/g;
eval;
As you can see, in terms of cool coding tricks, there isn't too much to this code. Essentially, the code to print the line "Quoth the Raven "Nevermore."" is evaluated from $_ after having a series of three substitutions to have the characters x, y and z of this string replaced with the functions ord, chr and length respectively.
s/x/ord/g;
s/y/chr/g;
s/z/length/g;
These substitions result in the value of $_ to be assigned as follows:
$_ = ' $_ = chr(ord($;) + ord($;) + ord($;) + ord($;)) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + ord(
+$") - ord($;) + length(chr(ord($;)))) .
chr(ord($;) + ord($;)) + ord($;) + ord($;) - length(length
+(ord($")) . chr(ord($"))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")) . chr(ord($")) . chr(ord($")))) .
chr(ord($")) .
chr(ord($") + length(chr(ord($;)) . chr(ord($;)))) .
chr(ord($") + ord($") + ord($") - ord($;) + ord($") - ord(
+$;) + ord($") - ord($;) + ord($") - ord($;) + length(chr(ord($;)))) .
chr(ord($;) + ord($;) + ord($;) + ord($") + length(chr(ord
+($;)))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) - length(chr(ord
+($")))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")) . chr(ord($")) . chr(ord($")))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + ord(
+$") - ord($;)) .
chr(ord($")) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")) . chr(ord($")) . chr(ord($")))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + ord(
+$") - ord($;)) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + leng
+th(chr(ord($;)))) .
chr(ord($")) .
chr(ord($") + ord($") + ord($") - ord($;) + ord($") - ord(
+$;) + ord($") - ord($;) + ord($") - ord($;) + length(chr(ord($;)) . c
+hr(ord($;)))) .
chr(ord($") + ord($") + ord($") + length(chr(ord($;)))) .
chr(ord($") + ord($;) + ord($;) + ord($") - length(chr(ord
+($;)) . chr(ord($;)))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + leng
+th(chr(ord($;)))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) - length(chr(ord
+($")) . chr(ord($")))) .
chr(ord($")) .
chr(ord($") + ord($;) + ord($")) .
chr(ord($") + length(length(ord($;)) . chr(ord($;)))) .
chr(ord($") + ord($") + ord($") - ord($;) + ord($") - ord(
+$;) + ord($") - ord($;) + length(chr(ord($;)) . chr(ord($;)))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + leng
+th(chr(ord($;)))) .
chr(ord($") + ord($;) + ord($;) + ord($") - length(chr(ord
+($;)) . chr(ord($;)))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + leng
+th(chr(ord($;)))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) - length(chr(ord
+($")) . chr(ord($")) . chr(ord($")))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) - length(chr(ord
+($")))) .
chr(ord($;) + ord($;) + ord($;) + ord($;) + length(chr(ord
+($")) . chr(ord($")))) .
chr(ord($") + ord($") + ord($") + ord($") - ord($;) + leng
+th(chr(ord($;)))) .
chr(ord($") + ord($") - ord($;) + ord($") - ord($;) + ord(
+$") - ord($;) + length(chr(ord($;)) . chr(ord($")))) .
chr(ord($") + ord($;) + ord($")) .
chr(ord($") + length(chr(ord($;)) . chr(ord($;)))) .
chr(ord($") - ord($;) + ord($") - ord($;) + length(chr($")
+ . chr($;))) .
chr(ord($") + length(chr(ord($;)) . chr(ord($;))));
eval;';
eval;
Interpolating the values of $;, the subscript separator for multi-dimensional arrays, normally chr(28), and $", the output separator for array values interpolated in a double-quoted string, normally chr(32), results in the following code:
$_ = ' $_ = chr(28 + 28 + 28 + 28) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32))) .
chr(32 + 32 + 32 + 32 - 28 + 32 - 28 + length(chr(28))) .
chr(28 + 28 + 28 + 28 - length(length(32) . chr(32))) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32) . chr(32)
+ . chr(32))) .
chr(32) .
chr(32 + length(chr(28) . chr(28))) .
chr(32 + 32 + 32 - 28 + 32 - 28 + 32 - 28 + 32 - 28 + leng
+th(chr(28))) .
chr(28 + 28 + 28 + 32 + length(chr(28))) .
chr(28 + 28 + 28 + 28 - length(chr(32))) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32) . chr(32)
+ . chr(32))) .
chr(32 + 32 + 32 + 32 - 28 + 32 - 28) .
chr(32) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32) . chr(32)
+ . chr(32))) .
chr(32 + 32 + 32 + 32 - 28 + 32 - 28) .
chr(32 + 32 + 32 + 32 - 28 + length(chr(28))) .
chr(32) .
chr(32 + 32 + 32 - 28 + 32 - 28 + 32 - 28 + 32 - 28 + leng
+th(chr(28) . chr(28))) .
chr(32 + 32 + 32 + length(chr(28))) .
chr(32 + 28 + 28 + 32 - length(chr(28) . chr(28))) .
chr(32 + 32 + 32 + 32 - 28 + length(chr(28))) .
chr(28 + 28 + 28 + 28 - length(chr(32) . chr(32))) .
chr(32) .
chr(32 + 28 + 32) .
chr(32 + length(length(28) . chr(28))) .
chr(32 + 32 + 32 - 28 + 32 - 28 + 32 - 28 + length(chr(28)
+ . chr(28))) .
chr(32 + 32 + 32 + 32 - 28 + length(chr(28))) .
chr(32 + 28 + 28 + 32 - length(chr(28) . chr(28))) .
chr(32 + 32 + 32 + 32 - 28 + length(chr(28))) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32))) .
chr(28 + 28 + 28 + 28 - length(chr(32) . chr(32) . chr(32)
+)) .
chr(28 + 28 + 28 + 28 - length(chr(32))) .
chr(28 + 28 + 28 + 28 + length(chr(32) . chr(32))) .
chr(32 + 32 + 32 + 32 - 28 + length(chr(28))) .
chr(32 + 32 - 28 + 32 - 28 + 32 - 28 + length(chr(28) . ch
+r(32))) .
chr(32 + 28 + 32) .
chr(32 + length(chr(28) . chr(28))) .
chr(32 - 28 + 32 - 28 + length(chr($") . chr($;))) .
chr(32 + length(chr(28) . chr(28)));
eval;
';
eval;
Or put more simply ...
$_ = '$_ = "print "Quoth the Raven. \"Nevermore.\""; eval'
eval;
Eval, rinse, repeat!
Ooohhh, Rob no beer function well without! | [reply] [d/l] [select] |