【问题标题】:Java ASM Manipulate IntInsnNodesJava ASM 操作 IntInsnNodes
【发布时间】:2016-10-05 15:38:27
【问题描述】:

我对 ASM 有点陌生。

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

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

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

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

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

【问题讨论】:

  • 你真的认为,这会迷惑任何反编译器吗?此外,如果你已经设法将常量重写为和,那么,否定有什么问题?
  • 问题是,它只会否定第一个数字,而不是整个和。

标签: java java-bytecode-asm


【解决方案1】:

您需要将单个 BIPUSH 10 (IntInsnNode) 指令替换为一系列

ICONST_2 // InsnNode
BIPUSH 8 // IntInsnNode
IADD     // InsnNode
INEG     // InsnNode
INEG     // InsnNode

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多