我正在做一个项目,我需要隐藏特定的 URL 调用;我不希望此 URL 可见。这是 URL 调用的外观示例。
public void example(View view) {
goToUrl("example.com");
}
你真的不能。您可以混淆方法名称,因为最终根本不需要知道原始方法名称。你可以只使用混淆。在这里你最终需要知道真实的 URL。所以需要有一个unobfuscate函数。这意味着您可以从那里轻松获得结果。或者您知道,只需跟踪通过代理发出的 HTTP 请求使用的 url。
近 2 年后回顾这个问题,这个问题得到了相当多的关注,我发现了一些混淆器,我最终将其用于字符串混淆,但每个混淆都可以被破解。这是我的加密字符串混淆器列表,我将从列出付费混淆器开始。
1。 Zelix 级大师
他们的官方网站是https://zelix.com
在我看来,这是最好的 jar 或 android java 混淆器之一。 然而它并不像预期的那样便宜,因为混淆器有多好。
如果您是小型开发人员,单个许可证的费用为 239 美元;如果您是开发人员团队 (Company),则费用为 479 美元。
您可以在这里看到功能列表
2。 DexGuard
他们的官方网站是https://www.guardsquare.com/en
DexGuard 是由 Proguard 背后的人制作的混淆器
这是我认为第二好的混淆器。名称混淆比 Zelix 上的名称混淆要好得多。
我不确定他们的定价,因为我从未使用过它,但我看到它被用于应用程序。你怎么能在这里要求定价
免费混淆器。
您可以找到免费的替代品,例如 StringCare 和 Paranoid
它们不如我上面列出的那些,对于具有 java 基础知识的人来说,使用这两个工具最多需要 5 秒来破解您的程序。
一种可能性是使用整数数组对需要混淆的字符串进行一些移位操作。但正如其他人已经提到的,这只是一种隐藏纯字符串的机制。通过一些努力,它可以很容易地被解码。
gettign int数组代码
public static String getIntArrayCode(String string) {
int[] result = new int[string.length()];
for (int i = 0; i < string.length(); i++) {
int numericValue = Character.codePointAt(string, i);
result[i] = numericValue << 3;
}
StringBuffer arrayCode = new StringBuffer();
arrayCode.append("new int[]{");
for (int i = 0; i < result.length; i++) {
arrayCode.append(result[i]);
if (i < result.length - 1) {
arrayCode.append(",");
}
}
arrayCode.append("}");
return arrayCode.toString();
}
需要将此int数组复制到代码中。
要取消混淆,请使用方法
public static String getString(int[] data) {
StringBuffer test = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int t = data[i] >> 3;
test.append((char) t);
}
return test.toString();
}
用法:
//"Hello12345&%$";
int []data1 = new int[]{1152,1616,1728,1728,1776,784,800,816,832,848,608,592,576};
System.out.println(getString(data1));
混淆应用程序(例如:使用混淆器)将有助于在一定程度上隐藏解码功能。
对于混淆字符串,您现在可以使用新的 gradle 插件 + 库,请在此处查看
https://github.com/MichaelRocks/paranoid
现在还有一个新的插件也可以混淆资源,请在下面查看
https://github.com/shwenzhang/AndResGuard
分享让更多的开发者可以使用它,因此越来越多的开发者将为这些插件的进一步开发做出贡献,从而我们可以共同改进这些插件。