Primer paso de la investigacion. Se aportan el .apk, las carpetas con el apk extraido y el apk descompilado. El archivo API_DOCUMENTATION.md es un archivo donde se anotaran los descubrimientos del funcionamiento de la API, y los .py son scripts para probar la funcionalidad de la API con los métodos que vayamos encontrando. Finalmente, los archivos .js son scripts de Frida para extraer informacion de la APP durante la ejecucion.

This commit is contained in:
2025-12-04 13:59:54 +01:00
parent f2fd1c3bf5
commit e0133d2ca2
10432 changed files with 1019085 additions and 1 deletions

View File

@@ -0,0 +1,288 @@
package com.google.firebase.remoteconfig;
import B0.C0031i;
import B0.w;
import I2.k;
import android.content.Context;
import android.util.Log;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
import com.google.firebase.abt.AbtException;
import com.google.firebase.abt.FirebaseABTesting;
import com.google.firebase.concurrent.FirebaseExecutors;
import com.google.firebase.installations.FirebaseInstallationsApi;
import com.google.firebase.remoteconfig.internal.ConfigCacheClient;
import com.google.firebase.remoteconfig.internal.ConfigContainer;
import com.google.firebase.remoteconfig.internal.ConfigFetchHandler;
import com.google.firebase.remoteconfig.internal.ConfigGetParameterHandler;
import com.google.firebase.remoteconfig.internal.ConfigMetadataClient;
import com.google.firebase.remoteconfig.internal.ConfigRealtimeHandler;
import com.google.firebase.remoteconfig.internal.DefaultsXmlParser;
import com.google.firebase.remoteconfig.internal.rollouts.RolloutsStateSubscriptionsHandler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executor;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/* loaded from: classes3.dex */
public class FirebaseRemoteConfig {
public static final boolean DEFAULT_VALUE_FOR_BOOLEAN = false;
public static final byte[] DEFAULT_VALUE_FOR_BYTE_ARRAY = new byte[0];
public static final double DEFAULT_VALUE_FOR_DOUBLE = 0.0d;
public static final long DEFAULT_VALUE_FOR_LONG = 0;
public static final String DEFAULT_VALUE_FOR_STRING = "";
public static final int LAST_FETCH_STATUS_FAILURE = 1;
public static final int LAST_FETCH_STATUS_NO_FETCH_YET = 0;
public static final int LAST_FETCH_STATUS_SUCCESS = -1;
public static final int LAST_FETCH_STATUS_THROTTLED = 2;
public static final String TAG = "FirebaseRemoteConfig";
public static final int VALUE_SOURCE_DEFAULT = 1;
public static final int VALUE_SOURCE_REMOTE = 2;
public static final int VALUE_SOURCE_STATIC = 0;
private final ConfigCacheClient activatedConfigsCache;
private final ConfigRealtimeHandler configRealtimeHandler;
private final Context context;
private final ConfigCacheClient defaultConfigsCache;
private final Executor executor;
private final ConfigFetchHandler fetchHandler;
private final ConfigCacheClient fetchedConfigsCache;
private final FirebaseABTesting firebaseAbt;
private final FirebaseApp firebaseApp;
private final FirebaseInstallationsApi firebaseInstallations;
private final ConfigMetadataClient frcMetadata;
private final ConfigGetParameterHandler getHandler;
private final RolloutsStateSubscriptionsHandler rolloutsStateSubscriptionsHandler;
public FirebaseRemoteConfig(Context context, FirebaseApp firebaseApp, FirebaseInstallationsApi firebaseInstallationsApi, FirebaseABTesting firebaseABTesting, Executor executor, ConfigCacheClient configCacheClient, ConfigCacheClient configCacheClient2, ConfigCacheClient configCacheClient3, ConfigFetchHandler configFetchHandler, ConfigGetParameterHandler configGetParameterHandler, ConfigMetadataClient configMetadataClient, ConfigRealtimeHandler configRealtimeHandler, RolloutsStateSubscriptionsHandler rolloutsStateSubscriptionsHandler) {
this.context = context;
this.firebaseApp = firebaseApp;
this.firebaseInstallations = firebaseInstallationsApi;
this.firebaseAbt = firebaseABTesting;
this.executor = executor;
this.fetchedConfigsCache = configCacheClient;
this.activatedConfigsCache = configCacheClient2;
this.defaultConfigsCache = configCacheClient3;
this.fetchHandler = configFetchHandler;
this.getHandler = configGetParameterHandler;
this.frcMetadata = configMetadataClient;
this.configRealtimeHandler = configRealtimeHandler;
this.rolloutsStateSubscriptionsHandler = rolloutsStateSubscriptionsHandler;
}
public static FirebaseRemoteConfig getInstance() {
return getInstance(FirebaseApp.getInstance());
}
private static boolean isFetchedFresh(ConfigContainer configContainer, ConfigContainer configContainer2) {
return configContainer2 == null || !configContainer.getFetchTime().equals(configContainer2.getFetchTime());
}
public /* synthetic */ Task lambda$activate$2(Task task, Task task2, Task task3) throws Exception {
if (!task.isSuccessful() || task.getResult() == null) {
return Tasks.forResult(Boolean.FALSE);
}
ConfigContainer configContainer = (ConfigContainer) task.getResult();
return (!task2.isSuccessful() || isFetchedFresh(configContainer, (ConfigContainer) task2.getResult())) ? this.activatedConfigsCache.put(configContainer).continueWith(this.executor, new a(this)) : Tasks.forResult(Boolean.FALSE);
}
public static /* synthetic */ FirebaseRemoteConfigInfo lambda$ensureInitialized$0(Task task, Task task2) throws Exception {
return (FirebaseRemoteConfigInfo) task.getResult();
}
public static /* synthetic */ Task lambda$fetch$3(ConfigFetchHandler.FetchResponse fetchResponse) throws Exception {
return Tasks.forResult(null);
}
public static /* synthetic */ Task lambda$fetch$4(ConfigFetchHandler.FetchResponse fetchResponse) throws Exception {
return Tasks.forResult(null);
}
public /* synthetic */ Task lambda$fetchAndActivate$1(Void r12) throws Exception {
return activate();
}
public /* synthetic */ Void lambda$reset$6() throws Exception {
this.activatedConfigsCache.clear();
this.fetchedConfigsCache.clear();
this.defaultConfigsCache.clear();
this.frcMetadata.clear();
return null;
}
public /* synthetic */ Void lambda$setConfigSettingsAsync$5(FirebaseRemoteConfigSettings firebaseRemoteConfigSettings) throws Exception {
this.frcMetadata.setConfigSettings(firebaseRemoteConfigSettings);
return null;
}
public static /* synthetic */ Task lambda$setDefaultsWithStringsMapAsync$7(ConfigContainer configContainer) throws Exception {
return Tasks.forResult(null);
}
public boolean processActivatePutTask(Task<ConfigContainer> task) {
if (!task.isSuccessful()) {
return false;
}
this.fetchedConfigsCache.clear();
ConfigContainer result = task.getResult();
if (result == null) {
Log.e(TAG, "Activated configs written to disk are null.");
return true;
}
updateAbtWithActivatedExperiments(result.getAbtExperiments());
this.rolloutsStateSubscriptionsHandler.publishActiveRolloutsState(result);
return true;
}
private Task<Void> setDefaultsWithStringsMapAsync(Map<String, String> map) {
try {
return this.defaultConfigsCache.put(ConfigContainer.newBuilder().replaceConfigsWith(map).build()).onSuccessTask(FirebaseExecutors.directExecutor(), new w(17));
} catch (JSONException e4) {
Log.e(TAG, "The provided defaults map could not be processed.", e4);
return Tasks.forResult(null);
}
}
public static List<Map<String, String>> toExperimentInfoMaps(JSONArray jSONArray) throws JSONException {
ArrayList arrayList = new ArrayList();
for (int i = 0; i < jSONArray.length(); i++) {
HashMap hashMap = new HashMap();
JSONObject jSONObject = jSONArray.getJSONObject(i);
Iterator<String> keys = jSONObject.keys();
while (keys.hasNext()) {
String next = keys.next();
hashMap.put(next, jSONObject.getString(next));
}
arrayList.add(hashMap);
}
return arrayList;
}
public Task<Boolean> activate() {
Task<ConfigContainer> task = this.fetchedConfigsCache.get();
Task<ConfigContainer> task2 = this.activatedConfigsCache.get();
return Tasks.whenAllComplete((Task<?>[]) new Task[]{task, task2}).continueWithTask(this.executor, new C0031i(this, task, task2, 2));
}
public ConfigUpdateListenerRegistration addOnConfigUpdateListener(ConfigUpdateListener configUpdateListener) {
return this.configRealtimeHandler.addRealtimeConfigUpdateListener(configUpdateListener);
}
public Task<FirebaseRemoteConfigInfo> ensureInitialized() {
Task<ConfigContainer> task = this.activatedConfigsCache.get();
Task<ConfigContainer> task2 = this.defaultConfigsCache.get();
Task<ConfigContainer> task3 = this.fetchedConfigsCache.get();
Task call = Tasks.call(this.executor, new b(this, 1));
return Tasks.whenAllComplete((Task<?>[]) new Task[]{task, task2, task3, call, this.firebaseInstallations.getId(), this.firebaseInstallations.getToken(false)}).continueWith(this.executor, new k(call, 19));
}
public Task<Void> fetch() {
return this.fetchHandler.fetch().onSuccessTask(FirebaseExecutors.directExecutor(), new w(19));
}
public Task<Boolean> fetchAndActivate() {
return fetch().onSuccessTask(this.executor, new a(this));
}
public Map<String, FirebaseRemoteConfigValue> getAll() {
return this.getHandler.getAll();
}
public boolean getBoolean(String str) {
return this.getHandler.getBoolean(str);
}
public double getDouble(String str) {
return this.getHandler.getDouble(str);
}
public FirebaseRemoteConfigInfo getInfo() {
return this.frcMetadata.getInfo();
}
public Set<String> getKeysByPrefix(String str) {
return this.getHandler.getKeysByPrefix(str);
}
public long getLong(String str) {
return this.getHandler.getLong(str);
}
public RolloutsStateSubscriptionsHandler getRolloutsStateSubscriptionsHandler() {
return this.rolloutsStateSubscriptionsHandler;
}
public String getString(String str) {
return this.getHandler.getString(str);
}
public FirebaseRemoteConfigValue getValue(String str) {
return this.getHandler.getValue(str);
}
public Task<Void> reset() {
return Tasks.call(this.executor, new b(this, 0));
}
public void schedule(Runnable runnable) {
this.executor.execute(runnable);
}
public Task<Void> setConfigSettingsAsync(FirebaseRemoteConfigSettings firebaseRemoteConfigSettings) {
return Tasks.call(this.executor, new com.google.firebase.crashlytics.internal.metadata.a(1, this, firebaseRemoteConfigSettings));
}
public void setConfigUpdateBackgroundState(boolean z3) {
this.configRealtimeHandler.setBackgroundState(z3);
}
public Task<Void> setDefaultsAsync(Map<String, Object> map) {
HashMap hashMap = new HashMap();
for (Map.Entry<String, Object> entry : map.entrySet()) {
Object value = entry.getValue();
if (value instanceof byte[]) {
hashMap.put(entry.getKey(), new String((byte[]) value));
} else {
hashMap.put(entry.getKey(), value.toString());
}
}
return setDefaultsWithStringsMapAsync(hashMap);
}
public void startLoadingConfigsFromDisk() {
this.activatedConfigsCache.get();
this.defaultConfigsCache.get();
this.fetchedConfigsCache.get();
}
public void updateAbtWithActivatedExperiments(JSONArray jSONArray) {
if (this.firebaseAbt == null) {
return;
}
try {
this.firebaseAbt.replaceAllExperiments(toExperimentInfoMaps(jSONArray));
} catch (AbtException e4) {
Log.w(TAG, "Could not update ABT experiments.", e4);
} catch (JSONException e5) {
Log.e(TAG, "Could not parse ABT experiments from the JSON response.", e5);
}
}
public static FirebaseRemoteConfig getInstance(FirebaseApp firebaseApp) {
return ((RemoteConfigComponent) firebaseApp.get(RemoteConfigComponent.class)).getDefault();
}
public Task<Void> fetch(long j4) {
return this.fetchHandler.fetch(j4).onSuccessTask(FirebaseExecutors.directExecutor(), new w(18));
}
public Task<Void> setDefaultsAsync(int i) {
return setDefaultsWithStringsMapAsync(DefaultsXmlParser.getDefaultsFromXml(this.context, i));
}
}