Java - 有什么方式可以混淆/隐藏字符串以防止反编译?

3

我有一些字符串需要进行混淆/隐藏以防止反编译。我知道我永远无法实现真正的预防,但我希望有任何/某些方法至少可以防止这些字符串完全呈现出来。

非常感谢您的帮助。


3
我建议使用 ROT13 编码。 - Niklas B.
我认为这可以使用混淆工具完成。这些工具可以做更多的事情,在反编译后使您的代码非常难以理解。例如,您可以尝试http://www.yworks.com/en/products_yguard_about.html。 - Benoit Courtine
谢谢Niklas!ROT13看起来很简单!我想将您的回复标记为答案,但不知道如何操作。 - Justin
可能是 混淆代码中隐藏字符串 的重复问题。 - Graham Borland
3个回答

3

您可以将它们放在资源文件中并使用AES进行加密(例如)。然后在应用程序初始化时提取数据。


这样做的效果一直很好,直到有人对您的应用进行反编译(这是很容易做到的)并获得AES密钥。 - Steve Kuo
您不必将AES密钥与源代码一起保存。有许多方法可以保持其安全性(例如,远程服务器可为经过身份验证和授权的人员/应用程序执行解密操作)。 - Eugene Retunsky
很酷,我有一个远程服务器可供使用。不幸的是,我不知道如何实现这个系统。我还看到了这个:https://dev59.com/z3E95IYBdhLWcg3wHqWl#2443952,其中包括“在服务器端以不同方式动态生成的.class”。这听起来好像也有助于安全性,但不知道什么样的方法可以允许动态使用.class文件...像下载的唯一的.class文件中会有什么? - Justin
只需一个具有单个方法(解密)的Web服务。您可以在互联网上搜索AES加密 - 这个主题有很多资料。 - Eugene Retunsky

1

有许多免费和商业的"Java代码混淆器", 可以更改非公共API的名称并对字符串文字进行简单的转换。这种混淆可能无法阻止决心强烈的攻击者,但可以防止一般人的观察。


没错,特别是它将阻止像 strings *.class 这样根本不需要任何技能的东西。 - Niklas B.
1
我昨天尝试了Proguard,但是我仍然看到我的字符串与我的代码中完全一样 =/ - Justin

0

我最喜欢的方法是将它们声明为base64编码。然后只需调用一个简单的库来解码字符串并在需要时使用即可。这样可以混淆字符串及其长度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接