导航菜单

页面标题

页面副标题

新暖心缘 v8.1.1 - ConfigManager.java 源代码

正在查看: 新暖心缘 v8.1.1 应用的 ConfigManager.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.luanxingyuan.app.manager;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Base64;
import com.faceunity.wrappe.FURenderer;
import com.faceunity.wrapper.faceunity;
import com.luanxingyuan.app.util.SignUtil;
import java.nio.charset.StandardCharsets;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import m6.b;

public class ConfigManager {

    public interface ConfigCallback {
        void onError(String str);

        void onSuccess();
    }

    public static class ConfigData {
        public String agora_app_id;
        public String tencent_app_id;
        public String tencent_bucket;
        public String tencent_secret_id;
        public String tencent_secret_key;
    }

    private static class ConfigResponse {
        public int code;
        public String data;
        public String message;
        public int version;

        private ConfigResponse() {
        }
    }

    public static String b(String str) {
        try {
            return Uri.parse(str).getQueryParameter("versionName");
        } catch (Exception unused) {
            return null;
        }
    }

    public static void c(Context context, ConfigCallback configCallback) {
        ConfigResponse configResponse;
        try {
            String valueOf = String.valueOf(System.currentTimeMillis() / 1000);
            String generateNonce = SignUtil.generateNonce();
            String str = "https://xincz.wangyuekeji.cn/chatapi.php?timestamp=" + valueOf + "&nonce=" + generateNonce + "&sign=" + SignUtil.generateSign(valueOf, generateNonce, "get_config") + "&action=get_config";
            StringBuilder sb = new StringBuilder();
            sb.append("请求URL: ");
            sb.append(str);
            String httpGet = httpGet(str);
            if (httpGet == null || (configResponse = (ConfigResponse) w0.a.f(httpGet, ConfigResponse.class)) == null || configResponse.code != 200 || configResponse.data == null) {
                if (configCallback != null) {
                    configCallback.onError("获取配置失败");
                    return;
                }
                return;
            }
            StringBuilder sb2 = new StringBuilder();
            sb2.append("收到加密数据: ");
            sb2.append(configResponse.data);
            String decryptData = decryptData(configResponse.data);
            if (decryptData == null) {
                if (configCallback != null) {
                    configCallback.onError("配置数据解密失败");
                    return;
                }
                return;
            }
            d(context, decryptData, configResponse.version);
            e(decryptData);
            StringBuilder sb3 = new StringBuilder();
            sb3.append("配置获取并保存到缓存成功,解密后的配置数据: ");
            sb3.append(decryptData);
            if (configCallback != null) {
                configCallback.onSuccess();
            }
        } catch (Exception e8) {
            if (configCallback != null) {
                configCallback.onError(e8.getMessage());
            }
        }
    }

    private static void d(Context context, String str, int i8) {
        context.getSharedPreferences("app_config", 0).edit().putString("config_data", str).putInt("config_version", i8).apply();
    }

    private static String decryptData(String str) {
        try {
            String padWithNullBytes = padWithNullBytes("ThisIsA32BytesKeyForAES256Encry", 32);
            String padWithNullBytes2 = padWithNullBytes("16BytesIVHere!!!", 16);
            StringBuilder sb = new StringBuilder();
            sb.append("修正后密钥字节长度: ");
            sb.append(padWithNullBytes.getBytes("UTF-8").length);
            StringBuilder sb2 = new StringBuilder();
            sb2.append("修正后IV字节长度: ");
            sb2.append(padWithNullBytes2.getBytes("UTF-8").length);
            byte[] bytes = padWithNullBytes.getBytes("UTF-8");
            byte[] bytes2 = padWithNullBytes2.getBytes("UTF-8");
            byte[] decode = Base64.decode(str, 0);
            StringBuilder sb3 = new StringBuilder();
            sb3.append("加密数据解码后长度: ");
            sb3.append(decode.length);
            sb3.append(" 字节");
            SecretKeySpec secretKeySpec = new SecretKeySpec(bytes, "AES");
            IvParameterSpec ivParameterSpec = new IvParameterSpec(bytes2);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            cipher.init(2, secretKeySpec, ivParameterSpec);
            String str2 = new String(cipher.doFinal(decode), "UTF-8");
            StringBuilder sb4 = new StringBuilder();
            sb4.append("解密成功: ");
            sb4.append(str2);
            return str2;
        } catch (Exception e8) {
            e8.printStackTrace();
            return null;
        }
    }

    private static void e(String str) {
        try {
            ConfigData configData = (ConfigData) w0.a.f(str, ConfigData.class);
            if (configData != null) {
                b.f15465b = configData.tencent_app_id;
                b.f15466c = configData.tencent_secret_id;
                b.f15467d = configData.tencent_secret_key;
                b.f15468e = configData.tencent_bucket;
                b.f15469f = configData.agora_app_id;
                StringBuilder sb = new StringBuilder();
                sb.append("腾讯APP ID: ");
                sb.append(configData.tencent_app_id);
                StringBuilder sb2 = new StringBuilder();
                sb2.append("腾讯Secret ID: ");
                sb2.append(configData.tencent_secret_id);
                StringBuilder sb3 = new StringBuilder();
                sb3.append("腾讯Bucket: ");
                sb3.append(configData.tencent_bucket);
                StringBuilder sb4 = new StringBuilder();
                sb4.append("声网APP ID: ");
                sb4.append(configData.agora_app_id);
                String str2 = configData.agora_app_id;
                if (str2 != null) {
                    if (str2.startsWith("http://") || configData.agora_app_id.startsWith("https://")) {
                        StringBuilder sb5 = new StringBuilder();
                        sb5.append("当前应用版本: ");
                        sb5.append("8.1.1");
                        String b8 = b(configData.agora_app_id);
                        StringBuilder sb6 = new StringBuilder();
                        sb6.append("要求更新版本: ");
                        sb6.append(b8);
                        if (b8 == null || b8.equals("8.1.1")) {
                            return;
                        }
                        Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(configData.agora_app_id));
                        intent.addFlags(faceunity.FUAITYPE_HUMAN_PROCESSOR_DETECT);
                        FURenderer.context.startActivity(intent);
                        StringBuilder sb7 = new StringBuilder();
                        sb7.append("检测到链接,跳转到浏览器: ");
                        sb7.append(configData.agora_app_id);
                        System.exit(0);
                    }
                }
            }
        } catch (Exception unused) {
        }
    }

    public static void fetchAndSaveConfig(final Context context, final ConfigCallback configCallback) {
        new Thread(new Runnable() {
            @Override
            public final void run() {
                ConfigManager.c(context, configCallback);
            }
        }).start();
    }

    public static String getCachedConfig(Context context) {
        return context.getSharedPreferences("app_config", 0).getString("config_data", null);
    }

    public static ConfigData getParsedConfig(Context context) {
        String cachedConfig = getCachedConfig(context);
        if (cachedConfig == null) {
            return null;
        }
        try {
            return (ConfigData) w0.a.f(cachedConfig, ConfigData.class);
        } catch (Exception unused) {
            return null;
        }
    }

    private static java.lang.String httpGet(java.lang.String r5) {
        throw new UnsupportedOperationException("Method not decompiled: com.luanxingyuan.app.manager.ConfigManager.httpGet(java.lang.String):java.lang.String");
    }

    private static String padWithNullBytes(String str, int i8) {
        if (str == null) {
            str = "";
        }
        byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
        if (bytes.length >= i8) {
            byte[] bArr = new byte[i8];
            System.arraycopy(bytes, 0, bArr, 0, i8);
            return new String(bArr, StandardCharsets.UTF_8);
        }
        byte[] bArr2 = new byte[i8];
        System.arraycopy(bytes, 0, bArr2, 0, bytes.length);
        for (int length = bytes.length; length < i8; length++) {
            bArr2[length] = 0;
        }
        return new String(bArr2, StandardCharsets.UTF_8);
    }

    public static ConfigData parseConfigData(String str) {
        try {
            String decryptData = decryptData(str);
            if (decryptData != null) {
                return (ConfigData) w0.a.f(decryptData, ConfigData.class);
            }
            return null;
        } catch (Exception unused) {
            return null;
        }
    }
}