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,194 @@
package com.google.firebase.sessions;
import android.util.Log;
import com.google.firebase.FirebaseApp;
import com.google.firebase.installations.FirebaseInstallationsApi;
import com.google.firebase.sessions.settings.SessionsSettings;
import kotlin.Metadata;
import kotlin.coroutines.CoroutineContext;
import kotlin.jvm.internal.Intrinsics;
import kotlinx.coroutines.BuildersKt__Builders_commonKt;
import kotlinx.coroutines.CoroutineScopeKt;
@Metadata(d1 = {"\u0000L\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000e\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0002\b\u0003\b\u0000\u0018\u0000 \u001b2\u00020\u0001:\u0001\u001bB-\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0004\u001a\u00020\u0005\u0012\u0006\u0010\u0006\u001a\u00020\u0007\u0012\u0006\u0010\b\u001a\u00020\t\u0012\u0006\u0010\n\u001a\u00020\u000b¢\u0006\u0002\u0010\fJ\u0010\u0010\r\u001a\u00020\u000e2\u0006\u0010\u000f\u001a\u00020\u0010H\u0002J\u0019\u0010\u0011\u001a\n \u0013*\u0004\u0018\u00010\u00120\u0012H\u0082@ø\u0001\u0000¢\u0006\u0002\u0010\u0014J\u0010\u0010\u0015\u001a\u00020\u000e2\u0006\u0010\u0016\u001a\u00020\u0017H\u0016J\b\u0010\u0018\u001a\u00020\u0019H\u0002J\u0011\u0010\u001a\u001a\u00020\u0019H\u0082@ø\u0001\u0000¢\u0006\u0002\u0010\u0014R\u000e\u0010\n\u001a\u00020\u000bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\b\u001a\u00020\tX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0002\u001a\u00020\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0004\u001a\u00020\u0005X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0006\u001a\u00020\u0007X\u0082\u0004¢\u0006\u0002\n\u0000\u0082\u0002\u0004\n\u0002\b\u0019¨\u0006\u001c"}, d2 = {"Lcom/google/firebase/sessions/SessionFirelogPublisherImpl;", "Lcom/google/firebase/sessions/SessionFirelogPublisher;", "firebaseApp", "Lcom/google/firebase/FirebaseApp;", "firebaseInstallations", "Lcom/google/firebase/installations/FirebaseInstallationsApi;", "sessionSettings", "Lcom/google/firebase/sessions/settings/SessionsSettings;", "eventGDTLogger", "Lcom/google/firebase/sessions/EventGDTLoggerInterface;", "backgroundDispatcher", "Lkotlin/coroutines/CoroutineContext;", "(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/sessions/settings/SessionsSettings;Lcom/google/firebase/sessions/EventGDTLoggerInterface;Lkotlin/coroutines/CoroutineContext;)V", "attemptLoggingSessionEvent", "", "sessionEvent", "Lcom/google/firebase/sessions/SessionEvent;", "getFirebaseInstallationId", "", "kotlin.jvm.PlatformType", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "logSession", "sessionDetails", "Lcom/google/firebase/sessions/SessionDetails;", "shouldCollectEvents", "", "shouldLogSession", "Companion", "com.google.firebase-firebase-sessions"}, k = 1, mv = {1, 7, 1}, xi = 48)
/* loaded from: classes3.dex */
public final class SessionFirelogPublisherImpl implements SessionFirelogPublisher {
private static final String TAG = "SessionFirelogPublisher";
private final CoroutineContext backgroundDispatcher;
private final EventGDTLoggerInterface eventGDTLogger;
private final FirebaseApp firebaseApp;
private final FirebaseInstallationsApi firebaseInstallations;
private final SessionsSettings sessionSettings;
private static final double randomValueForSampling = Math.random();
public SessionFirelogPublisherImpl(FirebaseApp firebaseApp, FirebaseInstallationsApi firebaseInstallations, SessionsSettings sessionSettings, EventGDTLoggerInterface eventGDTLogger, CoroutineContext backgroundDispatcher) {
Intrinsics.checkNotNullParameter(firebaseApp, "firebaseApp");
Intrinsics.checkNotNullParameter(firebaseInstallations, "firebaseInstallations");
Intrinsics.checkNotNullParameter(sessionSettings, "sessionSettings");
Intrinsics.checkNotNullParameter(eventGDTLogger, "eventGDTLogger");
Intrinsics.checkNotNullParameter(backgroundDispatcher, "backgroundDispatcher");
this.firebaseApp = firebaseApp;
this.firebaseInstallations = firebaseInstallations;
this.sessionSettings = sessionSettings;
this.eventGDTLogger = eventGDTLogger;
this.backgroundDispatcher = backgroundDispatcher;
}
/* JADX INFO: Access modifiers changed from: private */
public final void attemptLoggingSessionEvent(SessionEvent sessionEvent) {
try {
this.eventGDTLogger.log(sessionEvent);
Log.d(TAG, "Successfully logged Session Start event: " + sessionEvent.getSessionData().getSessionId());
} catch (RuntimeException e4) {
Log.e(TAG, "Error logging Session Start event to DataTransport: ", e4);
}
}
/* JADX INFO: Access modifiers changed from: private */
/* JADX WARN: Removed duplicated region for block: B:17:0x0031 */
/* JADX WARN: Removed duplicated region for block: B:9:0x0023 */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public final java.lang.Object getFirebaseInstallationId(kotlin.coroutines.Continuation<? super java.lang.String> r5) {
/*
r4 = this;
boolean r0 = r5 instanceof com.google.firebase.sessions.SessionFirelogPublisherImpl$getFirebaseInstallationId$1
if (r0 == 0) goto L13
r0 = r5
com.google.firebase.sessions.SessionFirelogPublisherImpl$getFirebaseInstallationId$1 r0 = (com.google.firebase.sessions.SessionFirelogPublisherImpl$getFirebaseInstallationId$1) r0
int r1 = r0.label
r2 = -2147483648(0xffffffff80000000, float:-0.0)
r3 = r1 & r2
if (r3 == 0) goto L13
int r1 = r1 - r2
r0.label = r1
goto L18
L13:
com.google.firebase.sessions.SessionFirelogPublisherImpl$getFirebaseInstallationId$1 r0 = new com.google.firebase.sessions.SessionFirelogPublisherImpl$getFirebaseInstallationId$1
r0.<init>(r4, r5)
L18:
java.lang.Object r5 = r0.result
java.lang.Object r1 = kotlin.coroutines.intrinsics.IntrinsicsKt.getCOROUTINE_SUSPENDED()
int r2 = r0.label
r3 = 1
if (r2 == 0) goto L31
if (r2 != r3) goto L29
kotlin.ResultKt.throwOnFailure(r5) // Catch: java.lang.Exception -> L4b
goto L48
L29:
java.lang.IllegalStateException r4 = new java.lang.IllegalStateException
java.lang.String r5 = "call to 'resume' before 'invoke' with coroutine"
r4.<init>(r5)
throw r4
L31:
kotlin.ResultKt.throwOnFailure(r5)
com.google.firebase.installations.FirebaseInstallationsApi r4 = r4.firebaseInstallations // Catch: java.lang.Exception -> L4b
com.google.android.gms.tasks.Task r4 = r4.getId() // Catch: java.lang.Exception -> L4b
java.lang.String r5 = "firebaseInstallations.id"
kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r4, r5) // Catch: java.lang.Exception -> L4b
r0.label = r3 // Catch: java.lang.Exception -> L4b
java.lang.Object r5 = kotlinx.coroutines.tasks.TasksKt.await(r4, r0) // Catch: java.lang.Exception -> L4b
if (r5 != r1) goto L48
return r1
L48:
java.lang.String r5 = (java.lang.String) r5 // Catch: java.lang.Exception -> L4b
return r5
L4b:
r4 = move-exception
java.lang.String r5 = "SessionFirelogPublisher"
java.lang.String r0 = "Error getting Firebase Installation ID. Using an empty ID"
android.util.Log.e(r5, r0, r4)
java.lang.String r4 = ""
return r4
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.firebase.sessions.SessionFirelogPublisherImpl.getFirebaseInstallationId(kotlin.coroutines.Continuation):java.lang.Object");
}
private final boolean shouldCollectEvents() {
return randomValueForSampling <= this.sessionSettings.getSamplingRate();
}
/* JADX INFO: Access modifiers changed from: private */
/* JADX WARN: Removed duplicated region for block: B:12:0x0055 */
/* JADX WARN: Removed duplicated region for block: B:15:0x005f */
/* JADX WARN: Removed duplicated region for block: B:23:0x0037 */
/* JADX WARN: Removed duplicated region for block: B:8:0x0025 */
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public final java.lang.Object shouldLogSession(kotlin.coroutines.Continuation<? super java.lang.Boolean> r6) {
/*
r5 = this;
boolean r0 = r6 instanceof com.google.firebase.sessions.SessionFirelogPublisherImpl$shouldLogSession$1
if (r0 == 0) goto L13
r0 = r6
com.google.firebase.sessions.SessionFirelogPublisherImpl$shouldLogSession$1 r0 = (com.google.firebase.sessions.SessionFirelogPublisherImpl$shouldLogSession$1) r0
int r1 = r0.label
r2 = -2147483648(0xffffffff80000000, float:-0.0)
r3 = r1 & r2
if (r3 == 0) goto L13
int r1 = r1 - r2
r0.label = r1
goto L18
L13:
com.google.firebase.sessions.SessionFirelogPublisherImpl$shouldLogSession$1 r0 = new com.google.firebase.sessions.SessionFirelogPublisherImpl$shouldLogSession$1
r0.<init>(r5, r6)
L18:
java.lang.Object r6 = r0.result
java.lang.Object r1 = kotlin.coroutines.intrinsics.IntrinsicsKt.getCOROUTINE_SUSPENDED()
int r2 = r0.label
java.lang.String r3 = "SessionFirelogPublisher"
r4 = 1
if (r2 == 0) goto L37
if (r2 != r4) goto L2f
java.lang.Object r5 = r0.L$0
com.google.firebase.sessions.SessionFirelogPublisherImpl r5 = (com.google.firebase.sessions.SessionFirelogPublisherImpl) r5
kotlin.ResultKt.throwOnFailure(r6)
goto L4c
L2f:
java.lang.IllegalStateException r5 = new java.lang.IllegalStateException
java.lang.String r6 = "call to 'resume' before 'invoke' with coroutine"
r5.<init>(r6)
throw r5
L37:
kotlin.ResultKt.throwOnFailure(r6)
java.lang.String r6 = "Data Collection is enabled for at least one Subscriber"
android.util.Log.d(r3, r6)
com.google.firebase.sessions.settings.SessionsSettings r6 = r5.sessionSettings
r0.L$0 = r5
r0.label = r4
java.lang.Object r6 = r6.updateSettings(r0)
if (r6 != r1) goto L4c
return r1
L4c:
com.google.firebase.sessions.settings.SessionsSettings r6 = r5.sessionSettings
boolean r6 = r6.getSessionsEnabled()
r0 = 0
if (r6 != 0) goto L5f
java.lang.String r5 = "Sessions SDK disabled. Events will not be sent."
android.util.Log.d(r3, r5)
java.lang.Boolean r5 = kotlin.coroutines.jvm.internal.Boxing.boxBoolean(r0)
return r5
L5f:
boolean r5 = r5.shouldCollectEvents()
if (r5 != 0) goto L6f
java.lang.String r5 = "Sessions SDK has dropped this session due to sampling."
android.util.Log.d(r3, r5)
java.lang.Boolean r5 = kotlin.coroutines.jvm.internal.Boxing.boxBoolean(r0)
return r5
L6f:
java.lang.Boolean r5 = kotlin.coroutines.jvm.internal.Boxing.boxBoolean(r4)
return r5
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.firebase.sessions.SessionFirelogPublisherImpl.shouldLogSession(kotlin.coroutines.Continuation):java.lang.Object");
}
@Override // com.google.firebase.sessions.SessionFirelogPublisher
public void logSession(SessionDetails sessionDetails) {
Intrinsics.checkNotNullParameter(sessionDetails, "sessionDetails");
BuildersKt__Builders_commonKt.launch$default(CoroutineScopeKt.CoroutineScope(this.backgroundDispatcher), null, null, new SessionFirelogPublisherImpl$logSession$1(this, sessionDetails, null), 3, null);
}
}