如何保护Web服务URL?

Ano*_*oop -1 security encryption post android web-services

我有一个带有网络服务网址的android应用。如果有人解密我的apk文件,则Web服务URL将变为可见。我正在使用HTTP POST调用Web服务。

任何人都可以通过反编译来自此站点的apk文件来读取代码。

我的注册页面网址遭到黑客入侵,并向其中发送包含发布数据的大量请求。我正在使用,API_KEY并发送API_KEY与数据。API_KEY已存储在gradle.properties文件中。

我没用过

 minifyEnabled true
 shrinkResources true
 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'`  when its got hacked.
Run Code Online (Sandbox Code Playgroud)

经过一番搜索,我知道没有100%安全的方法可以隐藏url。

我的注册代码是:

String link = "http://xxxxxxxxxx.php";

String data = URLEncoder.encode("name", "UTF-8") + "=" + URLEncoder.encode(name, "UTF-8");
data += "&" + URLEncoder.encode("phone", "UTF-8") + "=" + URLEncoder.encode(phone, "UTF-8");
data += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); 

URL url = new URL(link);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
Run Code Online (Sandbox Code Playgroud)

我不知道将数据发布到网址是否正确。

如何保护我的源代码?

我可以将所有Web服务URL存储在服务器中吗?

我是android的初学者。请帮忙!

ali*_*ara 5

我在我开发的所有android应用程序中都使用了它

gradle.properties

API = http://ec2xxxxx.compute.amazonaws.com
API_KEY = $2c11SoL/NjJ28
Run Code Online (Sandbox Code Playgroud)

创建 utils.gradle

utils.gradle

        class Utils {
        static def r = new Random(System.currentTimeMillis())
    }

    def String toJavaCodeString(String string) {
        byte[] b = string.getBytes();
        int c = b.length;
        StringBuilder sb = new StringBuilder();

        sb.append("(new Object() {");
        sb.append("int t;");
        sb.append("public String toString() {");
        sb.append("byte[] buf = new byte[");
        sb.append(c);
        sb.append("];");

        for (int i = 0; i < c; ++i) {
            int t = Utils.r.nextInt();
            int f = Utils.r.nextInt(24) + 1;

            t = (t & ~(0xff << f)) | (b[i] << f);

            sb.append("t = ");
            sb.append(t);
            sb.append(";");
            sb.append("buf[");
            sb.append(i);
            sb.append("] = (byte) (t >>> ");
            sb.append(f);
            sb.append(");");
        }

        sb.append("return new String(buf);");
        sb.append("}}.toString())");

        return sb.toString();} 
ext.toJavaCodeString = this.&toJavaCodeString
Run Code Online (Sandbox Code Playgroud)

build.gradle

apply from: "utils.gradle"
   android {
    defaultConfig {
        buildConfigField 'String', 'API', toJavaCodeString(API)
        buildConfigField 'String', 'API_KEY', toJavaCodeString(API_KEY)
    }}
Run Code Online (Sandbox Code Playgroud)

并访问您的私人网址;

    public static final String API = BuildConfig.API;
Run Code Online (Sandbox Code Playgroud)