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,297 @@
package com.google.firebase.concurrent;
import com.google.android.gms.common.internal.Preconditions;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.concurrent.Executor;
import java.util.logging.Logger;
/* JADX INFO: Access modifiers changed from: package-private */
/* loaded from: classes3.dex */
public final class SequentialExecutor implements Executor {
private static final Logger log = Logger.getLogger(SequentialExecutor.class.getName());
private final Executor executor;
private final Deque<Runnable> queue = new ArrayDeque();
private WorkerRunningState workerRunningState = WorkerRunningState.IDLE;
private long workerRunCount = 0;
private final QueueWorker worker = new QueueWorker();
/* loaded from: classes3.dex */
public final class QueueWorker implements Runnable {
Runnable task;
private QueueWorker() {
}
/* JADX WARN: Code restructure failed: missing block: B:10:0x004e, code lost:
r1 = r1 | java.lang.Thread.interrupted();
r2 = null;
*/
/* JADX WARN: Code restructure failed: missing block: B:12:0x0050, code lost:
r8.task.run();
*/
/* JADX WARN: Code restructure failed: missing block: B:16:0x005a, code lost:
r0 = move-exception;
*/
/* JADX WARN: Code restructure failed: missing block: B:17:0x007a, code lost:
r8.task = null;
*/
/* JADX WARN: Code restructure failed: missing block: B:18:0x007c, code lost:
throw r0;
*/
/* JADX WARN: Code restructure failed: missing block: B:20:0x005c, code lost:
r3 = move-exception;
*/
/* JADX WARN: Code restructure failed: missing block: B:21:0x005d, code lost:
com.google.firebase.concurrent.SequentialExecutor.log.log(java.util.logging.Level.SEVERE, "Exception while executing runnable " + r8.task, (java.lang.Throwable) r3);
*/
/* JADX WARN: Code restructure failed: missing block: B:26:0x0045, code lost:
if (r1 == false) goto L50;
*/
/* JADX WARN: Code restructure failed: missing block: B:30:?, code lost:
return;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
private void workOnQueue() {
/*
r8 = this;
r0 = 0
r1 = r0
L2:
com.google.firebase.concurrent.SequentialExecutor r2 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L58
java.util.Deque r2 = com.google.firebase.concurrent.SequentialExecutor.access$100(r2) // Catch: java.lang.Throwable -> L58
monitor-enter(r2) // Catch: java.lang.Throwable -> L58
if (r0 != 0) goto L2d
com.google.firebase.concurrent.SequentialExecutor r0 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r0 = com.google.firebase.concurrent.SequentialExecutor.access$200(r0) // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.RUNNING // Catch: java.lang.Throwable -> L20
if (r0 != r3) goto L22
monitor-exit(r2) // Catch: java.lang.Throwable -> L20
if (r1 == 0) goto L48
L18:
java.lang.Thread r8 = java.lang.Thread.currentThread()
r8.interrupt()
goto L48
L20:
r8 = move-exception
goto L7d
L22:
com.google.firebase.concurrent.SequentialExecutor r0 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor.access$308(r0) // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor r0 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor.access$202(r0, r3) // Catch: java.lang.Throwable -> L20
r0 = 1
L2d:
com.google.firebase.concurrent.SequentialExecutor r3 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L20
java.util.Deque r3 = com.google.firebase.concurrent.SequentialExecutor.access$100(r3) // Catch: java.lang.Throwable -> L20
java.lang.Object r3 = r3.poll() // Catch: java.lang.Throwable -> L20
java.lang.Runnable r3 = (java.lang.Runnable) r3 // Catch: java.lang.Throwable -> L20
r8.task = r3 // Catch: java.lang.Throwable -> L20
if (r3 != 0) goto L49
com.google.firebase.concurrent.SequentialExecutor r8 = com.google.firebase.concurrent.SequentialExecutor.this // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r0 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.IDLE // Catch: java.lang.Throwable -> L20
com.google.firebase.concurrent.SequentialExecutor.access$202(r8, r0) // Catch: java.lang.Throwable -> L20
monitor-exit(r2) // Catch: java.lang.Throwable -> L20
if (r1 == 0) goto L48
goto L18
L48:
return
L49:
monitor-exit(r2) // Catch: java.lang.Throwable -> L20
boolean r2 = java.lang.Thread.interrupted() // Catch: java.lang.Throwable -> L58
r1 = r1 | r2
r2 = 0
java.lang.Runnable r3 = r8.task // Catch: java.lang.Throwable -> L5a java.lang.RuntimeException -> L5c
r3.run() // Catch: java.lang.Throwable -> L5a java.lang.RuntimeException -> L5c
L55:
r8.task = r2 // Catch: java.lang.Throwable -> L58
goto L2
L58:
r8 = move-exception
goto L7f
L5a:
r0 = move-exception
goto L7a
L5c:
r3 = move-exception
java.util.logging.Logger r4 = com.google.firebase.concurrent.SequentialExecutor.access$400() // Catch: java.lang.Throwable -> L5a
java.util.logging.Level r5 = java.util.logging.Level.SEVERE // Catch: java.lang.Throwable -> L5a
java.lang.StringBuilder r6 = new java.lang.StringBuilder // Catch: java.lang.Throwable -> L5a
r6.<init>() // Catch: java.lang.Throwable -> L5a
java.lang.String r7 = "Exception while executing runnable "
r6.append(r7) // Catch: java.lang.Throwable -> L5a
java.lang.Runnable r7 = r8.task // Catch: java.lang.Throwable -> L5a
r6.append(r7) // Catch: java.lang.Throwable -> L5a
java.lang.String r6 = r6.toString() // Catch: java.lang.Throwable -> L5a
r4.log(r5, r6, r3) // Catch: java.lang.Throwable -> L5a
goto L55
L7a:
r8.task = r2 // Catch: java.lang.Throwable -> L58
throw r0 // Catch: java.lang.Throwable -> L58
L7d:
monitor-exit(r2) // Catch: java.lang.Throwable -> L20
throw r8 // Catch: java.lang.Throwable -> L58
L7f:
if (r1 == 0) goto L88
java.lang.Thread r0 = java.lang.Thread.currentThread()
r0.interrupt()
L88:
throw r8
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.firebase.concurrent.SequentialExecutor.QueueWorker.workOnQueue():void");
}
@Override // java.lang.Runnable
public void run() {
try {
workOnQueue();
} catch (Error e4) {
synchronized (SequentialExecutor.this.queue) {
SequentialExecutor.this.workerRunningState = WorkerRunningState.IDLE;
throw e4;
}
}
}
public String toString() {
Runnable runnable = this.task;
if (runnable != null) {
return "SequentialExecutorWorker{running=" + runnable + "}";
}
return "SequentialExecutorWorker{state=" + SequentialExecutor.this.workerRunningState + "}";
}
}
/* loaded from: classes3.dex */
public enum WorkerRunningState {
IDLE,
QUEUING,
QUEUED,
RUNNING
}
public SequentialExecutor(Executor executor) {
this.executor = (Executor) Preconditions.checkNotNull(executor);
}
public static /* synthetic */ long access$308(SequentialExecutor sequentialExecutor) {
long j4 = sequentialExecutor.workerRunCount;
sequentialExecutor.workerRunCount = 1 + j4;
return j4;
}
/* JADX WARN: Removed duplicated region for block: B:45:0x0064 A[ADDED_TO_REGION] */
@Override // java.util.concurrent.Executor
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public void execute(final java.lang.Runnable r8) {
/*
r7 = this;
com.google.android.gms.common.internal.Preconditions.checkNotNull(r8)
java.util.Deque<java.lang.Runnable> r0 = r7.queue
monitor-enter(r0)
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r1 = r7.workerRunningState // Catch: java.lang.Throwable -> L6b
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r2 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.RUNNING // Catch: java.lang.Throwable -> L6b
if (r1 == r2) goto L6d
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r2 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.QUEUED // Catch: java.lang.Throwable -> L6b
if (r1 != r2) goto L11
goto L6d
L11:
long r3 = r7.workerRunCount // Catch: java.lang.Throwable -> L6b
com.google.firebase.concurrent.SequentialExecutor$1 r1 = new com.google.firebase.concurrent.SequentialExecutor$1 // Catch: java.lang.Throwable -> L6b
r1.<init>() // Catch: java.lang.Throwable -> L6b
java.util.Deque<java.lang.Runnable> r8 = r7.queue // Catch: java.lang.Throwable -> L6b
r8.add(r1) // Catch: java.lang.Throwable -> L6b
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r8 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.QUEUING // Catch: java.lang.Throwable -> L6b
r7.workerRunningState = r8 // Catch: java.lang.Throwable -> L6b
monitor-exit(r0) // Catch: java.lang.Throwable -> L6b
java.util.concurrent.Executor r0 = r7.executor // Catch: java.lang.Throwable -> L44
com.google.firebase.concurrent.SequentialExecutor$QueueWorker r5 = r7.worker // Catch: java.lang.Throwable -> L44
r0.execute(r5) // Catch: java.lang.Throwable -> L44
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r0 = r7.workerRunningState
if (r0 == r8) goto L2e
return
L2e:
java.util.Deque<java.lang.Runnable> r0 = r7.queue
monitor-enter(r0)
long r5 = r7.workerRunCount // Catch: java.lang.Throwable -> L3e
int r1 = (r5 > r3 ? 1 : (r5 == r3 ? 0 : -1))
if (r1 != 0) goto L40
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r1 = r7.workerRunningState // Catch: java.lang.Throwable -> L3e
if (r1 != r8) goto L40
r7.workerRunningState = r2 // Catch: java.lang.Throwable -> L3e
goto L40
L3e:
r7 = move-exception
goto L42
L40:
monitor-exit(r0) // Catch: java.lang.Throwable -> L3e
return
L42:
monitor-exit(r0) // Catch: java.lang.Throwable -> L3e
throw r7
L44:
r8 = move-exception
java.util.Deque<java.lang.Runnable> r2 = r7.queue
monitor-enter(r2)
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r0 = r7.workerRunningState // Catch: java.lang.Throwable -> L53
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.IDLE // Catch: java.lang.Throwable -> L53
if (r0 == r3) goto L55
com.google.firebase.concurrent.SequentialExecutor$WorkerRunningState r3 = com.google.firebase.concurrent.SequentialExecutor.WorkerRunningState.QUEUING // Catch: java.lang.Throwable -> L53
if (r0 != r3) goto L5f
goto L55
L53:
r7 = move-exception
goto L69
L55:
java.util.Deque<java.lang.Runnable> r7 = r7.queue // Catch: java.lang.Throwable -> L53
boolean r7 = r7.removeLastOccurrence(r1) // Catch: java.lang.Throwable -> L53
if (r7 == 0) goto L5f
r7 = 1
goto L60
L5f:
r7 = 0
L60:
boolean r0 = r8 instanceof java.util.concurrent.RejectedExecutionException // Catch: java.lang.Throwable -> L53
if (r0 == 0) goto L68
if (r7 != 0) goto L68
monitor-exit(r2) // Catch: java.lang.Throwable -> L53
return
L68:
throw r8 // Catch: java.lang.Throwable -> L53
L69:
monitor-exit(r2) // Catch: java.lang.Throwable -> L53
throw r7
L6b:
r7 = move-exception
goto L74
L6d:
java.util.Deque<java.lang.Runnable> r7 = r7.queue // Catch: java.lang.Throwable -> L6b
r7.add(r8) // Catch: java.lang.Throwable -> L6b
monitor-exit(r0) // Catch: java.lang.Throwable -> L6b
return
L74:
monitor-exit(r0) // Catch: java.lang.Throwable -> L6b
throw r7
*/
throw new UnsupportedOperationException("Method not decompiled: com.google.firebase.concurrent.SequentialExecutor.execute(java.lang.Runnable):void");
}
public String toString() {
return "SequentialExecutor@" + System.identityHashCode(this) + "{" + this.executor + "}";
}
}