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,408 @@
package kotlin.io;
import com.google.android.gms.measurement.api.AppMeasurementSdk;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import kotlin.Metadata;
import kotlin.Unit;
import kotlin.collections.ArraysKt;
import kotlin.internal.InlineOnly;
import kotlin.internal.PlatformImplementationsKt;
import kotlin.jvm.functions.Function1;
import kotlin.jvm.functions.Function2;
import kotlin.jvm.internal.InlineMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.SourceDebugExtension;
import kotlin.ranges.RangesKt;
import kotlin.sequences.Sequence;
import kotlin.text.Charsets;
/* JADX INFO: Access modifiers changed from: package-private */
@Metadata(d1 = {"\u0000z\n\u0000\n\u0002\u0010\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0012\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010 \n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0000\u001a\u0012\u0010\u0000\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0003\u001a\u00020\u0004\u001a\u001c\u0010\u0005\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0006\u001a\u00020\u00072\b\b\u0002\u0010\b\u001a\u00020\t\u001a!\u0010\n\u001a\u00020\u000b*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t2\b\b\u0002\u0010\f\u001a\u00020\rH\u0087\b\u001a!\u0010\u000e\u001a\u00020\u000f*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t2\b\b\u0002\u0010\f\u001a\u00020\rH\u0087\b\u001aB\u0010\u0010\u001a\u00020\u0001*\u00020\u000226\u0010\u0011\u001a2\u0012\u0013\u0012\u00110\u0004¢\u0006\f\b\u0013\u0012\b\b\u0014\u0012\u0004\b\b(\u0015\u0012\u0013\u0012\u00110\r¢\u0006\f\b\u0013\u0012\b\b\u0014\u0012\u0004\b\b(\u0016\u0012\u0004\u0012\u00020\u00010\u0012\u001aJ\u0010\u0010\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0017\u001a\u00020\r26\u0010\u0011\u001a2\u0012\u0013\u0012\u00110\u0004¢\u0006\f\b\u0013\u0012\b\b\u0014\u0012\u0004\b\b(\u0015\u0012\u0013\u0012\u00110\r¢\u0006\f\b\u0013\u0012\b\b\u0014\u0012\u0004\b\b(\u0016\u0012\u0004\u0012\u00020\u00010\u0012\u001a7\u0010\u0018\u001a\u00020\u0001*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t2!\u0010\u0011\u001a\u001d\u0012\u0013\u0012\u00110\u0007¢\u0006\f\b\u0013\u0012\b\b\u0014\u0012\u0004\b\b(\u001a\u0012\u0004\u0012\u00020\u00010\u0019\u001a\r\u0010\u001b\u001a\u00020\u001c*\u00020\u0002H\u0087\b\u001a\r\u0010\u001d\u001a\u00020\u001e*\u00020\u0002H\u0087\b\u001a\u0017\u0010\u001f\u001a\u00020 *\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\tH\u0087\b\u001a\n\u0010!\u001a\u00020\u0004*\u00020\u0002\u001a\u001a\u0010\"\u001a\b\u0012\u0004\u0012\u00020\u00070#*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t\u001a\u0014\u0010$\u001a\u00020\u0007*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t\u001a\u0017\u0010%\u001a\u00020&*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\tH\u0087\b\u001a?\u0010'\u001a\u0002H(\"\u0004\b\u0000\u0010(*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\t2\u0018\u0010)\u001a\u0014\u0012\n\u0012\b\u0012\u0004\u0012\u00020\u00070*\u0012\u0004\u0012\u0002H(0\u0019H\u0086\bø\u0001\u0000¢\u0006\u0002\u0010+\u001a\u0012\u0010,\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0003\u001a\u00020\u0004\u001a\u001c\u0010-\u001a\u00020\u0001*\u00020\u00022\u0006\u0010\u0006\u001a\u00020\u00072\b\b\u0002\u0010\b\u001a\u00020\t\u001a\u0017\u0010.\u001a\u00020/*\u00020\u00022\b\b\u0002\u0010\b\u001a\u00020\tH\u0087\b\u0082\u0002\u0007\n\u0005\b\u009920\u0001¨\u00060"}, d2 = {"appendBytes", "", "Ljava/io/File;", "array", "", "appendText", "text", "", "charset", "Ljava/nio/charset/Charset;", "bufferedReader", "Ljava/io/BufferedReader;", "bufferSize", "", "bufferedWriter", "Ljava/io/BufferedWriter;", "forEachBlock", "action", "Lkotlin/Function2;", "Lkotlin/ParameterName;", AppMeasurementSdk.ConditionalUserProperty.NAME, "buffer", "bytesRead", "blockSize", "forEachLine", "Lkotlin/Function1;", "line", "inputStream", "Ljava/io/FileInputStream;", "outputStream", "Ljava/io/FileOutputStream;", "printWriter", "Ljava/io/PrintWriter;", "readBytes", "readLines", "", "readText", "reader", "Ljava/io/InputStreamReader;", "useLines", "T", "block", "Lkotlin/sequences/Sequence;", "(Ljava/io/File;Ljava/nio/charset/Charset;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;", "writeBytes", "writeText", "writer", "Ljava/io/OutputStreamWriter;", "kotlin-stdlib"}, k = 5, mv = {1, 9, 0}, xi = 49, xs = "kotlin/io/FilesKt")
@SourceDebugExtension({"SMAP\nFileReadWrite.kt\nKotlin\n*S Kotlin\n*F\n+ 1 FileReadWrite.kt\nkotlin/io/FilesKt__FileReadWriteKt\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,232:1\n1#2:233\n*E\n"})
/* loaded from: classes3.dex */
public class FilesKt__FileReadWriteKt extends FilesKt__FilePathComponentsKt {
public static final void appendBytes(File file, byte[] array) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(array, "array");
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
try {
fileOutputStream.write(array);
Unit unit = Unit.INSTANCE;
CloseableKt.closeFinally(fileOutputStream, null);
} finally {
}
}
public static final void appendText(File file, String text, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(text, "text");
Intrinsics.checkNotNullParameter(charset, "charset");
byte[] bytes = text.getBytes(charset);
Intrinsics.checkNotNullExpressionValue(bytes, "getBytes(...)");
appendBytes(file, bytes);
}
public static /* synthetic */ void appendText$default(File file, String str, Charset charset, int i, Object obj) {
if ((i & 2) != 0) {
charset = Charsets.UTF_8;
}
appendText(file, str, charset);
}
@InlineOnly
private static final BufferedReader bufferedReader(File file, Charset charset, int i) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new BufferedReader(new InputStreamReader(new FileInputStream(file), charset), i);
}
public static /* synthetic */ BufferedReader bufferedReader$default(File file, Charset charset, int i, int i4, Object obj) {
if ((i4 & 1) != 0) {
charset = Charsets.UTF_8;
}
if ((i4 & 2) != 0) {
i = 8192;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new BufferedReader(new InputStreamReader(new FileInputStream(file), charset), i);
}
@InlineOnly
private static final BufferedWriter bufferedWriter(File file, Charset charset, int i) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset), i);
}
public static /* synthetic */ BufferedWriter bufferedWriter$default(File file, Charset charset, int i, int i4, Object obj) {
if ((i4 & 1) != 0) {
charset = Charsets.UTF_8;
}
if ((i4 & 2) != 0) {
i = 8192;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset), i);
}
public static final void forEachBlock(File file, Function2<? super byte[], ? super Integer, Unit> action) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(action, "action");
forEachBlock(file, ConstantsKt.DEFAULT_BLOCK_SIZE, action);
}
public static final void forEachLine(File file, Charset charset, Function1<? super String, Unit> action) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
Intrinsics.checkNotNullParameter(action, "action");
TextStreamsKt.forEachLine(new BufferedReader(new InputStreamReader(new FileInputStream(file), charset)), action);
}
public static /* synthetic */ void forEachLine$default(File file, Charset charset, Function1 function1, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
forEachLine(file, charset, function1);
}
@InlineOnly
private static final FileInputStream inputStream(File file) {
Intrinsics.checkNotNullParameter(file, "<this>");
return new FileInputStream(file);
}
@InlineOnly
private static final FileOutputStream outputStream(File file) {
Intrinsics.checkNotNullParameter(file, "<this>");
return new FileOutputStream(file);
}
@InlineOnly
private static final PrintWriter printWriter(File file, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset), 8192));
}
public static /* synthetic */ PrintWriter printWriter$default(File file, Charset charset, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), charset), 8192));
}
public static final byte[] readBytes(File file) {
Intrinsics.checkNotNullParameter(file, "<this>");
FileInputStream fileInputStream = new FileInputStream(file);
try {
long length = file.length();
if (length > 2147483647L) {
throw new OutOfMemoryError("File " + file + " is too big (" + length + " bytes) to fit in memory.");
}
int i = (int) length;
byte[] bArr = new byte[i];
int i4 = i;
int i5 = 0;
while (i4 > 0) {
int read = fileInputStream.read(bArr, i5, i4);
if (read < 0) {
break;
}
i4 -= read;
i5 += read;
}
if (i4 > 0) {
bArr = Arrays.copyOf(bArr, i5);
Intrinsics.checkNotNullExpressionValue(bArr, "copyOf(...)");
} else {
int read2 = fileInputStream.read();
if (read2 != -1) {
ExposingBufferByteArrayOutputStream exposingBufferByteArrayOutputStream = new ExposingBufferByteArrayOutputStream(8193);
exposingBufferByteArrayOutputStream.write(read2);
ByteStreamsKt.copyTo$default(fileInputStream, exposingBufferByteArrayOutputStream, 0, 2, null);
int size = exposingBufferByteArrayOutputStream.size() + i;
if (size < 0) {
throw new OutOfMemoryError("File " + file + " is too big to fit in memory.");
}
byte[] buffer = exposingBufferByteArrayOutputStream.getBuffer();
byte[] copyOf = Arrays.copyOf(bArr, size);
Intrinsics.checkNotNullExpressionValue(copyOf, "copyOf(...)");
bArr = ArraysKt.copyInto(buffer, copyOf, i, 0, exposingBufferByteArrayOutputStream.size());
}
}
CloseableKt.closeFinally(fileInputStream, null);
return bArr;
} catch (Throwable th) {
try {
throw th;
} catch (Throwable th2) {
CloseableKt.closeFinally(fileInputStream, th);
throw th2;
}
}
}
public static final List<String> readLines(File file, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
final ArrayList arrayList = new ArrayList();
forEachLine(file, charset, new Function1<String, Unit>() { // from class: kotlin.io.FilesKt__FileReadWriteKt$readLines$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(String str) {
invoke2(str);
return Unit.INSTANCE;
}
/* renamed from: invoke, reason: avoid collision after fix types in other method */
public final void invoke2(String it) {
Intrinsics.checkNotNullParameter(it, "it");
arrayList.add(it);
}
});
return arrayList;
}
public static /* synthetic */ List readLines$default(File file, Charset charset, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
return readLines(file, charset);
}
public static final String readText(File file, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(file), charset);
try {
String readText = TextStreamsKt.readText(inputStreamReader);
CloseableKt.closeFinally(inputStreamReader, null);
return readText;
} finally {
}
}
public static /* synthetic */ String readText$default(File file, Charset charset, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
return readText(file, charset);
}
@InlineOnly
private static final InputStreamReader reader(File file, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new InputStreamReader(new FileInputStream(file), charset);
}
public static /* synthetic */ InputStreamReader reader$default(File file, Charset charset, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new InputStreamReader(new FileInputStream(file), charset);
}
public static final <T> T useLines(File file, Charset charset, Function1<? super Sequence<String>, ? extends T> block) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
Intrinsics.checkNotNullParameter(block, "block");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset), 8192);
try {
T invoke = block.invoke(TextStreamsKt.lineSequence(bufferedReader));
InlineMarker.finallyStart(1);
if (PlatformImplementationsKt.apiVersionIsAtLeast(1, 1, 0)) {
CloseableKt.closeFinally(bufferedReader, null);
} else {
bufferedReader.close();
}
InlineMarker.finallyEnd(1);
return invoke;
} catch (Throwable th) {
try {
throw th;
} catch (Throwable th2) {
InlineMarker.finallyStart(1);
if (PlatformImplementationsKt.apiVersionIsAtLeast(1, 1, 0)) {
CloseableKt.closeFinally(bufferedReader, th);
} else {
try {
bufferedReader.close();
} catch (Throwable unused) {
}
}
InlineMarker.finallyEnd(1);
throw th2;
}
}
}
public static /* synthetic */ Object useLines$default(File file, Charset charset, Function1 block, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
Intrinsics.checkNotNullParameter(block, "block");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset), 8192);
try {
Object invoke = block.invoke(TextStreamsKt.lineSequence(bufferedReader));
InlineMarker.finallyStart(1);
if (PlatformImplementationsKt.apiVersionIsAtLeast(1, 1, 0)) {
CloseableKt.closeFinally(bufferedReader, null);
} else {
bufferedReader.close();
}
InlineMarker.finallyEnd(1);
return invoke;
} catch (Throwable th) {
try {
throw th;
} catch (Throwable th2) {
InlineMarker.finallyStart(1);
if (PlatformImplementationsKt.apiVersionIsAtLeast(1, 1, 0)) {
CloseableKt.closeFinally(bufferedReader, th);
} else {
try {
bufferedReader.close();
} catch (Throwable unused) {
}
}
InlineMarker.finallyEnd(1);
throw th2;
}
}
}
public static final void writeBytes(File file, byte[] array) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(array, "array");
FileOutputStream fileOutputStream = new FileOutputStream(file);
try {
fileOutputStream.write(array);
Unit unit = Unit.INSTANCE;
CloseableKt.closeFinally(fileOutputStream, null);
} finally {
}
}
public static final void writeText(File file, String text, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(text, "text");
Intrinsics.checkNotNullParameter(charset, "charset");
byte[] bytes = text.getBytes(charset);
Intrinsics.checkNotNullExpressionValue(bytes, "getBytes(...)");
writeBytes(file, bytes);
}
public static /* synthetic */ void writeText$default(File file, String str, Charset charset, int i, Object obj) {
if ((i & 2) != 0) {
charset = Charsets.UTF_8;
}
writeText(file, str, charset);
}
@InlineOnly
private static final OutputStreamWriter writer(File file, Charset charset) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new OutputStreamWriter(new FileOutputStream(file), charset);
}
public static /* synthetic */ OutputStreamWriter writer$default(File file, Charset charset, int i, Object obj) {
if ((i & 1) != 0) {
charset = Charsets.UTF_8;
}
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(charset, "charset");
return new OutputStreamWriter(new FileOutputStream(file), charset);
}
/* JADX WARN: Multi-variable type inference failed */
/* JADX WARN: Type inference failed for: r2v2, types: [java.lang.Object, byte[]] */
public static final void forEachBlock(File file, int i, Function2<? super byte[], ? super Integer, Unit> action) {
Intrinsics.checkNotNullParameter(file, "<this>");
Intrinsics.checkNotNullParameter(action, "action");
?? r22 = new byte[RangesKt.coerceAtLeast(i, ConstantsKt.MINIMUM_BLOCK_SIZE)];
FileInputStream fileInputStream = new FileInputStream(file);
while (true) {
try {
int read = fileInputStream.read(r22);
if (read <= 0) {
Unit unit = Unit.INSTANCE;
CloseableKt.closeFinally(fileInputStream, null);
return;
}
action.invoke(r22, Integer.valueOf(read));
} catch (Throwable th) {
try {
throw th;
} catch (Throwable th2) {
CloseableKt.closeFinally(fileInputStream, th);
throw th2;
}
}
}
}
}