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,173 @@
package com.google.firebase.crashlytics;
import android.content.Context;
import android.content.pm.PackageManager;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
import com.google.firebase.analytics.connector.AnalyticsConnector;
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponent;
import com.google.firebase.crashlytics.internal.CrashlyticsNativeComponentDeferredProxy;
import com.google.firebase.crashlytics.internal.DevelopmentPlatformProvider;
import com.google.firebase.crashlytics.internal.Logger;
import com.google.firebase.crashlytics.internal.RemoteConfigDeferredProxy;
import com.google.firebase.crashlytics.internal.common.AppData;
import com.google.firebase.crashlytics.internal.common.BuildIdInfo;
import com.google.firebase.crashlytics.internal.common.CommonUtils;
import com.google.firebase.crashlytics.internal.common.CrashlyticsAppQualitySessionsSubscriber;
import com.google.firebase.crashlytics.internal.common.CrashlyticsCore;
import com.google.firebase.crashlytics.internal.common.DataCollectionArbiter;
import com.google.firebase.crashlytics.internal.common.ExecutorUtils;
import com.google.firebase.crashlytics.internal.common.IdManager;
import com.google.firebase.crashlytics.internal.network.HttpRequestFactory;
import com.google.firebase.crashlytics.internal.persistence.FileStore;
import com.google.firebase.crashlytics.internal.settings.SettingsController;
import com.google.firebase.inject.Deferred;
import com.google.firebase.installations.FirebaseInstallationsApi;
import com.google.firebase.remoteconfig.interop.FirebaseRemoteConfigInterop;
import com.google.firebase.sessions.api.FirebaseSessionsDependencies;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
/* loaded from: classes3.dex */
public class FirebaseCrashlytics {
static final int APP_EXCEPTION_CALLBACK_TIMEOUT_MS = 500;
static final String FIREBASE_CRASHLYTICS_ANALYTICS_ORIGIN = "clx";
static final String LEGACY_CRASH_ANALYTICS_ORIGIN = "crash";
final CrashlyticsCore core;
private FirebaseCrashlytics(CrashlyticsCore crashlyticsCore) {
this.core = crashlyticsCore;
}
public static FirebaseCrashlytics getInstance() {
FirebaseCrashlytics firebaseCrashlytics = (FirebaseCrashlytics) FirebaseApp.getInstance().get(FirebaseCrashlytics.class);
if (firebaseCrashlytics != null) {
return firebaseCrashlytics;
}
throw new NullPointerException("FirebaseCrashlytics component is not present.");
}
public static FirebaseCrashlytics init(FirebaseApp firebaseApp, FirebaseInstallationsApi firebaseInstallationsApi, Deferred<CrashlyticsNativeComponent> deferred, Deferred<AnalyticsConnector> deferred2, Deferred<FirebaseRemoteConfigInterop> deferred3) {
Context applicationContext = firebaseApp.getApplicationContext();
String packageName = applicationContext.getPackageName();
Logger.getLogger().i("Initializing Firebase Crashlytics " + CrashlyticsCore.getVersion() + " for " + packageName);
FileStore fileStore = new FileStore(applicationContext);
DataCollectionArbiter dataCollectionArbiter = new DataCollectionArbiter(firebaseApp);
IdManager idManager = new IdManager(applicationContext, packageName, firebaseInstallationsApi, dataCollectionArbiter);
CrashlyticsNativeComponentDeferredProxy crashlyticsNativeComponentDeferredProxy = new CrashlyticsNativeComponentDeferredProxy(deferred);
AnalyticsDeferredProxy analyticsDeferredProxy = new AnalyticsDeferredProxy(deferred2);
ExecutorService buildSingleThreadExecutorService = ExecutorUtils.buildSingleThreadExecutorService("Crashlytics Exception Handler");
CrashlyticsAppQualitySessionsSubscriber crashlyticsAppQualitySessionsSubscriber = new CrashlyticsAppQualitySessionsSubscriber(dataCollectionArbiter, fileStore);
FirebaseSessionsDependencies.register(crashlyticsAppQualitySessionsSubscriber);
final CrashlyticsCore crashlyticsCore = new CrashlyticsCore(firebaseApp, idManager, crashlyticsNativeComponentDeferredProxy, dataCollectionArbiter, analyticsDeferredProxy.getDeferredBreadcrumbSource(), analyticsDeferredProxy.getAnalyticsEventLogger(), fileStore, buildSingleThreadExecutorService, crashlyticsAppQualitySessionsSubscriber, new RemoteConfigDeferredProxy(deferred3));
String applicationId = firebaseApp.getOptions().getApplicationId();
String mappingFileId = CommonUtils.getMappingFileId(applicationContext);
List<BuildIdInfo> buildIdInfo = CommonUtils.getBuildIdInfo(applicationContext);
Logger.getLogger().d("Mapping file ID is: " + mappingFileId);
for (BuildIdInfo buildIdInfo2 : buildIdInfo) {
Logger.getLogger().d("Build id for " + buildIdInfo2.getLibraryName() + " on " + buildIdInfo2.getArch() + ": " + buildIdInfo2.getBuildId());
}
try {
AppData create = AppData.create(applicationContext, idManager, applicationId, mappingFileId, buildIdInfo, new DevelopmentPlatformProvider(applicationContext));
Logger.getLogger().v("Installer package name is: " + create.installerPackageName);
ExecutorService buildSingleThreadExecutorService2 = ExecutorUtils.buildSingleThreadExecutorService("com.google.firebase.crashlytics.startup");
final SettingsController create2 = SettingsController.create(applicationContext, applicationId, idManager, new HttpRequestFactory(), create.versionCode, create.versionName, fileStore, dataCollectionArbiter);
create2.loadSettingsData(buildSingleThreadExecutorService2).continueWith(buildSingleThreadExecutorService2, new Continuation<Void, Object>() { // from class: com.google.firebase.crashlytics.FirebaseCrashlytics.1
@Override // com.google.android.gms.tasks.Continuation
public Object then(Task<Void> task) throws Exception {
if (task.isSuccessful()) {
return null;
}
Logger.getLogger().e("Error fetching settings.", task.getException());
return null;
}
});
final boolean onPreExecute = crashlyticsCore.onPreExecute(create, create2);
Tasks.call(buildSingleThreadExecutorService2, new Callable<Void>() { // from class: com.google.firebase.crashlytics.FirebaseCrashlytics.2
@Override // java.util.concurrent.Callable
public Void call() throws Exception {
if (!onPreExecute) {
return null;
}
crashlyticsCore.doBackgroundInitializationAsync(create2);
return null;
}
});
return new FirebaseCrashlytics(crashlyticsCore);
} catch (PackageManager.NameNotFoundException e4) {
Logger.getLogger().e("Error retrieving app package info.", e4);
return null;
}
}
public Task<Boolean> checkForUnsentReports() {
return this.core.checkForUnsentReports();
}
public void deleteUnsentReports() {
this.core.deleteUnsentReports();
}
public boolean didCrashOnPreviousExecution() {
return this.core.didCrashOnPreviousExecution();
}
public void log(String str) {
this.core.log(str);
}
public void recordException(Throwable th) {
if (th == null) {
Logger.getLogger().w("A null value was passed to recordException. Ignoring.");
} else {
this.core.logException(th);
}
}
public void sendUnsentReports() {
this.core.sendUnsentReports();
}
public void setCrashlyticsCollectionEnabled(boolean z3) {
this.core.setCrashlyticsCollectionEnabled(Boolean.valueOf(z3));
}
public void setCustomKey(String str, boolean z3) {
this.core.setCustomKey(str, Boolean.toString(z3));
}
public void setCustomKeys(CustomKeysAndValues customKeysAndValues) {
this.core.setCustomKeys(customKeysAndValues.keysAndValues);
}
public void setUserId(String str) {
this.core.setUserId(str);
}
public void setCrashlyticsCollectionEnabled(Boolean bool) {
this.core.setCrashlyticsCollectionEnabled(bool);
}
public void setCustomKey(String str, double d4) {
this.core.setCustomKey(str, Double.toString(d4));
}
public void setCustomKey(String str, float f2) {
this.core.setCustomKey(str, Float.toString(f2));
}
public void setCustomKey(String str, int i) {
this.core.setCustomKey(str, Integer.toString(i));
}
public void setCustomKey(String str, long j4) {
this.core.setCustomKey(str, Long.toString(j4));
}
public void setCustomKey(String str, String str2) {
this.core.setCustomKey(str, str2);
}
}