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,139 @@
package retrofit2;
import java.lang.annotation.Annotation;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.concurrent.CompletableFuture;
import org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement;
import retrofit2.CallAdapter;
/* JADX INFO: Access modifiers changed from: package-private */
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public final class CompletableFutureCallAdapterFactory extends CallAdapter.Factory {
static final CallAdapter.Factory INSTANCE = new CompletableFutureCallAdapterFactory();
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public static final class BodyCallAdapter<R> implements CallAdapter<R, CompletableFuture<R>> {
private final Type responseType;
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public class BodyCallback implements Callback<R> {
private final CompletableFuture<R> future;
public BodyCallback(CompletableFuture<R> completableFuture) {
this.future = completableFuture;
}
@Override // retrofit2.Callback
public void onFailure(Call<R> call, Throwable th) {
this.future.completeExceptionally(th);
}
@Override // retrofit2.Callback
public void onResponse(Call<R> call, Response<R> response) {
if (response.isSuccessful()) {
this.future.complete(response.body());
} else {
this.future.completeExceptionally(new HttpException(response));
}
}
}
public BodyCallAdapter(Type type) {
this.responseType = type;
}
@Override // retrofit2.CallAdapter
public Type responseType() {
return this.responseType;
}
@Override // retrofit2.CallAdapter
public CompletableFuture<R> adapt(Call<R> call) {
CallCancelCompletableFuture callCancelCompletableFuture = new CallCancelCompletableFuture(call);
call.enqueue(new BodyCallback(callCancelCompletableFuture));
return callCancelCompletableFuture;
}
}
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public static final class CallCancelCompletableFuture<T> extends CompletableFuture<T> {
private final Call<?> call;
public CallCancelCompletableFuture(Call<?> call) {
this.call = call;
}
@Override // java.util.concurrent.CompletableFuture, java.util.concurrent.Future
public boolean cancel(boolean z3) {
if (z3) {
this.call.cancel();
}
return super.cancel(z3);
}
}
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public static final class ResponseCallAdapter<R> implements CallAdapter<R, CompletableFuture<Response<R>>> {
private final Type responseType;
@IgnoreJRERequirement
/* loaded from: classes3.dex */
public class ResponseCallback implements Callback<R> {
private final CompletableFuture<Response<R>> future;
public ResponseCallback(CompletableFuture<Response<R>> completableFuture) {
this.future = completableFuture;
}
@Override // retrofit2.Callback
public void onFailure(Call<R> call, Throwable th) {
this.future.completeExceptionally(th);
}
@Override // retrofit2.Callback
public void onResponse(Call<R> call, Response<R> response) {
this.future.complete(response);
}
}
public ResponseCallAdapter(Type type) {
this.responseType = type;
}
@Override // retrofit2.CallAdapter
public Type responseType() {
return this.responseType;
}
@Override // retrofit2.CallAdapter
public CompletableFuture<Response<R>> adapt(Call<R> call) {
CallCancelCompletableFuture callCancelCompletableFuture = new CallCancelCompletableFuture(call);
call.enqueue(new ResponseCallback(callCancelCompletableFuture));
return callCancelCompletableFuture;
}
}
@Override // retrofit2.CallAdapter.Factory
public CallAdapter<?, ?> get(Type type, Annotation[] annotationArr, Retrofit retrofit) {
if (CallAdapter.Factory.getRawType(type) != CompletableFuture.class) {
return null;
}
if (!(type instanceof ParameterizedType)) {
throw new IllegalStateException("CompletableFuture return type must be parameterized as CompletableFuture<Foo> or CompletableFuture<? extends Foo>");
}
Type parameterUpperBound = CallAdapter.Factory.getParameterUpperBound(0, (ParameterizedType) type);
if (CallAdapter.Factory.getRawType(parameterUpperBound) != Response.class) {
return new BodyCallAdapter(parameterUpperBound);
}
if (parameterUpperBound instanceof ParameterizedType) {
return new ResponseCallAdapter(CallAdapter.Factory.getParameterUpperBound(0, (ParameterizedType) parameterUpperBound));
}
throw new IllegalStateException("Response must be parameterized as Response<Foo> or Response<? extends Foo>");
}
}