如何在我的代码android中保护url?

时间:2014-08-28 09:45:34

标签: android security

我在android上做了一个应用程序。我使用一些网址在我的服务器上请求,但我不知道如何在我的应用程序中保护或隐藏这些网址。 有人能帮助我吗?

4 个答案:

答案 0 :(得分:2)

我也做过类似的事情。你要做的是......

1)您应该有一个Web服务,它将为您提供服务的URL

2)加密您的主Web服务URL并隐藏密码内部代码。

3)用户程序来模糊你的代码。

4)当您加载应用时,点击主网址并获取其他网址

5)获取解密密钥,就像你将URL保留在内存中一样,任何人都可以获得内存转储

6)在需要时解密URL。

其他选择是......

Hiding Strings in Code

Use SQL Cipher

Encrypted Database

Using Cryptography to Store Credentials Safely

private final static String ALGORITM = "Blowfish";
private final static String KEY = "2356a3a42ba5781f80a72dad3f90aeee8ba93c7637aaf218a8b8c18c";
private final static String PLAIN_TEXT = "here is your text";

public void run(View v) {

    try {

        byte[] encrypted = encrypt(KEY, PLAIN_TEXT);
        Log.i("FOO", "Encrypted: " + bytesToHex(encrypted));

        String decrypted = decrypt(KEY, encrypted);
        Log.i("FOO", "Decrypted: " + decrypted);

    } catch (GeneralSecurityException e) {
        e.printStackTrace();
    }
}

private byte[] encrypt(String key, String plainText) throws GeneralSecurityException {

    SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);

    Cipher cipher = Cipher.getInstance(ALGORITM);
    cipher.init(Cipher.ENCRYPT_MODE, secret_key);

    return cipher.doFinal(plainText.getBytes());
}

private String decrypt(String key, byte[] encryptedText) throws GeneralSecurityException {

    SecretKey secret_key = new SecretKeySpec(key.getBytes(), ALGORITM);

    Cipher cipher = Cipher.getInstance(ALGORITM);
    cipher.init(Cipher.DECRYPT_MODE, secret_key);

    byte[] decrypted = cipher.doFinal(encryptedText);

    return new String(decrypted);
}

public static String bytesToHex(byte[] data) {

    if (data == null)
        return null;

    String str = "";

    for (int i = 0; i < data.length; i++) {
        if ((data[i] & 0xFF) < 16)
            str = str + "0" + java.lang.Integer.toHexString(data[i] & 0xFF);
        else
            str = str + java.lang.Integer.toHexString(data[i] & 0xFF);
    }

    return str;

}

See live results of above encryption (blowfish)

答案 1 :(得分:0)

我这样使用它。我开始使用AES算法加密URL,并使用密钥AES来获取URL的字节数组。

byte[] b = {-52, -42, -105, 86, 110, -111, -59, 126, 97, -70, 12, 67, -121, 75, -97, 76, 82, -29, -25, -87, 77, 21, 19, 73, 45, -28, -20, -61, 34, 121, -27, -22, -25, 34, 2, -80, 48, -118, -109, -63, -26, 72, -42, -79, -75, -82, -52, -6, 118, 25, 48, 48, 47, -54, -42, -13, -83, 37, 118, -100, -1, -38, 127, 8, 22, -124, -25, -33, -18, -2, -31, -55, -25, 2, -46, 19, 36, -2, 76, 100};

我将URL转换为字节数组,我只在应用程序中保存字节数组。当我需要时,我使用AES算法和密钥AES将字节数组转换为URL。

答案 2 :(得分:-1)

您可以尝试模糊字符串资源(使用 Progaurd )但是您需要投入多少精力来使您的资源(如URL)安全,总有一种方法可以反编译和检索硬编码来自您的应用程序的数据。除了依赖在应用程序中保护您的URL之外,请尝试保护您的服务器,以便只能通过您的授权用户访问它。 如果你仍想让攻击者生活困难你可以学习this link

  • 请记住:通过遵循这种方法(您要问的问题),您可以通过增加攻击者侵入资源的时间跨度来加强攻击者的生活。但是您的应用程序仍然容易被破解。

.apk很容易被分解(see this online website),即使你会使用一些可以使用的算法,一个坚定的攻击者可以破解它,因为他可以下载你的.apk和普通用户一样可以访问其中的一切。还Give an eye to this

Reverse engineering of an .apk is best discussed here

答案 3 :(得分:-1)

在环境变量,BuildConfig和Android Studio中隐藏URL

https://stackoverflow.com/a/47942035/7662481