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,44 @@
package kotlinx.coroutines.future;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiFunction;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.coroutines.CoroutineContext;
import kotlinx.coroutines.AbstractCoroutine;
import kotlinx.coroutines.Job;
/* JADX INFO: Access modifiers changed from: package-private */
@Metadata(d1 = {"\u0000.\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\b\n\u0002\u0010\u000b\n\u0002\b\u0003\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\b\u0012\u0004\u0012\u0002H\u00010\u00022\u0018\u0012\u0006\u0012\u0004\u0018\u0001H\u0001\u0012\u0006\u0012\u0004\u0018\u00010\u0004\u0012\u0004\u0012\u00020\u00050\u0003B\u001b\u0012\u0006\u0010\u0006\u001a\u00020\u0007\u0012\f\u0010\b\u001a\b\u0012\u0004\u0012\u00028\u00000\\u0006\u0002\u0010\nJ!\u0010\u000b\u001a\u00020\u00052\b\u0010\f\u001a\u0004\u0018\u00018\u00002\b\u0010\r\u001a\u0004\u0018\u00010\u0004H\u0016¢\u0006\u0002\u0010\u000eJ\u0018\u0010\u000f\u001a\u00020\u00052\u0006\u0010\u0010\u001a\u00020\u00042\u0006\u0010\u0011\u001a\u00020\u0012H\u0014J\u0015\u0010\u0013\u001a\u00020\u00052\u0006\u0010\f\u001a\u00028\u0000H\u0014¢\u0006\u0002\u0010\u0014R\u0014\u0010\b\u001a\b\u0012\u0004\u0012\u00028\u00000\tX\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006\u0015"}, d2 = {"Lkotlinx/coroutines/future/CompletableFutureCoroutine;", "T", "Lkotlinx/coroutines/AbstractCoroutine;", "Ljava/util/function/BiFunction;", "", "", "context", "Lkotlin/coroutines/CoroutineContext;", "future", "Ljava/util/concurrent/CompletableFuture;", "(Lkotlin/coroutines/CoroutineContext;Ljava/util/concurrent/CompletableFuture;)V", "apply", "value", "exception", "(Ljava/lang/Object;Ljava/lang/Throwable;)V", "onCancelled", "cause", "handled", "", "onCompleted", "(Ljava/lang/Object;)V", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
/* loaded from: classes3.dex */
public final class CompletableFutureCoroutine<T> extends AbstractCoroutine<T> implements BiFunction<T, Throwable, Unit> {
private final CompletableFuture<T> future;
public CompletableFutureCoroutine(CoroutineContext coroutineContext, CompletableFuture<T> completableFuture) {
super(coroutineContext, true, true);
this.future = completableFuture;
}
/* JADX WARN: Multi-variable type inference failed */
@Override // java.util.function.BiFunction
public /* bridge */ /* synthetic */ Unit apply(Object obj, Throwable th) {
apply2((CompletableFutureCoroutine<T>) obj, th);
return Unit.INSTANCE;
}
@Override // kotlinx.coroutines.AbstractCoroutine
public void onCancelled(Throwable cause, boolean handled) {
this.future.completeExceptionally(cause);
}
@Override // kotlinx.coroutines.AbstractCoroutine
public void onCompleted(T value) {
this.future.complete(value);
}
/* renamed from: apply, reason: avoid collision after fix types in other method */
public void apply2(T value, Throwable exception) {
Job.DefaultImpls.cancel$default((Job) this, (CancellationException) null, 1, (Object) null);
}
}

View File

@@ -0,0 +1,48 @@
package kotlinx.coroutines.future;
import java.util.concurrent.CompletionException;
import java.util.function.BiFunction;
import kotlin.Metadata;
import kotlin.Result;
import kotlin.ResultKt;
import kotlin.Unit;
import kotlin.coroutines.Continuation;
import kotlin.jvm.JvmField;
@Metadata(d1 = {"\u0000\u001c\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0006\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\u0018\u0012\u0006\u0012\u0004\u0018\u0001H\u0001\u0012\u0006\u0012\u0004\u0018\u00010\u0003\u0012\u0004\u0012\u00020\u00040\u0002B\u0015\u0012\u000e\u0010\u0005\u001a\n\u0012\u0004\u0012\u00028\u0000\u0018\u00010\u0006¢\u0006\u0002\u0010\u0007J!\u0010\b\u001a\u00020\u00042\b\u0010\t\u001a\u0004\u0018\u00018\u00002\b\u0010\n\u001a\u0004\u0018\u00010\u0003H\u0016¢\u0006\u0002\u0010\u000bR\u001a\u0010\u0005\u001a\n\u0012\u0004\u0012\u00028\u0000\u0018\u00010\u00068\u0006@\u0006X\u0087\u000e¢\u0006\u0002\n\u0000¨\u0006\f"}, d2 = {"Lkotlinx/coroutines/future/ContinuationHandler;", "T", "Ljava/util/function/BiFunction;", "", "", "cont", "Lkotlin/coroutines/Continuation;", "(Lkotlin/coroutines/Continuation;)V", "apply", "result", "exception", "(Ljava/lang/Object;Ljava/lang/Throwable;)V", "kotlinx-coroutines-core"}, k = 1, mv = {1, 9, 0}, xi = 48)
/* loaded from: classes3.dex */
final class ContinuationHandler<T> implements BiFunction<T, Throwable, Unit> {
@JvmField
public volatile Continuation<? super T> cont;
public ContinuationHandler(Continuation<? super T> continuation) {
this.cont = continuation;
}
/* JADX WARN: Multi-variable type inference failed */
@Override // java.util.function.BiFunction
public /* bridge */ /* synthetic */ Unit apply(Object obj, Throwable th) {
apply2((ContinuationHandler<T>) obj, th);
return Unit.INSTANCE;
}
/* renamed from: apply, reason: avoid collision after fix types in other method */
public void apply2(T result, Throwable exception) {
Throwable cause;
Continuation<? super T> continuation = this.cont;
if (continuation == null) {
return;
}
if (exception == null) {
continuation.resumeWith(Result.m116constructorimpl(result));
return;
}
CompletionException completionException = exception instanceof CompletionException ? (CompletionException) exception : null;
if (completionException != null && (cause = completionException.getCause()) != null) {
exception = cause;
}
Result.Companion companion = Result.INSTANCE;
continuation.resumeWith(Result.m116constructorimpl(ResultKt.createFailure(exception)));
}
}

View File

@@ -0,0 +1,224 @@
package kotlinx.coroutines.future;
import java.util.concurrent.CancellationException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.CompletionStage;
import java.util.concurrent.ExecutionException;
import java.util.function.BiFunction;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.coroutines.Continuation;
import kotlin.coroutines.CoroutineContext;
import kotlin.coroutines.EmptyCoroutineContext;
import kotlin.coroutines.intrinsics.IntrinsicsKt;
import kotlin.coroutines.jvm.internal.DebugProbesKt;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.functions.Function2;
import kotlin.jvm.internal.SourceDebugExtension;
import kotlinx.coroutines.CancellableContinuationImpl;
import kotlinx.coroutines.CompletableDeferred;
import kotlinx.coroutines.CompletableDeferredKt;
import kotlinx.coroutines.CoroutineContextKt;
import kotlinx.coroutines.CoroutineExceptionHandlerKt;
import kotlinx.coroutines.CoroutineScope;
import kotlinx.coroutines.CoroutineStart;
import kotlinx.coroutines.Deferred;
import kotlinx.coroutines.ExceptionsKt;
import kotlinx.coroutines.Job;
import kotlinx.coroutines.JobKt;
@Metadata(d1 = {"\u0000D\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0010\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\u001a\u001c\u0010\u0000\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0001\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0003\u001a\u0010\u0010\u0000\u001a\b\u0012\u0004\u0012\u00020\u00040\u0001*\u00020\u0005\u001a\u001c\u0010\u0006\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0003\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0007\u001a\u001e\u0010\b\u001a\u0002H\u0002\"\u0004\b\u0000\u0010\u0002*\b\u0012\u0004\u0012\u0002H\u00020\u0007H\u0086@¢\u0006\u0002\u0010\t\u001aX\u0010\n\u001a\b\u0012\u0004\u0012\u0002H\u00020\u0001\"\u0004\b\u0000\u0010\u0002*\u00020\u000b2\b\b\u0002\u0010\f\u001a\u00020\r2\b\b\u0002\u0010\u000e\u001a\u00020\u000f2'\u0010\u0010\u001a#\b\u0001\u0012\u0004\u0012\u00020\u000b\u0012\n\u0012\b\u0012\u0004\u0012\u0002H\u00020\u0012\u0012\u0006\u0012\u0004\u0018\u00010\u00130\u0011¢\u0006\u0002\b\u0014¢\u0006\u0002\u0010\u0015\u001a\u0018\u0010\u0016\u001a\u00020\u0004*\u00020\u00052\n\u0010\n\u001a\u0006\u0012\u0002\b\u00030\u0001H\u0002¨\u0006\u0017"}, d2 = {"asCompletableFuture", "Ljava/util/concurrent/CompletableFuture;", "T", "Lkotlinx/coroutines/Deferred;", "", "Lkotlinx/coroutines/Job;", "asDeferred", "Ljava/util/concurrent/CompletionStage;", "await", "(Ljava/util/concurrent/CompletionStage;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;", "future", "Lkotlinx/coroutines/CoroutineScope;", "context", "Lkotlin/coroutines/CoroutineContext;", "start", "Lkotlinx/coroutines/CoroutineStart;", "block", "Lkotlin/Function2;", "Lkotlin/coroutines/Continuation;", "", "Lkotlin/ExtensionFunctionType;", "(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Ljava/util/concurrent/CompletableFuture;", "setupCancellation", "kotlinx-coroutines-core"}, k = 2, mv = {1, 9, 0}, xi = 48)
@SourceDebugExtension({"SMAP\nFuture.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Future.kt\nkotlinx/coroutines/future/FutureKt\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n+ 3 CancellableContinuation.kt\nkotlinx/coroutines/CancellableContinuationKt\n*L\n1#1,197:1\n1#2:198\n314#3,11:199\n*S KotlinDebug\n*F\n+ 1 Future.kt\nkotlinx/coroutines/future/FutureKt\n*L\n172#1:199,11\n*E\n"})
/* loaded from: classes3.dex */
public final class FutureKt {
public static final <T> CompletableFuture<T> asCompletableFuture(final Deferred<? extends T> deferred) {
final CompletableFuture<T> completableFuture = new CompletableFuture<>();
setupCancellation(deferred, completableFuture);
deferred.invokeOnCompletion(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$asCompletableFuture$1
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
/* JADX WARN: Multi-variable type inference failed */
{
super(1);
}
@Override // kotlin.jvm.functions.Function1
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
invoke2(th);
return Unit.INSTANCE;
}
/* renamed from: invoke, reason: avoid collision after fix types in other method */
public final void invoke2(Throwable th) {
try {
completableFuture.complete(deferred.getCompleted());
} catch (Throwable th2) {
completableFuture.completeExceptionally(th2);
}
}
});
return completableFuture;
}
public static final <T> Deferred<T> asDeferred(CompletionStage<T> completionStage) {
Throwable cause;
CompletableFuture<T> completableFuture = completionStage.toCompletableFuture();
if (!completableFuture.isDone()) {
final CompletableDeferred CompletableDeferred$default = CompletableDeferredKt.CompletableDeferred$default(null, 1, null);
completionStage.handle(new a(new Function2<T, Throwable, Object>() { // from class: kotlinx.coroutines.future.FutureKt$asDeferred$2
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
{
super(2);
}
/* JADX WARN: Multi-variable type inference failed */
@Override // kotlin.jvm.functions.Function2
public /* bridge */ /* synthetic */ Object invoke(Object obj, Throwable th) {
return invoke2((FutureKt$asDeferred$2<T>) obj, th);
}
/* renamed from: invoke, reason: avoid collision after fix types in other method */
public final Object invoke2(T t2, Throwable th) {
boolean completeExceptionally;
Throwable cause2;
try {
if (th == null) {
completeExceptionally = CompletableDeferred$default.complete(t2);
} else {
CompletableDeferred<T> completableDeferred = CompletableDeferred$default;
CompletionException completionException = th instanceof CompletionException ? (CompletionException) th : null;
if (completionException != null && (cause2 = completionException.getCause()) != null) {
th = cause2;
}
completeExceptionally = completableDeferred.completeExceptionally(th);
}
return Boolean.valueOf(completeExceptionally);
} catch (Throwable th2) {
CoroutineExceptionHandlerKt.handleCoroutineException(EmptyCoroutineContext.INSTANCE, th2);
return Unit.INSTANCE;
}
}
}, 0));
JobKt.cancelFutureOnCompletion(CompletableDeferred$default, completableFuture);
return CompletableDeferred$default;
}
try {
return CompletableDeferredKt.CompletableDeferred(completableFuture.get());
} catch (Throwable th) {
th = th;
ExecutionException executionException = th instanceof ExecutionException ? (ExecutionException) th : null;
if (executionException != null && (cause = executionException.getCause()) != null) {
th = cause;
}
CompletableDeferred CompletableDeferred$default2 = CompletableDeferredKt.CompletableDeferred$default(null, 1, null);
CompletableDeferred$default2.completeExceptionally(th);
return CompletableDeferred$default2;
}
}
public static final <T> Object await(CompletionStage<T> completionStage, Continuation<? super T> continuation) {
final CompletableFuture<T> completableFuture = completionStage.toCompletableFuture();
if (completableFuture.isDone()) {
try {
return completableFuture.get();
} catch (ExecutionException e4) {
Throwable cause = e4.getCause();
if (cause == null) {
throw e4;
}
throw cause;
}
}
CancellableContinuationImpl cancellableContinuationImpl = new CancellableContinuationImpl(IntrinsicsKt.intercepted(continuation), 1);
cancellableContinuationImpl.initCancellability();
final ContinuationHandler continuationHandler = new ContinuationHandler(cancellableContinuationImpl);
completionStage.handle(continuationHandler);
cancellableContinuationImpl.invokeOnCancellation(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$await$2$1
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
{
super(1);
}
@Override // kotlin.jvm.functions.Function1
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
invoke2(th);
return Unit.INSTANCE;
}
/* renamed from: invoke, reason: avoid collision after fix types in other method */
public final void invoke2(Throwable th) {
completableFuture.cancel(false);
continuationHandler.cont = null;
}
});
Object result = cancellableContinuationImpl.getResult();
if (result == IntrinsicsKt.getCOROUTINE_SUSPENDED()) {
DebugProbesKt.probeCoroutineSuspended(continuation);
}
return result;
}
public static final <T> CompletableFuture<T> future(CoroutineScope coroutineScope, CoroutineContext coroutineContext, CoroutineStart coroutineStart, Function2<? super CoroutineScope, ? super Continuation<? super T>, ? extends Object> function2) {
if (coroutineStart.isLazy()) {
throw new IllegalArgumentException((coroutineStart + " start is not supported").toString());
}
CoroutineContext newCoroutineContext = CoroutineContextKt.newCoroutineContext(coroutineScope, coroutineContext);
CompletableFuture<T> completableFuture = new CompletableFuture<>();
CompletableFutureCoroutine completableFutureCoroutine = new CompletableFutureCoroutine(newCoroutineContext, completableFuture);
completableFuture.handle((BiFunction) completableFutureCoroutine);
completableFutureCoroutine.start(coroutineStart, completableFutureCoroutine, function2);
return completableFuture;
}
public static /* synthetic */ CompletableFuture future$default(CoroutineScope coroutineScope, CoroutineContext coroutineContext, CoroutineStart coroutineStart, Function2 function2, int i, Object obj) {
if ((i & 1) != 0) {
coroutineContext = EmptyCoroutineContext.INSTANCE;
}
if ((i & 2) != 0) {
coroutineStart = CoroutineStart.DEFAULT;
}
return future(coroutineScope, coroutineContext, coroutineStart, function2);
}
private static final void setupCancellation(Job job, CompletableFuture<?> completableFuture) {
completableFuture.handle((BiFunction<? super Object, Throwable, ? extends U>) new a(job, 1));
}
public static final Unit setupCancellation$lambda$2(Job job, Object obj, Throwable th) {
if (th != null) {
r2 = th instanceof CancellationException ? (CancellationException) th : null;
if (r2 == null) {
r2 = ExceptionsKt.CancellationException("CompletableFuture was completed exceptionally", th);
}
}
job.cancel(r2);
return Unit.INSTANCE;
}
public static final CompletableFuture<Unit> asCompletableFuture(Job job) {
final CompletableFuture<Unit> completableFuture = new CompletableFuture<>();
setupCancellation(job, completableFuture);
job.invokeOnCompletion(new Function1<Throwable, Unit>() { // from class: kotlinx.coroutines.future.FutureKt$asCompletableFuture$2
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
{
super(1);
}
@Override // kotlin.jvm.functions.Function1
public /* bridge */ /* synthetic */ Unit invoke(Throwable th) {
invoke2(th);
return Unit.INSTANCE;
}
/* renamed from: invoke, reason: avoid collision after fix types in other method */
public final void invoke2(Throwable th) {
if (th == null) {
completableFuture.complete(Unit.INSTANCE);
} else {
completableFuture.completeExceptionally(th);
}
}
});
return completableFuture;
}
}

View File

@@ -0,0 +1,32 @@
package kotlinx.coroutines.future;
import java.util.function.BiFunction;
import kotlin.jvm.functions.Function2;
import kotlinx.coroutines.Job;
/* loaded from: classes3.dex */
public final /* synthetic */ class a implements BiFunction {
/* renamed from: a, reason: collision with root package name */
public final /* synthetic */ int f7155a;
/* renamed from: b, reason: collision with root package name */
public final /* synthetic */ Object f7156b;
public /* synthetic */ a(Object obj, int i) {
this.f7155a = i;
this.f7156b = obj;
}
@Override // java.util.function.BiFunction
public final Object apply(Object obj, Object obj2) {
int i = this.f7155a;
Object obj3 = this.f7156b;
switch (i) {
case 0:
return FutureKt.a((Function2) obj3, obj, (Throwable) obj2);
default:
return FutureKt.b((Job) obj3, obj, (Throwable) obj2);
}
}
}