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,328 @@
package kotlin.io;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CoderResult;
import kotlin.Metadata;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.SourceDebugExtension;
@Metadata(d1 = {"\u0000\\\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0012\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0019\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0007\n\u0002\u0010\u000e\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0003\bÀ\u0002\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J\b\u0010\u0014\u001a\u00020\u0004H\u0002J\u0010\u0010\u0015\u001a\u00020\u00042\u0006\u0010\u0016\u001a\u00020\u0010H\u0002J\u0018\u0010\u0017\u001a\u00020\u00042\u0006\u0010\u0018\u001a\u00020\u00042\u0006\u0010\u0019\u001a\u00020\u0004H\u0002J\u0018\u0010\u001a\u001a\u0004\u0018\u00010\u001b2\u0006\u0010\u001c\u001a\u00020\u001d2\u0006\u0010\u001e\u001a\u00020\u001fJ\b\u0010 \u001a\u00020!H\u0002J\b\u0010\"\u001a\u00020!H\u0002J\u0010\u0010#\u001a\u00020!2\u0006\u0010\u001e\u001a\u00020\u001fH\u0002R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0006X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u0007\u001a\u00020\bX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\t\u001a\u00020\nX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\u000b\u001a\u00020\fX\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u0010\r\u001a\u00020\u000eX\u0082.¢\u0006\u0002\n\u0000R\u000e\u0010\u000f\u001a\u00020\u0010X\u0082\u000e¢\u0006\u0002\n\u0000R\u0012\u0010\u0011\u001a\u00060\u0012j\u0002`\u0013X\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006$"}, d2 = {"Lkotlin/io/LineReader;", "", "()V", "BUFFER_SIZE", "", "byteBuf", "Ljava/nio/ByteBuffer;", "bytes", "", "charBuf", "Ljava/nio/CharBuffer;", "chars", "", "decoder", "Ljava/nio/charset/CharsetDecoder;", "directEOL", "", "sb", "Ljava/lang/StringBuilder;", "Lkotlin/text/StringBuilder;", "compactBytes", "decode", "endOfInput", "decodeEndOfInput", "nBytes", "nChars", "readLine", "", "inputStream", "Ljava/io/InputStream;", "charset", "Ljava/nio/charset/Charset;", "resetAll", "", "trimStringBuilder", "updateCharset", "kotlin-stdlib"}, k = 1, mv = {1, 9, 0}, xi = 48)
@SourceDebugExtension({"SMAP\nConsole.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Console.kt\nkotlin/io/LineReader\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,299:1\n1#2:300\n*E\n"})
/* loaded from: classes3.dex */
public final class LineReader {
private static final int BUFFER_SIZE = 32;
public static final LineReader INSTANCE = new LineReader();
private static final ByteBuffer byteBuf;
private static final byte[] bytes;
private static final CharBuffer charBuf;
private static final char[] chars;
private static CharsetDecoder decoder;
private static boolean directEOL;
private static final StringBuilder sb;
static {
byte[] bArr = new byte[32];
bytes = bArr;
char[] cArr = new char[32];
chars = cArr;
ByteBuffer wrap = ByteBuffer.wrap(bArr);
Intrinsics.checkNotNullExpressionValue(wrap, "wrap(...)");
byteBuf = wrap;
CharBuffer wrap2 = CharBuffer.wrap(cArr);
Intrinsics.checkNotNullExpressionValue(wrap2, "wrap(...)");
charBuf = wrap2;
sb = new StringBuilder();
}
private LineReader() {
}
private final int compactBytes() {
ByteBuffer byteBuffer = byteBuf;
byteBuffer.compact();
int position = byteBuffer.position();
byteBuffer.position(0);
return position;
}
private final int decode(boolean endOfInput) {
while (true) {
CharsetDecoder charsetDecoder = decoder;
if (charsetDecoder == null) {
Intrinsics.throwUninitializedPropertyAccessException("decoder");
charsetDecoder = null;
}
ByteBuffer byteBuffer = byteBuf;
CharBuffer charBuffer = charBuf;
CoderResult decode = charsetDecoder.decode(byteBuffer, charBuffer, endOfInput);
Intrinsics.checkNotNullExpressionValue(decode, "decode(...)");
if (decode.isError()) {
resetAll();
decode.throwException();
}
int position = charBuffer.position();
if (!decode.isOverflow()) {
return position;
}
StringBuilder sb2 = sb;
char[] cArr = chars;
int i = position - 1;
sb2.append(cArr, 0, i);
charBuffer.position(0);
charBuffer.limit(32);
charBuffer.put(cArr[i]);
}
}
private final int decodeEndOfInput(int nBytes, int nChars) {
ByteBuffer byteBuffer = byteBuf;
byteBuffer.limit(nBytes);
charBuf.position(nChars);
int decode = decode(true);
CharsetDecoder charsetDecoder = decoder;
if (charsetDecoder == null) {
Intrinsics.throwUninitializedPropertyAccessException("decoder");
charsetDecoder = null;
}
charsetDecoder.reset();
byteBuffer.position(0);
return decode;
}
private final void resetAll() {
CharsetDecoder charsetDecoder = decoder;
if (charsetDecoder == null) {
Intrinsics.throwUninitializedPropertyAccessException("decoder");
charsetDecoder = null;
}
charsetDecoder.reset();
byteBuf.position(0);
sb.setLength(0);
}
private final void trimStringBuilder() {
StringBuilder sb2 = sb;
sb2.setLength(32);
sb2.trimToSize();
}
private final void updateCharset(Charset charset) {
CharsetDecoder newDecoder = charset.newDecoder();
Intrinsics.checkNotNullExpressionValue(newDecoder, "newDecoder(...)");
decoder = newDecoder;
ByteBuffer byteBuffer = byteBuf;
byteBuffer.clear();
CharBuffer charBuffer = charBuf;
charBuffer.clear();
byteBuffer.put((byte) 10);
byteBuffer.flip();
CharsetDecoder charsetDecoder = decoder;
if (charsetDecoder == null) {
Intrinsics.throwUninitializedPropertyAccessException("decoder");
charsetDecoder = null;
}
boolean z3 = false;
charsetDecoder.decode(byteBuffer, charBuffer, false);
if (charBuffer.position() == 1 && charBuffer.get(0) == '\n') {
z3 = true;
}
directEOL = z3;
resetAll();
}
/* JADX WARN: Code restructure failed: missing block: B:25:0x0078, code lost:
if (r10 <= 0) goto L43;
*/
/* JADX WARN: Code restructure failed: missing block: B:26:0x007a, code lost:
r0 = kotlin.io.LineReader.chars;
*/
/* JADX WARN: Code restructure failed: missing block: B:27:0x0080, code lost:
if (r0[r10 - 1] != '\n') goto L43;
*/
/* JADX WARN: Code restructure failed: missing block: B:28:0x0082, code lost:
r1 = r10 - 1;
*/
/* JADX WARN: Code restructure failed: missing block: B:29:0x0084, code lost:
if (r1 <= 0) goto L42;
*/
/* JADX WARN: Code restructure failed: missing block: B:31:0x008c, code lost:
if (r0[r10 - 2] != '\r') goto L42;
*/
/* JADX WARN: Code restructure failed: missing block: B:32:0x008e, code lost:
r10 = r10 - 2;
*/
/* JADX WARN: Code restructure failed: missing block: B:33:0x0091, code lost:
r10 = r1;
*/
/* JADX WARN: Code restructure failed: missing block: B:34:0x0092, code lost:
r0 = kotlin.io.LineReader.sb;
*/
/* JADX WARN: Code restructure failed: missing block: B:35:0x0098, code lost:
if (r0.length() != 0) goto L48;
*/
/* JADX WARN: Code restructure failed: missing block: B:38:0x00a2, code lost:
return new java.lang.String(kotlin.io.LineReader.chars, 0, r10);
*/
/* JADX WARN: Code restructure failed: missing block: B:40:0x00a3, code lost:
r0.append(kotlin.io.LineReader.chars, 0, r10);
r10 = r0.toString();
kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r10, "toString(...)");
*/
/* JADX WARN: Code restructure failed: missing block: B:41:0x00b5, code lost:
if (r0.length() <= 32) goto L51;
*/
/* JADX WARN: Code restructure failed: missing block: B:42:0x00b7, code lost:
trimStringBuilder();
*/
/* JADX WARN: Code restructure failed: missing block: B:43:0x00ba, code lost:
r0.setLength(0);
*/
/* JADX WARN: Code restructure failed: missing block: B:45:0x00be, code lost:
return r10;
*/
/* JADX WARN: Code restructure failed: missing block: B:8:0x0024, code lost:
if (kotlin.jvm.internal.Intrinsics.areEqual(r0.charset(), r11) == false) goto L11;
*/
/*
Code decompiled incorrectly, please refer to instructions dump.
To view partially-correct add '--show-bad-code' argument
*/
public final synchronized java.lang.String readLine(java.io.InputStream r10, java.nio.charset.Charset r11) {
/*
r9 = this;
monitor-enter(r9)
java.lang.String r0 = "inputStream"
kotlin.jvm.internal.Intrinsics.checkNotNullParameter(r10, r0) // Catch: java.lang.Throwable -> L19
java.lang.String r0 = "charset"
kotlin.jvm.internal.Intrinsics.checkNotNullParameter(r11, r0) // Catch: java.lang.Throwable -> L19
java.nio.charset.CharsetDecoder r0 = kotlin.io.LineReader.decoder // Catch: java.lang.Throwable -> L19
r1 = 0
if (r0 == 0) goto L26
if (r0 != 0) goto L1c
java.lang.String r0 = "decoder"
kotlin.jvm.internal.Intrinsics.throwUninitializedPropertyAccessException(r0) // Catch: java.lang.Throwable -> L19
r0 = r1
goto L1c
L19:
r10 = move-exception
goto Lc5
L1c:
java.nio.charset.Charset r0 = r0.charset() // Catch: java.lang.Throwable -> L19
boolean r0 = kotlin.jvm.internal.Intrinsics.areEqual(r0, r11) // Catch: java.lang.Throwable -> L19
if (r0 != 0) goto L29
L26:
r9.updateCharset(r11) // Catch: java.lang.Throwable -> L19
L29:
r11 = 0
r0 = r11
r2 = r0
L2c:
int r3 = r10.read() // Catch: java.lang.Throwable -> L19
r4 = 32
r5 = -1
r6 = 10
if (r3 != r5) goto L4a
java.lang.StringBuilder r10 = kotlin.io.LineReader.sb // Catch: java.lang.Throwable -> L19
int r10 = r10.length() // Catch: java.lang.Throwable -> L19
if (r10 != 0) goto L45
if (r0 != 0) goto L45
if (r2 != 0) goto L45
monitor-exit(r9)
return r1
L45:
int r10 = r9.decodeEndOfInput(r0, r2) // Catch: java.lang.Throwable -> L19
goto L78
L4a:
byte[] r5 = kotlin.io.LineReader.bytes // Catch: java.lang.Throwable -> L19
int r7 = r0 + 1
byte r8 = (byte) r3 // Catch: java.lang.Throwable -> L19
r5[r0] = r8 // Catch: java.lang.Throwable -> L19
if (r3 == r6) goto L5c
if (r7 == r4) goto L5c
boolean r0 = kotlin.io.LineReader.directEOL // Catch: java.lang.Throwable -> L19
if (r0 != 0) goto L5a
goto L5c
L5a:
r0 = r7
goto L2c
L5c:
java.nio.ByteBuffer r0 = kotlin.io.LineReader.byteBuf // Catch: java.lang.Throwable -> L19
r0.limit(r7) // Catch: java.lang.Throwable -> L19
java.nio.CharBuffer r3 = kotlin.io.LineReader.charBuf // Catch: java.lang.Throwable -> L19
r3.position(r2) // Catch: java.lang.Throwable -> L19
int r2 = r9.decode(r11) // Catch: java.lang.Throwable -> L19
if (r2 <= 0) goto Lbf
char[] r3 = kotlin.io.LineReader.chars // Catch: java.lang.Throwable -> L19
int r5 = r2 + (-1)
char r3 = r3[r5] // Catch: java.lang.Throwable -> L19
if (r3 != r6) goto Lbf
r0.position(r11) // Catch: java.lang.Throwable -> L19
r10 = r2
L78:
if (r10 <= 0) goto L92
char[] r0 = kotlin.io.LineReader.chars // Catch: java.lang.Throwable -> L19
int r1 = r10 + (-1)
char r1 = r0[r1] // Catch: java.lang.Throwable -> L19
if (r1 != r6) goto L92
int r1 = r10 + (-1)
if (r1 <= 0) goto L91
int r2 = r10 + (-2)
char r0 = r0[r2] // Catch: java.lang.Throwable -> L19
r2 = 13
if (r0 != r2) goto L91
int r10 = r10 + (-2)
goto L92
L91:
r10 = r1
L92:
java.lang.StringBuilder r0 = kotlin.io.LineReader.sb // Catch: java.lang.Throwable -> L19
int r1 = r0.length() // Catch: java.lang.Throwable -> L19
if (r1 != 0) goto La3
java.lang.String r0 = new java.lang.String // Catch: java.lang.Throwable -> L19
char[] r1 = kotlin.io.LineReader.chars // Catch: java.lang.Throwable -> L19
r0.<init>(r1, r11, r10) // Catch: java.lang.Throwable -> L19
monitor-exit(r9)
return r0
La3:
char[] r1 = kotlin.io.LineReader.chars // Catch: java.lang.Throwable -> L19
r0.append(r1, r11, r10) // Catch: java.lang.Throwable -> L19
java.lang.String r10 = r0.toString() // Catch: java.lang.Throwable -> L19
java.lang.String r1 = "toString(...)"
kotlin.jvm.internal.Intrinsics.checkNotNullExpressionValue(r10, r1) // Catch: java.lang.Throwable -> L19
int r1 = r0.length() // Catch: java.lang.Throwable -> L19
if (r1 <= r4) goto Lba
r9.trimStringBuilder() // Catch: java.lang.Throwable -> L19
Lba:
r0.setLength(r11) // Catch: java.lang.Throwable -> L19
monitor-exit(r9)
return r10
Lbf:
int r0 = r9.compactBytes() // Catch: java.lang.Throwable -> L19
goto L2c
Lc5:
monitor-exit(r9) // Catch: java.lang.Throwable -> L19
throw r10
*/
throw new UnsupportedOperationException("Method not decompiled: kotlin.io.LineReader.readLine(java.io.InputStream, java.nio.charset.Charset):java.lang.String");
}
}