我正在寻找一种在 JVM 类文件和文本表示之间往返的故障安全方法。
一项严格的要求是,只要文本表示形式保持不变,生成的往返 JVM 类文件在功能上与原始 JVM 类文件完全相同。
此外,文本表示必须是人类可读和可编辑的。应该可以对文本表示进行小的更改(例如更改文本字符串或类名称等),这些更改会反映在生成的类文件表示中。
最简单的解决方案是使用 Java 反编译器(例如 JAD)来生成文本表示形式,在本例中,文本表示形式只是重新创建的 Java 源代码。然后使用javac生成字节码。然而,考虑到免费 Java 反编译器的现状,这种方法并非在所有情况下都有效。创建混淆的字节码相当容易,该字节码无法在完整的往返类文件/java源代码/类文件中生存(部分原因是 JVM 字节码和Java 源代码)。
考虑到上述要求,是否有一种故障安全方法来实现 JVM 类文件/文本表示/类文件往返?
Update:在回答之前 - 请阅读上述所有要求,以节省时间和精力,并特别注意:
- “JVM 字节码的文本表示”并不一定意味着“Java 源代码”。
The BCEL项目 http://jakarta.apache.org/bcel/manual.html提供了一个茉莉访客 http://bcel.sourceforge.net/docs/JasminVisitor.html它将把类文件转换成jasmin http://jasmin.sourceforge.net/集会。
可以对其进行修改,然后重新组装成类文件。如果不进行任何编辑并且版本保持兼容,则往返应该会产生相同的类文件,但行号映射可能会丢失。如果您需要在往返情况下获得完全相同的副本,您可能需要更改工具以获取代码的某些方面,这些方面也是纯元数据。
jasmin 相当旧,其设计并不便于在汇编中实际编写完整的程序,但对于修改字符串常量表和常量来说,它应该足够了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)