混淆:隐藏java中的硬编码值

Add*_*dev 17 java security android proguard

可能重复:
在混淆代码中隐藏字符串

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

我考虑过这样的事情:

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});
Run Code Online (Sandbox Code Playgroud)

最后两个选项似乎比原始选项"更暗"但我想有更好的方法来做到这一点.

我怎样才能改善这个?谢谢

Kai*_*Kai 9

首先,你不应该只写

String FROM_CHAR2=new String(new char[]{102,114,111,109,95,99,104,97,114,115,95,50});
Run Code Online (Sandbox Code Playgroud)

char数组实际上是一个字符串,这是一个死的赠品.

您可以结合以下各项:

  1. 把你的"String"放在int []数组中
  2. 甚至更好,将你的String分成几个int数组
  3. 在应用程序的各个阶段计算/操作数组的值,因此它的值只会在运行时的某个时间间隔内变为有效,从而保证通过反编译代码不会在奇怪的情况下解密它
  4. 在最终将数组转换为单个数组以传递给String构造函数之前,通过局部变量,返回实例变量等来回传递数组
  5. 使用后立即将String设置为null,只是为了减少实际String在运行时存在的时间