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,102 @@
package retrofit2;
import android.os.Handler;
import android.os.Looper;
import java.lang.invoke.MethodHandles;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.concurrent.Executor;
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
import retrofit2.CallAdapter;
import retrofit2.Converter;
/* loaded from: classes3.dex */
class Platform {
private static final Platform PLATFORM = findPlatform();
private final boolean hasJava8Types;
private final Constructor<MethodHandles.Lookup> lookupConstructor;
/* loaded from: classes3.dex */
public static final class Android extends Platform {
/* loaded from: classes3.dex */
public static final class MainThreadExecutor implements Executor {
private final Handler handler = new Handler(Looper.getMainLooper());
@Override // java.util.concurrent.Executor
public void execute(Runnable runnable) {
this.handler.post(runnable);
}
}
public Android() {
super(true);
}
@Override // retrofit2.Platform
public Executor defaultCallbackExecutor() {
return new MainThreadExecutor();
}
@Override // retrofit2.Platform
public Object invokeDefaultMethod(Method method, Class<?> cls, Object obj, Object... objArr) throws Throwable {
return super.invokeDefaultMethod(method, cls, obj, objArr);
}
}
public Platform(boolean z3) {
this.hasJava8Types = z3;
Constructor<MethodHandles.Lookup> constructor = null;
if (z3) {
try {
constructor = MethodHandles.Lookup.class.getDeclaredConstructor(Class.class, Integer.TYPE);
constructor.setAccessible(true);
} catch (NoClassDefFoundError | NoSuchMethodException unused) {
}
}
this.lookupConstructor = constructor;
}
private static Platform findPlatform() {
return "Dalvik".equals(System.getProperty("java.vm.name")) ? new Android() : new Platform(true);
}
public static Platform get() {
return PLATFORM;
}
public List<? extends CallAdapter.Factory> defaultCallAdapterFactories(Executor executor) {
DefaultCallAdapterFactory defaultCallAdapterFactory = new DefaultCallAdapterFactory(executor);
return this.hasJava8Types ? Arrays.asList(CompletableFutureCallAdapterFactory.INSTANCE, defaultCallAdapterFactory) : Collections.singletonList(defaultCallAdapterFactory);
}
public int defaultCallAdapterFactoriesSize() {
return this.hasJava8Types ? 2 : 1;
}
public Executor defaultCallbackExecutor() {
return null;
}
public List<? extends Converter.Factory> defaultConverterFactories() {
return this.hasJava8Types ? Collections.singletonList(OptionalConverterFactory.INSTANCE) : Collections.EMPTY_LIST;
}
public int defaultConverterFactoriesSize() {
return this.hasJava8Types ? 1 : 0;
}
@IgnoreJRERequirement
public Object invokeDefaultMethod(Method method, Class<?> cls, Object obj, Object... objArr) throws Throwable {
Constructor<MethodHandles.Lookup> constructor = this.lookupConstructor;
return (constructor != null ? constructor.newInstance(cls, -1) : MethodHandles.lookup()).unreflectSpecial(method, cls).bindTo(obj).invokeWithArguments(objArr);
}
@IgnoreJRERequirement
public boolean isDefaultMethod(Method method) {
return this.hasJava8Types && method.isDefault();
}
}