我们的商业jar与批处理文件一起运行(java -jar .)都有我们的签名。它是由而不是触发的。它还包含额外的第三方图书馆。如果任何恶意用户替换了任何java类,则jar将停止运行,因为签名不匹配。但是,如果他从jar中删除清单文件,就不会再进行检查了。当替换、更改任何类时,我们如何防止程序运行?一个选项可以是检查java源代码中的清单文件,如声明的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编写一些spagetti代码)是一种很好的方法,还是可以建议不同的过程来防止显式篡改以及使反编译器不成功?我检查了混淆器中的选项,但是在代码编写阶段我们能做些什么来改进和加强混淆步骤呢?
发布于 2016-06-03 07:09:31
据我所知,到目前为止,这个问题还没有完美的解决办法。你可以读this,问题是一样的。到目前为止,混淆可能是best+easy的努力。我的意思是,不仅通过使用代码混淆器,还可以编写这样一个奇怪的逻辑来隐藏您的算法,这样破解器就不能很容易地跟踪逻辑和方法调用。
https://stackoverflow.com/questions/37607691
复制相似问题