正在查看: 新暖心缘 v8.1.1 应用的 ConfigManager.java JAVA 源代码文件
本页面展示 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;
}
}
}