2014-09-30 69 views
0

如何对纯文本数据进行混淆,以便Java程序能够对其进行反混淆处理很难进行反向工程?也就是说,应该没有简单的方法通过反编译/分解程序的JVM代码来弄清楚如何自己解密数据。以非反向工程方式加密Java程序的数据

我意识到如果一个坏人足够坚决,这是不可能的。只是想尽可能地努力。

我唯一的想法是一个原生的扩展实现加密算法与存储在一个古怪的方式,而不仅仅是一个简单的字符串的密钥。但真的喜欢避免本地扩展。

编辑

我极力用下来,并密切票反对。这是一个真正的问题。该应用程序被派遣给数千名高中的孩子。为了加密数据,它目前使用代码中嵌入的密钥来实现RC4加密(使用Java)。聪明的孩子们可以反编译这个,并使用反编译来编写读取其他孩子数据文件的Java。这反过来允许各种形式的作弊。我们需要一个简单而便宜的方法来更难推断加扰算法。就这样。我们不关心逆向工程这个80k线应用程序的其余部分。实际上它是开源的。我们只需要保护执行数据解密的单一功能。

+0

加密数据,并让您的应用程序解密它。我不相信你*需要*本地扩展,但你可能想看看JCE Unlimited Strength JAR。 – Makoto 2014-09-30 01:36:13

+0

一个非常昂贵的选择是Excelsior JET,它将本质上将Java字节码编译成本机可执行文件(这使得它很难像C++应用程序那样进行反向工程)。 – xpa1492 2014-09-30 01:56:25

+1

这是尖叫的XY问题。你试图让不同用户的信息彼此保密?使用非对称加密。 – chrylis 2014-09-30 03:05:24

回答

0

任何程序都可以解码的程序可以解码。任何Java程序都可以反编译。即使远程存储数据也不起作用,因为在下载数据后,您需要对其进行解密,并且可以复制或修补数据。如果明文暴露出来,它可以被访问。你可以让访问变得困难,但用多年前黑客的话来说:“嘿,太棒了,它是受版权保护的 - 这意味着它带有一个免费的谜题!”

请记住,密码存储通常使用陷阱密码并比较加密哈希值。甚至需要将加密密码保存在用户绝对无法访问的地方。

退一步,重新考虑你的设计。

+0

谢谢,但你没有告诉我任何新东西。没有其他设计。 – Gene 2014-09-30 03:40:31

+0

这种设计没有稳健的实现。如果可以显示,可以复制。即使您通过图像处理渲染文本,但不按顺序绘制像素,否则将其设置为“不是文本”,直到它碰到屏幕,它们仍然可以刮擦屏幕。请记住,时间是孩子们可以承受的投入,远远超过你的能力;他们的时间比你的便宜。除非你给他们* NO *进入箱子内部,否则你所能做的只是拖延/烦人的战术。如果他们有足够的动力,他们会赢。期。 – keshlam 2014-09-30 03:46:20

+0

我知道这一切。这是一场战争。我们升级。他们升级。我没有期望有完美的答案,只是下一次升级。 – Gene 2014-09-30 04:40:06