我需要向用户分发Java桌面应用程序。我正在寻找不同的方法来保护我的源代码不受逆向工程的影响。
一种方法是分发一个虚拟机(例如Linux),该虚拟机包含在该VM中运行的应用程序,并将该虚拟机的root用户设置为密码,例如: 50个字符。缺点是我的应用程序的下载大小太大(某些Gigas)。接下来的问题是:攻击者可以从VDI磁盘映像内部读取我的Java代码吗?
另一种方法是提前编译(AOT)到本机。 ExcelsiorJet似乎是最好的工具,但这不是免费的。仅仅对源代码进行混淆是不够的,因为想要阅读源代码的人主要是关心信息流和数据结构的人。 excellent article进一步说明了有关AOT和混淆的问题。现在的问题是:通过使用ExcelsiorJet编译为本机,我的本机代码相对逆向工程是否相对安全?
还有另一种方式:例如使用C ++编写对安全性要求最高的代码,将其编译为真正的本机代码,并公开我不重要的Java源代码。但这意味着我也需要维护这两个部分。