Java ASM 操作 IntInsnNodes

Java ASM Manipulate IntInsnNodes

我是 ASM 的新手。

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

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

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

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

如果你知道我是怎么做到的,请告诉我! 谢谢!

您需要用

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

如果您的目标是在十六进制编辑器中打开 class 时不应该发现 BIPUSH 10,这可能会成功,但我很难称之为混淆。很容易将这个字节码链减少到原始值。

最后,请注意此替换更改了堆栈大小要求,因此您可能需要调整 maxStack 变量。