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:
328
apk_decompiled/sources/kotlin/io/LineReader.java
Normal file
328
apk_decompiled/sources/kotlin/io/LineReader.java
Normal 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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user