如何修改java字节码中的布尔变量值?

时间:2016-12-21 07:36:50

标签: java hook decompiling

当我发现某些java jar使用boolean变量来决定是否输出日志时,示例如下:

public final class a {
    private static boolean a = false;
    private static boolean b = false;
    private static Logger c;
    public static void a(String var0, String var1) {
        if(a) {
            var0 = "Log-" + var0;
            if(b && c != null) {
                c.log(Level.INFO, var0 + ": " + var1);
            } else {
                Log.v(var0, var1);
            }
        }
    }

以上代码由Intellij想法反编译。时间:

  1. 没有源代码,只有jar文件包含.class个文件
  2. 代码被混淆了(因为你看到成员变量都是a,b,c),所以反射可以工作吗?
  3. 在这里,我想修改成员private static boolean a,从false更改为true以输出日志。我尝试jclasslib但我只能得到变量as org.gjt.jclasslib.structures.FieldInfo对象,我找不到修改其值的方法。有人可以帮忙吗?

    其次,我写了一个定义boolean变量的类,如:

    public class BroadcastHook {
        private static boolean testBoolean=true;
    

    令我困惑的是,testBoolean truefalsetestBoolean FieldsBytecode viewer中是否相同,以下是截图 the testBoolean Fields structure in Bytecode viewer

    为什么我在字段中找不到testBoolean的错误值?

0 个答案:

没有答案