Covert Java: Techniques for Decompiling, Patching, and Reverse Engineering