我的意思是 如何 ?
如果我制作了一个我不想 分享 代码的程序,那么实际上并没有实现这一目标的方法,它可以很容易地 反编译 ! (谈论罐子),
这不是一个严重的 问题 吗?它与 其他语言 不一样(它不像java那么容易)。
编辑:我不会问如何预防,我问为什么?
答案 0 :(得分:2)
使用工具或库对代码进行模糊处理。
有关此主题的更多信息,请参阅:https://www.owasp.org/index.php/Bytecode_obfuscation#How_to_prevent_Java_code_from_being_Reverse-engineered_.3F,其中描述了:
如何防止Java代码被逆向工程? 可以采取一些措施来防止逆向工程:
代码混淆。
这主要通过变量重命名来完成;请参阅下一段以获得更多精确度,
抑制行尾字符。这使代码难以解析, 使用匿名类来处理事件。这似乎不是由许多反编译器处理的;然而,JAD很好地应对了这一点。
类文件加密。
这意味着在运行时进行uncyphering的一些开销。有几种工具可供选择:: Cinnabar Systems的Canner或JSoft的JLock。它们可用于评估,第一个目前仅针对Windows平台提出。 用某些字符替换方法名称,例如'/'或'。'在类头中导致流行的反编译工具(如JAD)转储难以理解的源代码(您无法确定来自源的控制流)。
注意:谨防使用加密的100%Java解决方案来保护类文件,因为这些文件很可能是蛇油。由于JVM必须在某个时刻读取未加密的类文件,即使类文件在磁盘上加密,它们也必须在传递给JVM之前进行解密。攻击者可以修改本地JVM,以便在此时以未加密的形式将类文件写入磁盘。 (参见:Javaworld文章)。
猜想:使用Java分析器很容易绕过这些方法来显示字节码。
有哪些混淆工具可用? Java代码混淆存在许多工具。您可以在以下网址下找到大量列表,或者只需在您喜欢的搜索引擎中输入“混淆器”:http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Obfuscators/ http://proguard.sourceforge.net/alternatives.html
KlassMaster,缩小并混淆代码和字符串常量。如果保存模糊日志,它还可以将堆栈跟踪转换回可读形式。
Proguard是一个缩小器(使代码更紧凑),以及优化器和混淆器。 Jode是一个反编译器,一个优化器和一个混淆器。它包含清理日志记录的设施, Jarg,
Javaguard,这是一个简单的混淆器,没有很多文档,
CafeBabe,它允许精确查看字节码文件和单文件混淆;教授ByteCode结构的好工具,不仅仅是一种生产工具。
如果你想防止'代码篡改',那么我建议你签署你的jar文件。如果被篡改,这将使jar无法使用。有关详细信息,请参阅:https://docs.oracle.com/javase/tutorial/deployment/jar/signindex.html