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:
131
apk_decompiled/sources/kotlinx/coroutines/DispatchedTaskKt.java
Normal file
131
apk_decompiled/sources/kotlinx/coroutines/DispatchedTaskKt.java
Normal file
@@ -0,0 +1,131 @@
|
||||
package kotlinx.coroutines;
|
||||
|
||||
import kotlin.Metadata;
|
||||
import kotlin.PublishedApi;
|
||||
import kotlin.Result;
|
||||
import kotlin.ResultKt;
|
||||
import kotlin.Unit;
|
||||
import kotlin.coroutines.Continuation;
|
||||
import kotlin.coroutines.CoroutineContext;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import kotlin.jvm.internal.InlineMarker;
|
||||
import kotlin.jvm.internal.Intrinsics;
|
||||
import kotlin.jvm.internal.SourceDebugExtension;
|
||||
import kotlinx.coroutines.internal.DispatchedContinuation;
|
||||
import kotlinx.coroutines.internal.ThreadContextKt;
|
||||
|
||||
@Metadata(d1 = {"\u0000<\n\u0000\n\u0002\u0010\b\n\u0002\b\u0007\n\u0002\u0010\u000b\n\u0002\b\u0003\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0010\u0003\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\u001a \u0010\f\u001a\u00020\r\"\u0004\b\u0000\u0010\u000e*\b\u0012\u0004\u0012\u0002H\u000e0\u000f2\u0006\u0010\u0010\u001a\u00020\u0001H\u0000\u001a.\u0010\u0011\u001a\u00020\r\"\u0004\b\u0000\u0010\u000e*\b\u0012\u0004\u0012\u0002H\u000e0\u000f2\f\u0010\u0012\u001a\b\u0012\u0004\u0012\u0002H\u000e0\u00132\u0006\u0010\u0014\u001a\u00020\tH\u0000\u001a\u0010\u0010\u0015\u001a\u00020\r*\u0006\u0012\u0002\b\u00030\u000fH\u0002\u001a\u0019\u0010\u0016\u001a\u00020\r*\u0006\u0012\u0002\b\u00030\u00132\u0006\u0010\u0017\u001a\u00020\u0018H\u0080\b\u001a'\u0010\u0019\u001a\u00020\r*\u0006\u0012\u0002\b\u00030\u000f2\u0006\u0010\u001a\u001a\u00020\u001b2\f\u0010\u001c\u001a\b\u0012\u0004\u0012\u00020\r0\u001dH\u0080\b\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0080T¢\u0006\u0002\n\u0000\"\u0016\u0010\u0002\u001a\u00020\u00018\u0000X\u0081T¢\u0006\b\n\u0000\u0012\u0004\b\u0003\u0010\u0004\"\u000e\u0010\u0005\u001a\u00020\u0001X\u0080T¢\u0006\u0002\n\u0000\"\u000e\u0010\u0006\u001a\u00020\u0001X\u0080T¢\u0006\u0002\n\u0000\"\u000e\u0010\u0007\u001a\u00020\u0001X\u0080T¢\u0006\u0002\n\u0000\"\u0018\u0010\b\u001a\u00020\t*\u00020\u00018@X\u0080\u0004¢\u0006\u0006\u001a\u0004\b\b\u0010\n\"\u0018\u0010\u000b\u001a\u00020\t*\u00020\u00018@X\u0080\u0004¢\u0006\u0006\u001a\u0004\b\u000b\u0010\n¨\u0006\u001e"}, d2 = {"MODE_ATOMIC", "", "MODE_CANCELLABLE", "getMODE_CANCELLABLE$annotations", "()V", "MODE_CANCELLABLE_REUSABLE", "MODE_UNDISPATCHED", "MODE_UNINITIALIZED", "isCancellableMode", "", "(I)Z", "isReusableMode", "dispatch", "", "T", "Lkotlinx/coroutines/DispatchedTask;", "mode", "resume", "delegate", "Lkotlin/coroutines/Continuation;", "undispatched", "resumeUnconfined", "resumeWithStackTrace", "exception", "", "runUnconfinedEventLoop", "eventLoop", "Lkotlinx/coroutines/EventLoop;", "block", "Lkotlin/Function0;", "kotlinx-coroutines-core"}, k = 2, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nDispatchedTask.kt\nKotlin\n*S Kotlin\n*F\n+ 1 DispatchedTask.kt\nkotlinx/coroutines/DispatchedTaskKt\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n+ 3 DispatchedContinuation.kt\nkotlinx/coroutines/internal/DispatchedContinuation\n+ 4 CoroutineContext.kt\nkotlinx/coroutines/CoroutineContextKt\n+ 5 StackTraceRecovery.kt\nkotlinx/coroutines/internal/StackTraceRecoveryKt\n*L\n1#1,222:1\n200#1,17:240\n1#2:223\n255#3:224\n256#3,2:235\n258#3:239\n107#4,10:225\n118#4,2:237\n61#5,2:257\n*S KotlinDebug\n*F\n+ 1 DispatchedTask.kt\nkotlinx/coroutines/DispatchedTaskKt\n*L\n190#1:240,17\n178#1:224\n178#1:235,2\n178#1:239\n178#1:225,10\n178#1:237,2\n220#1:257,2\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public final class DispatchedTaskKt {
|
||||
public static final int MODE_ATOMIC = 0;
|
||||
public static final int MODE_CANCELLABLE = 1;
|
||||
public static final int MODE_CANCELLABLE_REUSABLE = 2;
|
||||
public static final int MODE_UNDISPATCHED = 4;
|
||||
public static final int MODE_UNINITIALIZED = -1;
|
||||
|
||||
public static final <T> void dispatch(DispatchedTask<? super T> dispatchedTask, int i) {
|
||||
Continuation<? super T> delegate$kotlinx_coroutines_core = dispatchedTask.getDelegate$kotlinx_coroutines_core();
|
||||
boolean z3 = i == 4;
|
||||
if (z3 || !(delegate$kotlinx_coroutines_core instanceof DispatchedContinuation) || isCancellableMode(i) != isCancellableMode(dispatchedTask.resumeMode)) {
|
||||
resume(dispatchedTask, delegate$kotlinx_coroutines_core, z3);
|
||||
return;
|
||||
}
|
||||
CoroutineDispatcher coroutineDispatcher = ((DispatchedContinuation) delegate$kotlinx_coroutines_core).dispatcher;
|
||||
CoroutineContext coroutineContext = delegate$kotlinx_coroutines_core.get$context();
|
||||
if (coroutineDispatcher.isDispatchNeeded(coroutineContext)) {
|
||||
coroutineDispatcher.mo1685dispatch(coroutineContext, dispatchedTask);
|
||||
} else {
|
||||
resumeUnconfined(dispatchedTask);
|
||||
}
|
||||
}
|
||||
|
||||
@PublishedApi
|
||||
public static /* synthetic */ void getMODE_CANCELLABLE$annotations() {
|
||||
}
|
||||
|
||||
public static final boolean isCancellableMode(int i) {
|
||||
return i == 1 || i == 2;
|
||||
}
|
||||
|
||||
public static final boolean isReusableMode(int i) {
|
||||
return i == 2;
|
||||
}
|
||||
|
||||
public static final <T> void resume(DispatchedTask<? super T> dispatchedTask, Continuation<? super T> continuation, boolean z3) {
|
||||
Object successfulResult$kotlinx_coroutines_core;
|
||||
Object takeState$kotlinx_coroutines_core = dispatchedTask.takeState$kotlinx_coroutines_core();
|
||||
Throwable exceptionalResult$kotlinx_coroutines_core = dispatchedTask.getExceptionalResult$kotlinx_coroutines_core(takeState$kotlinx_coroutines_core);
|
||||
if (exceptionalResult$kotlinx_coroutines_core != null) {
|
||||
Result.Companion companion = Result.INSTANCE;
|
||||
successfulResult$kotlinx_coroutines_core = ResultKt.createFailure(exceptionalResult$kotlinx_coroutines_core);
|
||||
} else {
|
||||
Result.Companion companion2 = Result.INSTANCE;
|
||||
successfulResult$kotlinx_coroutines_core = dispatchedTask.getSuccessfulResult$kotlinx_coroutines_core(takeState$kotlinx_coroutines_core);
|
||||
}
|
||||
Object m116constructorimpl = Result.m116constructorimpl(successfulResult$kotlinx_coroutines_core);
|
||||
if (!z3) {
|
||||
continuation.resumeWith(m116constructorimpl);
|
||||
return;
|
||||
}
|
||||
Intrinsics.checkNotNull(continuation, "null cannot be cast to non-null type kotlinx.coroutines.internal.DispatchedContinuation<T of kotlinx.coroutines.DispatchedTaskKt.resume>");
|
||||
DispatchedContinuation dispatchedContinuation = (DispatchedContinuation) continuation;
|
||||
Continuation<T> continuation2 = dispatchedContinuation.continuation;
|
||||
Object obj = dispatchedContinuation.countOrElement;
|
||||
CoroutineContext coroutineContext = continuation2.get$context();
|
||||
Object updateThreadContext = ThreadContextKt.updateThreadContext(coroutineContext, obj);
|
||||
UndispatchedCoroutine<?> updateUndispatchedCompletion = updateThreadContext != ThreadContextKt.NO_THREAD_ELEMENTS ? CoroutineContextKt.updateUndispatchedCompletion(continuation2, coroutineContext, updateThreadContext) : null;
|
||||
try {
|
||||
dispatchedContinuation.continuation.resumeWith(m116constructorimpl);
|
||||
Unit unit = Unit.INSTANCE;
|
||||
if (updateUndispatchedCompletion == null || updateUndispatchedCompletion.clearThreadContext()) {
|
||||
ThreadContextKt.restoreThreadContext(coroutineContext, updateThreadContext);
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
if (updateUndispatchedCompletion == null || updateUndispatchedCompletion.clearThreadContext()) {
|
||||
ThreadContextKt.restoreThreadContext(coroutineContext, updateThreadContext);
|
||||
}
|
||||
throw th;
|
||||
}
|
||||
}
|
||||
|
||||
private static final void resumeUnconfined(DispatchedTask<?> dispatchedTask) {
|
||||
EventLoop eventLoop$kotlinx_coroutines_core = ThreadLocalEventLoop.INSTANCE.getEventLoop$kotlinx_coroutines_core();
|
||||
if (eventLoop$kotlinx_coroutines_core.isUnconfinedLoopActive()) {
|
||||
eventLoop$kotlinx_coroutines_core.dispatchUnconfined(dispatchedTask);
|
||||
return;
|
||||
}
|
||||
eventLoop$kotlinx_coroutines_core.incrementUseCount(true);
|
||||
try {
|
||||
resume(dispatchedTask, dispatchedTask.getDelegate$kotlinx_coroutines_core(), true);
|
||||
do {
|
||||
} while (eventLoop$kotlinx_coroutines_core.processUnconfinedEvent());
|
||||
} finally {
|
||||
try {
|
||||
} finally {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final void resumeWithStackTrace(Continuation<?> continuation, Throwable th) {
|
||||
Result.Companion companion = Result.INSTANCE;
|
||||
continuation.resumeWith(Result.m116constructorimpl(ResultKt.createFailure(th)));
|
||||
}
|
||||
|
||||
public static final void runUnconfinedEventLoop(DispatchedTask<?> dispatchedTask, EventLoop eventLoop, Function0<Unit> function0) {
|
||||
eventLoop.incrementUseCount(true);
|
||||
try {
|
||||
function0.invoke();
|
||||
do {
|
||||
} while (eventLoop.processUnconfinedEvent());
|
||||
} catch (Throwable th) {
|
||||
try {
|
||||
dispatchedTask.handleFatalException$kotlinx_coroutines_core(th, null);
|
||||
} finally {
|
||||
InlineMarker.finallyStart(1);
|
||||
eventLoop.decrementUseCount(true);
|
||||
InlineMarker.finallyEnd(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user