gpt4 book ai didi

Java防止jar文件中的证书文件(manifest)被篡改

转载 作者:行者123 更新时间:2023-11-30 07:20:49 24 4
gpt4 key购买 nike

我们的商业 jar 是使用批处理文件(java -jar ..)运行的,并且使用我们的签名进行分发。它由 JNLP 触发。它还包含其他第三方库。如果任何恶意者替换了任何 java 类,则该 jar 会因为签名不匹配而停止运行。但是,如果他从 jar 中删除 MANIFEST 文件,则不再进行检查。当任何类被替换、改变时,我们怎样才能防止程序运行呢?一种选择是检查 java 源中的 list 文件,如 Verifying Jar Signature 所示。和 How to verify a jar signed with jarsigner programmatically比如

jarFile jar = new JarFile(new File("path/to/your/jar-file"));

// This call will throw a java.lang.SecurityException if someone has tampered
// with the signature of _any_ element of the JAR file.
// Alas, it will proceed without a problem if the JAR file is not signed at all
InputStream is = jar.getInputStream(jar.getEntry("META-INF/MANIFEST.MF"));
Manifest manifest = new Manifest(is);

并检查 CodeSigners 等。

manifest.getCodeSigners();

但是当试图破解 jar 的人执行反编译(例如使用 jad)时会发生什么?为了防止反编译,我们应用了一些混淆器,但是当反编译时,即使方法名称已更改,我们也可以看到逻辑。所以混淆还不够。

你的建议是什么?编写复杂的符号检查代码(例如使用反射 API、添加乱码数据、一些带有 goto 的意大利面条代码)是一个好方法吗?还是您可以建议采用不同的过程来防止明显篡改以及使反编译器失败?我检查了混淆器中的选项,但是在代码编写阶段我们可以做些什么来改进和加强混淆步骤呢?

最佳答案

据我所知,这个问题到目前为止还没有完美的解决方案。您可以阅读this ,问题是相似的。到目前为止,混淆可能是最好+最简单的努力。我的意思是,不仅通过使用代码混淆器,而且您还编写了奇怪的逻辑来隐藏您的算法,这样破解者就无法轻松跟踪逻辑和方法调用。

关于Java防止jar文件中的证书文件(manifest)被篡改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37607691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com