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:
@@ -0,0 +1,8 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public interface AnalyticsEventLogger {
|
||||
void logEvent(String str, Bundle bundle);
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public interface AnalyticsEventReceiver {
|
||||
void onEvent(String str, Bundle bundle);
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.google.firebase.crashlytics.internal.Logger;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class BlockingAnalyticsEventLogger implements AnalyticsEventReceiver, AnalyticsEventLogger {
|
||||
static final String APP_EXCEPTION_EVENT_NAME = "_ae";
|
||||
private final CrashlyticsOriginAnalyticsEventLogger baseAnalyticsEventLogger;
|
||||
private CountDownLatch eventLatch;
|
||||
private final TimeUnit timeUnit;
|
||||
private final int timeout;
|
||||
private final Object latchLock = new Object();
|
||||
private boolean callbackReceived = false;
|
||||
|
||||
public BlockingAnalyticsEventLogger(CrashlyticsOriginAnalyticsEventLogger crashlyticsOriginAnalyticsEventLogger, int i, TimeUnit timeUnit) {
|
||||
this.baseAnalyticsEventLogger = crashlyticsOriginAnalyticsEventLogger;
|
||||
this.timeout = i;
|
||||
this.timeUnit = timeUnit;
|
||||
}
|
||||
|
||||
public boolean isCallbackReceived() {
|
||||
return this.callbackReceived;
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.analytics.AnalyticsEventLogger
|
||||
public void logEvent(String str, Bundle bundle) {
|
||||
synchronized (this.latchLock) {
|
||||
try {
|
||||
Logger.getLogger().v("Logging event " + str + " to Firebase Analytics with params " + bundle);
|
||||
this.eventLatch = new CountDownLatch(1);
|
||||
this.callbackReceived = false;
|
||||
this.baseAnalyticsEventLogger.logEvent(str, bundle);
|
||||
Logger.getLogger().v("Awaiting app exception callback from Analytics...");
|
||||
try {
|
||||
if (this.eventLatch.await(this.timeout, this.timeUnit)) {
|
||||
this.callbackReceived = true;
|
||||
Logger.getLogger().v("App exception callback received from Analytics listener.");
|
||||
} else {
|
||||
Logger.getLogger().w("Timeout exceeded while awaiting app exception callback from Analytics listener.");
|
||||
}
|
||||
} catch (InterruptedException unused) {
|
||||
Logger.getLogger().e("Interrupted while awaiting app exception callback from Analytics listener.");
|
||||
}
|
||||
this.eventLatch = null;
|
||||
} catch (Throwable th) {
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.analytics.AnalyticsEventReceiver
|
||||
public void onEvent(String str, Bundle bundle) {
|
||||
CountDownLatch countDownLatch = this.eventLatch;
|
||||
if (countDownLatch != null && APP_EXCEPTION_EVENT_NAME.equals(str)) {
|
||||
countDownLatch.countDown();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.google.firebase.crashlytics.internal.Logger;
|
||||
import com.google.firebase.crashlytics.internal.breadcrumbs.BreadcrumbHandler;
|
||||
import com.google.firebase.crashlytics.internal.breadcrumbs.BreadcrumbSource;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class BreadcrumbAnalyticsEventReceiver implements AnalyticsEventReceiver, BreadcrumbSource {
|
||||
private static final String BREADCRUMB_NAME_KEY = "name";
|
||||
private static final String BREADCRUMB_PARAMS_KEY = "parameters";
|
||||
private static final String BREADCRUMB_PREFIX = "$A$:";
|
||||
private BreadcrumbHandler breadcrumbHandler;
|
||||
|
||||
private static String serializeEvent(String str, Bundle bundle) throws JSONException {
|
||||
JSONObject jSONObject = new JSONObject();
|
||||
JSONObject jSONObject2 = new JSONObject();
|
||||
for (String str2 : bundle.keySet()) {
|
||||
jSONObject2.put(str2, bundle.get(str2));
|
||||
}
|
||||
jSONObject.put("name", str);
|
||||
jSONObject.put("parameters", jSONObject2);
|
||||
return jSONObject.toString();
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.analytics.AnalyticsEventReceiver
|
||||
public void onEvent(String str, Bundle bundle) {
|
||||
BreadcrumbHandler breadcrumbHandler = this.breadcrumbHandler;
|
||||
if (breadcrumbHandler != null) {
|
||||
try {
|
||||
breadcrumbHandler.handleBreadcrumb(BREADCRUMB_PREFIX + serializeEvent(str, bundle));
|
||||
} catch (JSONException unused) {
|
||||
Logger.getLogger().w("Unable to serialize Firebase Analytics event to breadcrumb.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.breadcrumbs.BreadcrumbSource
|
||||
public void registerBreadcrumbHandler(BreadcrumbHandler breadcrumbHandler) {
|
||||
this.breadcrumbHandler = breadcrumbHandler;
|
||||
Logger.getLogger().d("Registered Firebase Analytics event receiver for breadcrumbs");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.google.firebase.analytics.connector.AnalyticsConnector;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class CrashlyticsOriginAnalyticsEventLogger implements AnalyticsEventLogger {
|
||||
static final String FIREBASE_ANALYTICS_ORIGIN_CRASHLYTICS = "clx";
|
||||
private final AnalyticsConnector analyticsConnector;
|
||||
|
||||
public CrashlyticsOriginAnalyticsEventLogger(AnalyticsConnector analyticsConnector) {
|
||||
this.analyticsConnector = analyticsConnector;
|
||||
}
|
||||
|
||||
@Override // com.google.firebase.crashlytics.internal.analytics.AnalyticsEventLogger
|
||||
public void logEvent(String str, Bundle bundle) {
|
||||
this.analyticsConnector.logEvent(FIREBASE_ANALYTICS_ORIGIN_CRASHLYTICS, str, bundle);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.google.firebase.crashlytics.internal.analytics;
|
||||
|
||||
import android.os.Bundle;
|
||||
import com.google.firebase.crashlytics.internal.Logger;
|
||||
|
||||
/* loaded from: classes3.dex */
|
||||
public class UnavailableAnalyticsEventLogger implements AnalyticsEventLogger {
|
||||
@Override // com.google.firebase.crashlytics.internal.analytics.AnalyticsEventLogger
|
||||
public void logEvent(String str, Bundle bundle) {
|
||||
Logger.getLogger().d("Skipping logging Crashlytics event to Firebase, no Firebase Analytics");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user