I am trying to change a private static destination field with Java Reflection. But he just fails. Does anyone have an idea?
Here is my code:
public class SecuredClass { private static final String securedField = "SecretData"; public static String getSecretData() { return securedField; } }
public class ChangeField { static void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); modifiersField.setAccessible(true); modifiersField.setInt(field, field.getModifiers() & ~ Modifier.FINAL); field.set(null, newValue); } public static void main(String args[]) throws Exception { System.out.println("Before = " + SecuredClass.getSecretData()); Field stringField = SecuredClass.class.getDeclaredField("securedField"); stringField.setAccessible(true); setFinalStatic(stringField, "Screwed Data!"); System.out.println("After = " + Java_FileMerger_Main.getSecretData()); } }
And here is my conclusion:
Before = SecretData After = SecretData
I tried uninstalling SecurityManager using System.setSecurityManager (null); But that didn’t change anything. I know this is evil, but I want to make it work. Hope someone can help me.
source share