Covert Java: Techniques For Decompiling, Patching, And Reverse Engineering