在 Java 中混淆字符串

问题描述 投票:0回答:4

我正在做一个项目,我需要隐藏特定的 URL 调用;我不希望此 URL 可见。这是 URL 调用的外观示例。

public void example(View view) {
    goToUrl("example.com");
}
java obfuscation
4个回答
5
投票

你真的不能。您可以混淆方法名称,因为最终根本不需要知道原始方法名称。你可以只使用混淆。在这里你最终需要知道真实的 URL。所以需要有一个unobfuscate函数。这意味着您可以从那里轻松获得结果。或者您知道,只需跟踪通过代理发出的 HTTP 请求使用的 url。


2
投票

近 2 年后回顾这个问题,这个问题得到了相当多的关注,我发现了一些混淆器,我最终将其用于字符串混淆,但每个混淆都可以被破解。这是我的加密字符串混淆器列表,我将从列出付费混淆器开始。

1。 Zelix 级大师

他们的官方网站是https://zelix.com

在我看来,这是最好的 jar 或 android java 混淆器之一。 然而它并不像预期的那样便宜,因为混淆器有多好。

如果您是小型开发人员,单个许可证的费用为 239 美元;如果您是开发人员团队 (Company),则费用为 479 美元。

您可以在这里看到功能列表

2。 DexGuard

他们的官方网站是https://www.guardsquare.com/en

DexGuard 是由 Proguard 背后的人制作的混淆器

这是我认为第二好的混淆器。名称混淆比 Zelix 上的名称混淆要好得多。

我不确定他们的定价,因为我从未使用过它,但我看到它被用于应用程序。你怎么能在这里要求定价

免费混淆器。

您可以找到免费的替代品,例如 StringCareParanoid

它们不如我上面列出的那些,对于具有 java 基础知识的人来说,使用这两个工具最多需要 5 秒来破解您的程序。


1
投票

一种可能性是使用整数数组对需要混淆的字符串进行一些移位操作。但正如其他人已经提到的,这只是一种隐藏纯字符串的机制。通过一些努力,它可以很容易地被解码。

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));

混淆应用程序(例如:使用混淆器)将有助于在一定程度上隐藏解码功能。


-1
投票

对于混淆字符串,您现在可以使用新的 gradle 插件 + 库,请在此处查看

https://github.com/MichaelRocks/paranoid

现在还有一个新的插件也可以混淆资源,请在下面查看

https://github.com/shwenzhang/AndResGuard

分享让更多的开发者可以使用它,因此越来越多的开发者将为这些插件的进一步开发做出贡献,从而我们可以共同改进这些插件。

© www.soinside.com 2019 - 2024. All rights reserved.