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:
181
apk_decompiled/sources/kotlinx/coroutines/AwaitAll.java
Normal file
181
apk_decompiled/sources/kotlinx/coroutines/AwaitAll.java
Normal file
@@ -0,0 +1,181 @@
|
||||
package kotlinx.coroutines;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
||||
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.Result;
|
||||
import kotlin.Unit;
|
||||
import kotlin.coroutines.Continuation;
|
||||
import kotlin.coroutines.intrinsics.IntrinsicsKt;
|
||||
import kotlin.coroutines.jvm.internal.DebugProbesKt;
|
||||
import kotlin.jvm.internal.Intrinsics;
|
||||
import kotlin.jvm.internal.SourceDebugExtension;
|
||||
|
||||
/* JADX INFO: Access modifiers changed from: package-private */
|
||||
@Metadata(d1 = {"\u0000&\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u0011\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010 \n\u0002\b\u0004\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\u00020\u0002:\u0002\r\u000eB\u001b\u0012\u0014\u0010\u0003\u001a\u0010\u0012\f\b\u0001\u0012\b\u0012\u0004\u0012\u00028\u00000\u00050\u0004¢\u0006\u0002\u0010\u0006J\u0014\u0010\n\u001a\b\u0012\u0004\u0012\u00028\u00000\u000bH\u0086@¢\u0006\u0002\u0010\fR\u001e\u0010\u0003\u001a\u0010\u0012\f\b\u0001\u0012\b\u0012\u0004\u0012\u00028\u00000\u00050\u0004X\u0082\u0004¢\u0006\u0004\n\u0002\u0010\u0007R\t\u0010\b\u001a\u00020\tX\u0082\u0004¨\u0006\u000f"}, d2 = {"Lkotlinx/coroutines/AwaitAll;", "T", "", "deferreds", "", "Lkotlinx/coroutines/Deferred;", "([Lkotlinx/coroutines/Deferred;)V", "[Lkotlinx/coroutines/Deferred;", "notCompletedCount", "Lkotlinx/atomicfu/AtomicInt;", "await", "", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "AwaitAllNode", "DisposeHandlersOnCancel", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nAwait.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll\n+ 2 CancellableContinuation.kt\nkotlinx/coroutines/CancellableContinuationKt\n+ 3 CompletionHandler.kt\nkotlinx/coroutines/CompletionHandlerKt\n+ 4 _Arrays.kt\nkotlin/collections/ArraysKt___ArraysKt\n*L\n1#1,127:1\n314#2,9:128\n323#2,2:141\n13#3:137\n19#3:140\n13309#4,2:138\n*S KotlinDebug\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll\n*L\n71#1:128,9\n71#1:141,2\n78#1:137\n90#1:140\n83#1:138,2\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public final class AwaitAll<T> {
|
||||
private static final /* synthetic */ AtomicIntegerFieldUpdater notCompletedCount$volatile$FU = AtomicIntegerFieldUpdater.newUpdater(AwaitAll.class, "notCompletedCount$volatile");
|
||||
private final Deferred<T>[] deferreds;
|
||||
private volatile /* synthetic */ int notCompletedCount$volatile;
|
||||
|
||||
@Metadata(d1 = {"\u0000:\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010 \n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0007\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0003\n\u0000\b\u0082\u0004\u0018\u00002\u00020\u0001B\u0019\u0012\u0012\u0010\u0002\u001a\u000e\u0012\n\u0012\b\u0012\u0004\u0012\u00028\u00000\u00040\u0003¢\u0006\u0002\u0010\u0005J\u0013\u0010\u0016\u001a\u00020\u00172\b\u0010\u0018\u001a\u0004\u0018\u00010\u0019H\u0096\u0002R\u001b\u0010\u0006\u001a\u0014\u0012\u0010\u0012\u000e\u0018\u00010\bR\b\u0012\u0004\u0012\u00028\u00000\t0\u0007X\u0082\u0004R\u001a\u0010\u0002\u001a\u000e\u0012\n\u0012\b\u0012\u0004\u0012\u00028\u00000\u00040\u0003X\u0082\u0004¢\u0006\u0002\n\u0000R<\u0010\u000b\u001a\u000e\u0018\u00010\bR\b\u0012\u0004\u0012\u00028\u00000\t2\u0012\u0010\n\u001a\u000e\u0018\u00010\bR\b\u0012\u0004\u0012\u00028\u00000\t8F@FX\u0086\u000e¢\u0006\f\u001a\u0004\b\f\u0010\r\"\u0004\b\u000e\u0010\u000fR\u001a\u0010\u0010\u001a\u00020\u0011X\u0086.¢\u0006\u000e\n\u0000\u001a\u0004\b\u0012\u0010\u0013\"\u0004\b\u0014\u0010\u0015¨\u0006\u001a"}, d2 = {"Lkotlinx/coroutines/AwaitAll$AwaitAllNode;", "Lkotlinx/coroutines/JobNode;", "continuation", "Lkotlinx/coroutines/CancellableContinuation;", "", "(Lkotlinx/coroutines/AwaitAll;Lkotlinx/coroutines/CancellableContinuation;)V", "_disposer", "Lkotlinx/atomicfu/AtomicRef;", "Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;", "Lkotlinx/coroutines/AwaitAll;", "value", "disposer", "getDisposer", "()Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;", "setDisposer", "(Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;)V", "handle", "Lkotlinx/coroutines/DisposableHandle;", "getHandle", "()Lkotlinx/coroutines/DisposableHandle;", "setHandle", "(Lkotlinx/coroutines/DisposableHandle;)V", "invoke", "", "cause", "", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nAwait.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll$AwaitAllNode\n+ 2 _Arrays.kt\nkotlin/collections/ArraysKt___ArraysKt\n*L\n1#1,127:1\n11065#2:128\n11400#2,3:129\n*S KotlinDebug\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll$AwaitAllNode\n*L\n121#1:128\n121#1:129,3\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public final class AwaitAllNode extends JobNode {
|
||||
private static final /* synthetic */ AtomicReferenceFieldUpdater _disposer$volatile$FU = AtomicReferenceFieldUpdater.newUpdater(AwaitAllNode.class, Object.class, "_disposer$volatile");
|
||||
private volatile /* synthetic */ Object _disposer$volatile;
|
||||
private final CancellableContinuation<List<? extends T>> continuation;
|
||||
public DisposableHandle handle;
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
public AwaitAllNode(CancellableContinuation<? super List<? extends T>> cancellableContinuation) {
|
||||
this.continuation = cancellableContinuation;
|
||||
}
|
||||
|
||||
private final /* synthetic */ Object get_disposer$volatile() {
|
||||
return this._disposer$volatile;
|
||||
}
|
||||
|
||||
private final /* synthetic */ void set_disposer$volatile(Object obj) {
|
||||
this._disposer$volatile = obj;
|
||||
}
|
||||
|
||||
public final AwaitAll<T>.DisposeHandlersOnCancel getDisposer() {
|
||||
return (DisposeHandlersOnCancel) _disposer$volatile$FU.get(this);
|
||||
}
|
||||
|
||||
public final DisposableHandle getHandle() {
|
||||
DisposableHandle disposableHandle = this.handle;
|
||||
if (disposableHandle != null) {
|
||||
return disposableHandle;
|
||||
}
|
||||
Intrinsics.throwUninitializedPropertyAccessException("handle");
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override // kotlin.jvm.functions.Function1
|
||||
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
|
||||
invoke2(th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
public final void setDisposer(AwaitAll<T>.DisposeHandlersOnCancel disposeHandlersOnCancel) {
|
||||
_disposer$volatile$FU.set(this, disposeHandlersOnCancel);
|
||||
}
|
||||
|
||||
public final void setHandle(DisposableHandle disposableHandle) {
|
||||
this.handle = disposableHandle;
|
||||
}
|
||||
|
||||
@Override // kotlinx.coroutines.CompletionHandlerBase
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public void invoke2(Throwable cause) {
|
||||
if (cause != null) {
|
||||
Object tryResumeWithException = this.continuation.tryResumeWithException(cause);
|
||||
if (tryResumeWithException != null) {
|
||||
this.continuation.completeResume(tryResumeWithException);
|
||||
AwaitAll<T>.DisposeHandlersOnCancel disposer = getDisposer();
|
||||
if (disposer != null) {
|
||||
disposer.disposeAll();
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (AwaitAll.access$getNotCompletedCount$volatile$FU().decrementAndGet(AwaitAll.this) == 0) {
|
||||
CancellableContinuation<List<? extends T>> cancellableContinuation = this.continuation;
|
||||
Deferred[] deferredArr = ((AwaitAll) AwaitAll.this).deferreds;
|
||||
ArrayList arrayList = new ArrayList(deferredArr.length);
|
||||
for (Deferred deferred : deferredArr) {
|
||||
arrayList.add(deferred.getCompleted());
|
||||
}
|
||||
cancellableContinuation.resumeWith(Result.m116constructorimpl(arrayList));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Metadata(d1 = {"\u0000.\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0002\b\u0002\n\u0002\u0010\u0003\n\u0000\n\u0002\u0010\u000e\n\u0000\b\u0082\u0004\u0018\u00002\u00020\u0001B\u001d\u0012\u0016\u0010\u0002\u001a\u0012\u0012\u000e\u0012\f0\u0004R\b\u0012\u0004\u0012\u00028\u00000\u00050\u0003¢\u0006\u0002\u0010\u0006J\u0006\u0010\b\u001a\u00020\tJ\u0013\u0010\n\u001a\u00020\t2\b\u0010\u000b\u001a\u0004\u0018\u00010\fH\u0096\u0002J\b\u0010\r\u001a\u00020\u000eH\u0016R \u0010\u0002\u001a\u0012\u0012\u000e\u0012\f0\u0004R\b\u0012\u0004\u0012\u00028\u00000\u00050\u0003X\u0082\u0004¢\u0006\u0004\n\u0002\u0010\u0007¨\u0006\u000f"}, d2 = {"Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;", "Lkotlinx/coroutines/CancelHandler;", "nodes", "", "Lkotlinx/coroutines/AwaitAll$AwaitAllNode;", "Lkotlinx/coroutines/AwaitAll;", "(Lkotlinx/coroutines/AwaitAll;[Lkotlinx/coroutines/AwaitAll$AwaitAllNode;)V", "[Lkotlinx/coroutines/AwaitAll$AwaitAllNode;", "disposeAll", "", "invoke", "cause", "", "toString", "", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nAwait.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel\n+ 2 _Arrays.kt\nkotlin/collections/ArraysKt___ArraysKt\n*L\n1#1,127:1\n13309#2,2:128\n*S KotlinDebug\n*F\n+ 1 Await.kt\nkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel\n*L\n96#1:128,2\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public final class DisposeHandlersOnCancel extends CancelHandler {
|
||||
private final AwaitAll<T>.AwaitAllNode[] nodes;
|
||||
|
||||
public DisposeHandlersOnCancel(AwaitAll<T>.AwaitAllNode[] awaitAllNodeArr) {
|
||||
this.nodes = awaitAllNodeArr;
|
||||
}
|
||||
|
||||
public final void disposeAll() {
|
||||
for (AwaitAll<T>.AwaitAllNode awaitAllNode : this.nodes) {
|
||||
awaitAllNode.getHandle().dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@Override // kotlin.jvm.functions.Function1
|
||||
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
|
||||
invoke2(th);
|
||||
return Unit.INSTANCE;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return "DisposeHandlersOnCancel[" + this.nodes + ']';
|
||||
}
|
||||
|
||||
@Override // kotlinx.coroutines.CancelHandlerBase
|
||||
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
||||
public void invoke2(Throwable cause) {
|
||||
disposeAll();
|
||||
}
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
public AwaitAll(Deferred<? extends T>[] deferredArr) {
|
||||
this.deferreds = deferredArr;
|
||||
this.notCompletedCount$volatile = deferredArr.length;
|
||||
}
|
||||
|
||||
public static final /* synthetic */ AtomicIntegerFieldUpdater access$getNotCompletedCount$volatile$FU() {
|
||||
return notCompletedCount$volatile$FU;
|
||||
}
|
||||
|
||||
private final /* synthetic */ int getNotCompletedCount$volatile() {
|
||||
return this.notCompletedCount$volatile;
|
||||
}
|
||||
|
||||
private final /* synthetic */ void setNotCompletedCount$volatile(int i) {
|
||||
this.notCompletedCount$volatile = i;
|
||||
}
|
||||
|
||||
public final Object await(Continuation<? super List<? extends T>> continuation) {
|
||||
CancellableContinuationImpl cancellableContinuationImpl = new CancellableContinuationImpl(IntrinsicsKt.intercepted(continuation), 1);
|
||||
cancellableContinuationImpl.initCancellability();
|
||||
int length = this.deferreds.length;
|
||||
AwaitAllNode[] awaitAllNodeArr = new AwaitAllNode[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
Deferred deferred = this.deferreds[i];
|
||||
deferred.start();
|
||||
AwaitAllNode awaitAllNode = new AwaitAllNode(cancellableContinuationImpl);
|
||||
awaitAllNode.setHandle(deferred.invokeOnCompletion(awaitAllNode));
|
||||
Unit unit = Unit.INSTANCE;
|
||||
awaitAllNodeArr[i] = awaitAllNode;
|
||||
}
|
||||
AwaitAll<T>.DisposeHandlersOnCancel disposeHandlersOnCancel = new DisposeHandlersOnCancel(awaitAllNodeArr);
|
||||
for (int i4 = 0; i4 < length; i4++) {
|
||||
awaitAllNodeArr[i4].setDisposer(disposeHandlersOnCancel);
|
||||
}
|
||||
if (cancellableContinuationImpl.isCompleted()) {
|
||||
disposeHandlersOnCancel.disposeAll();
|
||||
} else {
|
||||
cancellableContinuationImpl.invokeOnCancellation(disposeHandlersOnCancel);
|
||||
}
|
||||
Object result = cancellableContinuationImpl.getResult();
|
||||
if (result == IntrinsicsKt.getCOROUTINE_SUSPENDED()) {
|
||||
DebugProbesKt.probeCoroutineSuspended(continuation);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user