Far from lightweight or elegant. I did not venture to decipher the symbols beyond "print number" and "print ascii".
Having the emulator run a second time over the output of the first round is either genius or madness. At the very least, I take the liberty to consider it ... unfriendly.
Btw, there was an obfuscator involved? I used both jad and jode, still getting rather unusual method names, which even a mere disassembler confirmed.[/code]
Finally I found http://www.reversed-java.com which decompiles much better than JD.
So finding the differences to HVM was much easier.
Unfortunately it fails on "Protected Password 4", by now
all this thing is is the HVM interpreter which on the first pass swaps +13/-13 a - m with n - z, and all the opcodes are interpereted with a -12 base. but thats just to obscuferate what it does. i did however notice batch files HATE the ^ key (which my first elegant attempt was, then i did the unclean 1 letter at a time approach
The Java class doesn't clear the stack before the second run. The code set up the data on the stack in the first run, and uses them in the second run. How neat :-) Maybe the online checker doesn't allow this?
At first I do some fixing work for the obscured decompile code to make it clearer. And then I suddenly realize ( actually, guess ) that a(String, String, boolean) is a HVM interpreter when I see the long ( and broken ) switch list. Luckily this is correct.
By the way, HVM code length limitation in this challenge is also sick.. >_<
There are only a few decompilers, the best is DJ Java Decomp, but it has ugly and strange gui, and it's commercial. And it's only decompiler, not deobfuscator. Also, I used JavaDeObfuscator, but it only can rename methods and fields, nothing more.
Does anyone knows what "Emyoolay" means?