首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >混淆:在java中隐藏硬编码值

混淆:在java中隐藏硬编码值
EN

Stack Overflow用户
提问于 2012-10-27 23:56:26
回答 2查看 10.5K关注 0票数 18

可能重复:

hiding strings in Obfuscated code

我试图隐藏我的应用程序中的一些静态字符串,以使其更难反编译,这样就像密码算法名称这样的常量很难在混淆的代码中找到。

我考虑过这样的事情:

代码语言:javascript
复制
String CONCAT= "concat"+"string";
String RAW_STRING= "raw_string";
String FROM_BYTES=new String("from_bytes".getBytes());
String FROM_CHARS=new String(new char[]{'f','r','o','m','_','c','h','a','r','s'});
String FROM_CHAR2=new String(new char[]{102,114,111,109,95,99,104,97,114,115,95,50});

最后两个选项似乎比原始选项更“黑暗”,但我想有更好的方法来做到这一点。

我该如何改进这一点呢?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-28 00:06:08

首先,你不应该只写

代码语言:javascript
复制
String FROM_CHAR2=new String(new char[]{102,114,111,109,95,99,104,97,114,115,95,50});

char数组实际上是一个字符串,这是一个确凿的证据。

您可以执行以下操作的组合:

  1. 将你的" String“放入一个空数组中,或者更好,在应用程序的不同阶段,将你的字符串拆分为几个int数组,这样它的值只会在运行时的某个时间间隔变得有效,保证它不会通过反编译你的代码而被破译。
  2. 来回传递数组,通过局部变量,返回到实例变量,等等,在最终将数组转换成一个要传递给String的数组之前,constructor
  3. immediately在使用后将字符串设置为

,只是为了减少实际字符串在运行时存在的时间

票数 10
EN

Stack Overflow用户

发布于 2012-10-28 00:08:03

我更喜欢使用解密算法在静态(类)初始化器中设置值,如下所示

代码语言:javascript
复制
class ...
  String CONCAT;

  static {
     CONCAT = uncrypt ("ahgsdhagcf");
  } 

其中uncrypt可能真的是一个很好的解密算法,或者稍微弱一点的base64解码。

在任何情况下,您都需要一个简单的程序来先对字符串进行编码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13101727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档