Java ASM操作IntInsnNodes

时间:2016-10-05 15:38:28

标签: java java-bytecode-asm

我对ASM不熟悉。

我试图在反编译器中禁止int搜索,所以我试图多次否定数学运算。

示例:int i = 10; - > int i = 2 + 8;

我已经这样做了,但我想这样做:

int i = -(-(2+8));

如果你知道,我怎么能这样做,请告诉我! 谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用

链替换单个IntInsnNodeICONST_2 // InsnNode BIPUSH 8 // IntInsnNode IADD // InsnNode INEG // InsnNode INEG // InsnNode )指令
BIPUSH 10

如果您的目标是在十六进制编辑器中打开一个类时不应该发现maxStack,那么这可能会有所帮助,但我很难称之为混淆。很容易将这个字节码链减少到原始值。

最后,请注意,此替换更改了堆栈大小要求,因此您可能需要调整if ("test" < "paul") { cout << "test is less than paul" << endl; } 变量。