gpt4 book ai didi

java - 是否有任何级别的混淆可以 "trick"instanceof?

转载 作者:搜寻专家 更新时间:2023-11-01 02:13:17 26 4
gpt4 key购买 nike

我一直在玩这个,到目前为止我还没有找到任何方法来隐藏或欺骗 instanceof 通过隐藏它的类型来返回 false混淆层,但这并不意味着它是不可能的,因为我远不是最了解 Java 的人。所以才来请教高手。

我尝试了以下组合,在每种情况下,instanceof 运算符都能够识别对象的真实/基本类型。

public class Test {

public static void main(String[] args) {
Object o = new TestObject();
printType("Base Class", o);

o = (TestSuperObject)(new TestObject());
printType("Super Class", o);

o = (TestInterface)(new TestObject());
printType("Interface", o);

o = (TestInterface)((TestSuperObject3)(new TestObject3()));
printType("Interface on Super Class", o);

o = (TestSuperObject3)((TestInterface)(new TestObject3()));
printType("Super Class on Interface", o);
}


private static void printType(String testCase, Object o) {
System.out.println(testCase);
System.out.println("TestObject:" + (o instanceof TestObject));
System.out.println("TestObject2:" + (o instanceof TestObject2));
System.out.println("TestObject3:" + (o instanceof TestObject3));
System.out.println();
}

}

类定义为...

public class TestObject extends TestSuperObject implements TestInterface
public class TestObject2 extends TestSuperObject implements TestInterface
public interface TestInterface
public class TestSuperObject
public class TestObject3 extends TestSuperObject3
public class TestSuperObject3 implements TestInterface

那么基本上,有没有办法隐藏这些信息或以某种方式丢失类型信息?我不问是因为我有这样做的理由,而是希望将来知道并警惕它是否可能。。另外,我只是觉得它很有趣。

最佳答案

您可能会将自己与 instanceof 而不是 JVM 混淆。

  • 不同包中的同名类是不一样的。这意味着你可以做

    // in one class
    ClassA classA = new ClassA(); // package1.ClassA
    another.test(classA);

    // calls in another class
    public void test(Object o) {
    if (o instanceof ClassA) // package2.ClassA => false
  • 使用不同的类加载器,包和 o.getClass().getName() 是相同的,但是由于类加载器不同 instanceof 返回 false .

  • 对象为 null 并且 null instanceof ClassB 始终为 false,即使 null 可以分配给任何引用类型。

关于java - 是否有任何级别的混淆可以 "trick"instanceof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12916379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com