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,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 + "}";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user