To answer this question, you need to understand the concept of reverse engineering of compiled Java code. Let's go through each option to understand why it is correct or incorrect:
Option A) Java sand box environment provides protection against decompilation - This option is incorrect. The Java sandbox environment provides security by restricting the execution of certain operations, but it does not specifically protect against decompilation of Java code.
Option B) Java is compiled into ELF binaries and cannot be decompiled - This option is incorrect. Java is not compiled into ELF binaries. Java code is compiled into bytecode, which can be decompiled back into readable Java code.
Option C) Java byte code can always be decompiled, code obfuscators can make the reverse engineering process more time confusing but cannot prevent it - This option is correct. Java bytecode can be decompiled back into readable Java code using various tools and techniques. Code obfuscators can make the reverse engineering process more difficult and time-consuming by obfuscating the code, but they cannot completely prevent it.
Option D) Java is difficult to decompile because the Just-In-Time compiler automatically performs string encryption by default - This option is incorrect. The Just-In-Time (JIT) compiler in Java does not automatically perform string encryption by default. The JIT compiler is responsible for optimizing the performance of Java code during runtime, but it does not encrypt strings or make the decompilation process difficult.
The correct answer is option C. This option is correct because Java bytecode can always be decompiled, and code obfuscators can make the reverse engineering process more time-consuming but cannot prevent it.