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,534 @@
package com.google.firebase.messaging;
import android.annotation.SuppressLint;
import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.Keep;
import com.google.android.gms.common.internal.Preconditions;
import com.google.android.gms.common.util.concurrent.NamedThreadFactory;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.TaskCompletionSource;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.DataCollectionDefaultChange;
import com.google.firebase.FirebaseApp;
import com.google.firebase.events.Event;
import com.google.firebase.events.EventHandler;
import com.google.firebase.events.Subscriber;
import com.google.firebase.heartbeatinfo.HeartBeatInfo;
import com.google.firebase.iid.internal.FirebaseInstanceIdInternal;
import com.google.firebase.inject.Provider;
import com.google.firebase.installations.FirebaseInstallationsApi;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Store;
import com.google.firebase.platforminfo.UserAgentPublisher;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/* loaded from: classes3.dex */
public class FirebaseMessaging {
private static final String EXTRA_DUMMY_P_INTENT = "app";
static final String GMS_PACKAGE = "com.google.android.gms";
@Deprecated
public static final String INSTANCE_ID_SCOPE = "FCM";
private static final long MAX_DELAY_SEC = TimeUnit.HOURS.toSeconds(8);
private static final long MIN_DELAY_SEC = 30;
private static final String SEND_INTENT_ACTION = "com.google.android.gcm.intent.SEND";
private static final String SUBTYPE_DEFAULT = "";
static final String TAG = "FirebaseMessaging";
private static Store store;
static ScheduledExecutorService syncExecutor;
@SuppressLint({"FirebaseUnknownNullness"})
static T1.g transportFactory;
private final AutoInit autoInit;
private final Context context;
private final Executor fileExecutor;
private final FirebaseApp firebaseApp;
private final FirebaseInstallationsApi fis;
private final GmsRpc gmsRpc;
private final FirebaseInstanceIdInternal iid;
private final Executor initExecutor;
private final Application.ActivityLifecycleCallbacks lifecycleCallbacks;
private final Metadata metadata;
private final RequestDeduplicator requestDeduplicator;
private boolean syncScheduledOrRunning;
private final Executor taskExecutor;
private final Task<TopicsSubscriber> topicsSubscriberTask;
/* loaded from: classes3.dex */
public class AutoInit {
private static final String AUTO_INIT_PREF = "auto_init";
private static final String FCM_PREFERENCES = "com.google.firebase.messaging";
private static final String MANIFEST_METADATA_AUTO_INIT_ENABLED = "firebase_messaging_auto_init_enabled";
private Boolean autoInitEnabled;
private EventHandler<DataCollectionDefaultChange> dataCollectionDefaultChangeEventHandler;
private boolean initialized;
private final Subscriber subscriber;
public AutoInit(Subscriber subscriber) {
this.subscriber = subscriber;
}
public /* synthetic */ void lambda$initialize$0(Event event) {
if (isEnabled()) {
FirebaseMessaging.this.startSyncIfNecessary();
}
}
private Boolean readEnabled() {
ApplicationInfo applicationInfo;
Bundle bundle;
Context applicationContext = FirebaseMessaging.this.firebaseApp.getApplicationContext();
SharedPreferences sharedPreferences = applicationContext.getSharedPreferences("com.google.firebase.messaging", 0);
if (sharedPreferences.contains(AUTO_INIT_PREF)) {
return Boolean.valueOf(sharedPreferences.getBoolean(AUTO_INIT_PREF, false));
}
try {
PackageManager packageManager = applicationContext.getPackageManager();
if (packageManager == null || (applicationInfo = packageManager.getApplicationInfo(applicationContext.getPackageName(), 128)) == null || (bundle = applicationInfo.metaData) == null || !bundle.containsKey(MANIFEST_METADATA_AUTO_INIT_ENABLED)) {
return null;
}
return Boolean.valueOf(applicationInfo.metaData.getBoolean(MANIFEST_METADATA_AUTO_INIT_ENABLED));
} catch (PackageManager.NameNotFoundException unused) {
return null;
}
}
public synchronized void initialize() {
try {
if (this.initialized) {
return;
}
Boolean readEnabled = readEnabled();
this.autoInitEnabled = readEnabled;
if (readEnabled == null) {
EventHandler<DataCollectionDefaultChange> eventHandler = new EventHandler() { // from class: com.google.firebase.messaging.j
@Override // com.google.firebase.events.EventHandler
public final void handle(Event event) {
FirebaseMessaging.AutoInit.this.lambda$initialize$0(event);
}
};
this.dataCollectionDefaultChangeEventHandler = eventHandler;
this.subscriber.subscribe(DataCollectionDefaultChange.class, eventHandler);
}
this.initialized = true;
} catch (Throwable th) {
throw th;
}
}
public synchronized boolean isEnabled() {
Boolean bool;
try {
initialize();
bool = this.autoInitEnabled;
} catch (Throwable th) {
throw th;
}
return bool != null ? bool.booleanValue() : FirebaseMessaging.this.firebaseApp.isDataCollectionDefaultEnabled();
}
public synchronized void setEnabled(boolean z3) {
try {
initialize();
EventHandler<DataCollectionDefaultChange> eventHandler = this.dataCollectionDefaultChangeEventHandler;
if (eventHandler != null) {
this.subscriber.unsubscribe(DataCollectionDefaultChange.class, eventHandler);
this.dataCollectionDefaultChangeEventHandler = null;
}
SharedPreferences.Editor edit = FirebaseMessaging.this.firebaseApp.getApplicationContext().getSharedPreferences("com.google.firebase.messaging", 0).edit();
edit.putBoolean(AUTO_INIT_PREF, z3);
edit.apply();
if (z3) {
FirebaseMessaging.this.startSyncIfNecessary();
}
this.autoInitEnabled = Boolean.valueOf(z3);
} catch (Throwable th) {
throw th;
}
}
}
public FirebaseMessaging(FirebaseApp firebaseApp, FirebaseInstanceIdInternal firebaseInstanceIdInternal, Provider<UserAgentPublisher> provider, Provider<HeartBeatInfo> provider2, FirebaseInstallationsApi firebaseInstallationsApi, T1.g gVar, Subscriber subscriber) {
this(firebaseApp, firebaseInstanceIdInternal, provider, provider2, firebaseInstallationsApi, gVar, subscriber, new Metadata(firebaseApp.getApplicationContext()));
}
public static synchronized void clearStoreForTest() {
synchronized (FirebaseMessaging.class) {
store = null;
}
}
public static void clearTransportFactoryForTest() {
transportFactory = null;
}
public static synchronized FirebaseMessaging getInstance() {
FirebaseMessaging firebaseMessaging;
synchronized (FirebaseMessaging.class) {
firebaseMessaging = getInstance(FirebaseApp.getInstance());
}
return firebaseMessaging;
}
private static synchronized Store getStore(Context context) {
Store store2;
synchronized (FirebaseMessaging.class) {
try {
if (store == null) {
store = new Store(context);
}
store2 = store;
} catch (Throwable th) {
throw th;
}
}
return store2;
}
private String getSubtype() {
return FirebaseApp.DEFAULT_APP_NAME.equals(this.firebaseApp.getName()) ? "" : this.firebaseApp.getPersistenceKey();
}
public static T1.g getTransportFactory() {
return transportFactory;
}
/* renamed from: invokeOnTokenRefresh */
public void lambda$new$0(String str) {
if (FirebaseApp.DEFAULT_APP_NAME.equals(this.firebaseApp.getName())) {
if (Log.isLoggable("FirebaseMessaging", 3)) {
Log.d("FirebaseMessaging", "Invoking onNewToken for app: " + this.firebaseApp.getName());
}
Intent intent = new Intent("com.google.firebase.messaging.NEW_TOKEN");
intent.putExtra("token", str);
new FcmBroadcastProcessor(this.context).process(intent);
}
}
public /* synthetic */ Task lambda$blockingGetToken$10(String str, Store.Token token) {
return this.gmsRpc.getToken().onSuccessTask(this.fileExecutor, new f(this, str, token));
}
public /* synthetic */ Task lambda$blockingGetToken$9(String str, Store.Token token, String str2) throws Exception {
getStore(this.context).saveToken(getSubtype(), str, str2, this.metadata.getAppVersionCode());
if (token == null || !str2.equals(token.token)) {
lambda$new$0(str2);
}
return Tasks.forResult(str2);
}
public /* synthetic */ void lambda$deleteToken$5(TaskCompletionSource taskCompletionSource) {
try {
this.iid.deleteToken(Metadata.getDefaultSenderId(this.firebaseApp), INSTANCE_ID_SCOPE);
taskCompletionSource.setResult(null);
} catch (Exception e4) {
taskCompletionSource.setException(e4);
}
}
public /* synthetic */ void lambda$deleteToken$6(TaskCompletionSource taskCompletionSource) {
try {
Tasks.await(this.gmsRpc.deleteToken());
getStore(this.context).deleteToken(getSubtype(), Metadata.getDefaultSenderId(this.firebaseApp));
taskCompletionSource.setResult(null);
} catch (Exception e4) {
taskCompletionSource.setException(e4);
}
}
public /* synthetic */ void lambda$getToken$4(TaskCompletionSource taskCompletionSource) {
try {
taskCompletionSource.setResult(blockingGetToken());
} catch (Exception e4) {
taskCompletionSource.setException(e4);
}
}
public /* synthetic */ void lambda$new$1() {
if (isAutoInitEnabled()) {
startSyncIfNecessary();
}
}
public /* synthetic */ void lambda$new$2(TopicsSubscriber topicsSubscriber) {
if (isAutoInitEnabled()) {
topicsSubscriber.startTopicsSyncIfNecessary();
}
}
public /* synthetic */ void lambda$new$3() {
ProxyNotificationInitializer.initialize(this.context);
}
public static /* synthetic */ Task lambda$subscribeToTopic$7(String str, TopicsSubscriber topicsSubscriber) throws Exception {
return topicsSubscriber.subscribeToTopic(str);
}
public static /* synthetic */ Task lambda$unsubscribeFromTopic$8(String str, TopicsSubscriber topicsSubscriber) throws Exception {
return topicsSubscriber.unsubscribeFromTopic(str);
}
private synchronized void startSync() {
if (!this.syncScheduledOrRunning) {
syncWithDelaySecondsInternal(0L);
}
}
public void startSyncIfNecessary() {
FirebaseInstanceIdInternal firebaseInstanceIdInternal = this.iid;
if (firebaseInstanceIdInternal != null) {
firebaseInstanceIdInternal.getToken();
} else if (tokenNeedsRefresh(getTokenWithoutTriggeringSync())) {
startSync();
}
}
public String blockingGetToken() throws IOException {
FirebaseInstanceIdInternal firebaseInstanceIdInternal = this.iid;
if (firebaseInstanceIdInternal != null) {
try {
return (String) Tasks.await(firebaseInstanceIdInternal.getTokenTask());
} catch (InterruptedException | ExecutionException e4) {
throw new IOException(e4);
}
}
Store.Token tokenWithoutTriggeringSync = getTokenWithoutTriggeringSync();
if (!tokenNeedsRefresh(tokenWithoutTriggeringSync)) {
return tokenWithoutTriggeringSync.token;
}
String defaultSenderId = Metadata.getDefaultSenderId(this.firebaseApp);
try {
return (String) Tasks.await(this.requestDeduplicator.getOrStartGetTokenRequest(defaultSenderId, new f(this, defaultSenderId, tokenWithoutTriggeringSync)));
} catch (InterruptedException | ExecutionException e5) {
throw new IOException(e5);
}
}
public Task<Void> deleteToken() {
if (this.iid != null) {
TaskCompletionSource taskCompletionSource = new TaskCompletionSource();
this.initExecutor.execute(new i(this, taskCompletionSource, 1));
return taskCompletionSource.getTask();
}
if (getTokenWithoutTriggeringSync() == null) {
return Tasks.forResult(null);
}
TaskCompletionSource taskCompletionSource2 = new TaskCompletionSource();
FcmExecutors.newNetworkIOExecutor().execute(new i(this, taskCompletionSource2, 2));
return taskCompletionSource2.getTask();
}
public boolean deliveryMetricsExportToBigQueryEnabled() {
return MessagingAnalytics.deliveryMetricsExportToBigQueryEnabled();
}
@SuppressLint({"ThreadPoolCreation"})
public void enqueueTaskWithDelaySeconds(Runnable runnable, long j4) {
synchronized (FirebaseMessaging.class) {
try {
if (syncExecutor == null) {
syncExecutor = new ScheduledThreadPoolExecutor(1, new NamedThreadFactory("TAG"));
}
syncExecutor.schedule(runnable, j4, TimeUnit.SECONDS);
} catch (Throwable th) {
throw th;
}
}
}
public Context getApplicationContext() {
return this.context;
}
public Task<String> getToken() {
FirebaseInstanceIdInternal firebaseInstanceIdInternal = this.iid;
if (firebaseInstanceIdInternal != null) {
return firebaseInstanceIdInternal.getTokenTask();
}
TaskCompletionSource taskCompletionSource = new TaskCompletionSource();
this.initExecutor.execute(new i(this, taskCompletionSource, 0));
return taskCompletionSource.getTask();
}
public Store.Token getTokenWithoutTriggeringSync() {
return getStore(this.context).getToken(getSubtype(), Metadata.getDefaultSenderId(this.firebaseApp));
}
public Task<TopicsSubscriber> getTopicsSubscriberTask() {
return this.topicsSubscriberTask;
}
public boolean isAutoInitEnabled() {
return this.autoInit.isEnabled();
}
public boolean isGmsCorePresent() {
return this.metadata.isGmscorePresent();
}
public boolean isNotificationDelegationEnabled() {
return ProxyNotificationInitializer.isProxyNotificationEnabled(this.context);
}
@Deprecated
public void send(RemoteMessage remoteMessage) {
if (TextUtils.isEmpty(remoteMessage.getTo())) {
throw new IllegalArgumentException("Missing 'to'");
}
Intent intent = new Intent(SEND_INTENT_ACTION);
Intent intent2 = new Intent();
intent2.setPackage("com.google.example.invalidpackage");
intent.putExtra(EXTRA_DUMMY_P_INTENT, PendingIntent.getBroadcast(this.context, 0, intent2, 67108864));
intent.setPackage("com.google.android.gms");
remoteMessage.populateSendMessageIntent(intent);
this.context.sendOrderedBroadcast(intent, "com.google.android.gtalkservice.permission.GTALK_SERVICE");
}
public void setAutoInitEnabled(boolean z3) {
this.autoInit.setEnabled(z3);
}
public void setDeliveryMetricsExportToBigQuery(boolean z3) {
MessagingAnalytics.setDeliveryMetricsExportToBigQuery(z3);
}
public Task<Void> setNotificationDelegationEnabled(boolean z3) {
return ProxyNotificationInitializer.setEnableProxyNotification(this.initExecutor, this.context, z3);
}
public synchronized void setSyncScheduledOrRunning(boolean z3) {
this.syncScheduledOrRunning = z3;
}
@SuppressLint({"TaskMainThread"})
public Task<Void> subscribeToTopic(String str) {
return this.topicsSubscriberTask.onSuccessTask(new e(str, 0));
}
public synchronized void syncWithDelaySecondsInternal(long j4) {
enqueueTaskWithDelaySeconds(new SyncTask(this, Math.min(Math.max(MIN_DELAY_SEC, 2 * j4), MAX_DELAY_SEC)), j4);
this.syncScheduledOrRunning = true;
}
public boolean tokenNeedsRefresh(Store.Token token) {
return token == null || token.needsRefresh(this.metadata.getAppVersionCode());
}
@SuppressLint({"TaskMainThread"})
public Task<Void> unsubscribeFromTopic(String str) {
return this.topicsSubscriberTask.onSuccessTask(new e(str, 1));
}
@Keep
public static synchronized FirebaseMessaging getInstance(FirebaseApp firebaseApp) {
FirebaseMessaging firebaseMessaging;
synchronized (FirebaseMessaging.class) {
firebaseMessaging = (FirebaseMessaging) firebaseApp.get(FirebaseMessaging.class);
Preconditions.checkNotNull(firebaseMessaging, "Firebase Messaging component is not present");
}
return firebaseMessaging;
}
public FirebaseMessaging(FirebaseApp firebaseApp, FirebaseInstanceIdInternal firebaseInstanceIdInternal, Provider<UserAgentPublisher> provider, Provider<HeartBeatInfo> provider2, FirebaseInstallationsApi firebaseInstallationsApi, T1.g gVar, Subscriber subscriber, Metadata metadata) {
this(firebaseApp, firebaseInstanceIdInternal, firebaseInstallationsApi, gVar, subscriber, metadata, new GmsRpc(firebaseApp, metadata, provider, provider2, firebaseInstallationsApi), FcmExecutors.newTaskExecutor(), FcmExecutors.newInitExecutor(), FcmExecutors.newFileIOExecutor());
}
public FirebaseMessaging(FirebaseApp firebaseApp, FirebaseInstanceIdInternal firebaseInstanceIdInternal, FirebaseInstallationsApi firebaseInstallationsApi, T1.g gVar, Subscriber subscriber, Metadata metadata, GmsRpc gmsRpc, Executor executor, Executor executor2, Executor executor3) {
this.syncScheduledOrRunning = false;
transportFactory = gVar;
this.firebaseApp = firebaseApp;
this.iid = firebaseInstanceIdInternal;
this.fis = firebaseInstallationsApi;
this.autoInit = new AutoInit(subscriber);
Context applicationContext = firebaseApp.getApplicationContext();
this.context = applicationContext;
FcmLifecycleCallbacks fcmLifecycleCallbacks = new FcmLifecycleCallbacks();
this.lifecycleCallbacks = fcmLifecycleCallbacks;
this.metadata = metadata;
this.taskExecutor = executor;
this.gmsRpc = gmsRpc;
this.requestDeduplicator = new RequestDeduplicator(executor);
this.initExecutor = executor2;
this.fileExecutor = executor3;
Context applicationContext2 = firebaseApp.getApplicationContext();
if (applicationContext2 instanceof Application) {
((Application) applicationContext2).registerActivityLifecycleCallbacks(fcmLifecycleCallbacks);
} else {
Log.w("FirebaseMessaging", "Context " + applicationContext2 + " was not an application, can't register for lifecycle callbacks. Some notification events may be dropped as a result.");
}
if (firebaseInstanceIdInternal != null) {
firebaseInstanceIdInternal.addNewTokenListener(new k(this));
}
final int i = 0;
executor2.execute(new Runnable(this) { // from class: com.google.firebase.messaging.g
/* renamed from: b, reason: collision with root package name */
public final /* synthetic */ FirebaseMessaging f6011b;
{
this.f6011b = this;
}
@Override // java.lang.Runnable
public final void run() {
int i4 = i;
FirebaseMessaging firebaseMessaging = this.f6011b;
switch (i4) {
case 0:
firebaseMessaging.lambda$new$1();
return;
default:
firebaseMessaging.lambda$new$3();
return;
}
}
});
Task<TopicsSubscriber> createInstance = TopicsSubscriber.createInstance(this, metadata, gmsRpc, applicationContext, FcmExecutors.newTopicsSyncExecutor());
this.topicsSubscriberTask = createInstance;
createInstance.addOnSuccessListener(executor2, new OnSuccessListener() { // from class: com.google.firebase.messaging.h
@Override // com.google.android.gms.tasks.OnSuccessListener
public final void onSuccess(Object obj) {
FirebaseMessaging.this.lambda$new$2((TopicsSubscriber) obj);
}
});
final int i4 = 1;
executor2.execute(new Runnable(this) { // from class: com.google.firebase.messaging.g
/* renamed from: b, reason: collision with root package name */
public final /* synthetic */ FirebaseMessaging f6011b;
{
this.f6011b = this;
}
@Override // java.lang.Runnable
public final void run() {
int i42 = i4;
FirebaseMessaging firebaseMessaging = this.f6011b;
switch (i42) {
case 0:
firebaseMessaging.lambda$new$1();
return;
default:
firebaseMessaging.lambda$new$3();
return;
}
}
});
}
}