我正在编写一个桌面 java 应用程序。该程序从客户的服务器接收 XML 文件。几个标签中的数据是整数类型,并使用一些数学公式“加密”。当我的程序解析 XML 文件时,我需要解密这些标签。解密公式如下:
int decrypted = (int) Math.ceil(Math.pow ((idProduct + 1) / 3, 1.5));
解密后的数据然后保存到 H2 数据库,该数据库使用 AES-128 加密。
我需要的是以某种方式隐藏这些公式以防止反编译。
我的尝试:
1. 为了隐藏我尝试使用混淆器的公式,但我没有发现任何与公式有关的东西。这是一段被 ProGuard 4.8 混淆并被 JAD 反编译的代码:
private String d(String paramString) {
long l = Long.valueOf(paramString).longValue();
int i = (int)Math.ceil(Math.pow((l + 1L) / 3L, 1.5D));
String str = String.valueOf(i);
return str;
}
正如你所看到的,ProGuard 没有对公式做任何事情。我们不能使用像 Zelix KlassMaster 这样的商业混淆器。
2. 我想试试 JET Excelsior(但似乎还不支持 java 7 应用程序)。此外,我认为我的老板不会欣赏它。
3.我也想过用一些像launch4j这样的包装器,但不知道提取.jar是否难。
4.然后我想用C写一个外部lib并使用JNI。但似乎竞争对手只能使用该库。
5. IMO 的好解决方案是在 ASM 中编写解密函数并将其直接粘贴到 java 代码中,就像我们可以这样做是 C。不幸的是,这是不可能的。
6.类的加密没用.
我知道一切都可以反编译/反汇编,我只是想让它比只运行 JAD 并立即获取它更难一点。
请给我提意见