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:
296
apk_decompiled/sources/kotlin/random/Random.java
Normal file
296
apk_decompiled/sources/kotlin/random/Random.java
Normal file
@@ -0,0 +1,296 @@
|
||||
package kotlin.random;
|
||||
|
||||
import C.w;
|
||||
import com.google.firebase.messaging.Constants;
|
||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig;
|
||||
import java.io.Serializable;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.SinceKotlin;
|
||||
import kotlin.internal.PlatformImplementationsKt;
|
||||
import kotlin.jvm.internal.DefaultConstructorMarker;
|
||||
import kotlin.jvm.internal.Intrinsics;
|
||||
import kotlin.jvm.internal.SourceDebugExtension;
|
||||
import kotlin.ranges.IntRange;
|
||||
|
||||
@SinceKotlin(version = "1.3")
|
||||
@Metadata(d1 = {"\u0000:\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010\u0012\n\u0002\b\u0005\n\u0002\u0010\u0006\n\u0002\b\u0003\n\u0002\u0010\u0007\n\u0002\b\u0002\n\u0002\u0010\t\n\u0002\b\u0002\b'\u0018\u0000 \u00172\u00020\u0001:\u0001\u0017B\u0005¢\u0006\u0002\u0010\u0002J\u0010\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u0004H&J\b\u0010\u0006\u001a\u00020\u0007H\u0016J\u0010\u0010\b\u001a\u00020\t2\u0006\u0010\n\u001a\u00020\tH\u0016J$\u0010\b\u001a\u00020\t2\u0006\u0010\n\u001a\u00020\t2\b\b\u0002\u0010\u000b\u001a\u00020\u00042\b\b\u0002\u0010\f\u001a\u00020\u0004H\u0016J\u0010\u0010\b\u001a\u00020\t2\u0006\u0010\r\u001a\u00020\u0004H\u0016J\b\u0010\u000e\u001a\u00020\u000fH\u0016J\u0010\u0010\u000e\u001a\u00020\u000f2\u0006\u0010\u0010\u001a\u00020\u000fH\u0016J\u0018\u0010\u000e\u001a\u00020\u000f2\u0006\u0010\u0011\u001a\u00020\u000f2\u0006\u0010\u0010\u001a\u00020\u000fH\u0016J\b\u0010\u0012\u001a\u00020\u0013H\u0016J\b\u0010\u0014\u001a\u00020\u0004H\u0016J\u0010\u0010\u0014\u001a\u00020\u00042\u0006\u0010\u0010\u001a\u00020\u0004H\u0016J\u0018\u0010\u0014\u001a\u00020\u00042\u0006\u0010\u0011\u001a\u00020\u00042\u0006\u0010\u0010\u001a\u00020\u0004H\u0016J\b\u0010\u0015\u001a\u00020\u0016H\u0016J\u0010\u0010\u0015\u001a\u00020\u00162\u0006\u0010\u0010\u001a\u00020\u0016H\u0016J\u0018\u0010\u0015\u001a\u00020\u00162\u0006\u0010\u0011\u001a\u00020\u00162\u0006\u0010\u0010\u001a\u00020\u0016H\u0016¨\u0006\u0018"}, d2 = {"Lkotlin/random/Random;", "", "()V", "nextBits", "", "bitCount", "nextBoolean", "", "nextBytes", "", "array", "fromIndex", "toIndex", "size", "nextDouble", "", "until", Constants.MessagePayloadKeys.FROM, "nextFloat", "", "nextInt", "nextLong", "", "Default", "kotlin-stdlib"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nRandom.kt\nKotlin\n*S Kotlin\n*F\n+ 1 Random.kt\nkotlin/random/Random\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,383:1\n1#2:384\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
public abstract class Random {
|
||||
|
||||
/* renamed from: Default, reason: from kotlin metadata */
|
||||
public static final Companion INSTANCE = new Companion(null);
|
||||
private static final Random defaultRandom = PlatformImplementationsKt.IMPLEMENTATIONS.defaultPlatformRandom();
|
||||
|
||||
@Metadata(d1 = {"\u0000H\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010\u0012\n\u0002\b\u0005\n\u0002\u0010\u0006\n\u0002\b\u0003\n\u0002\u0010\u0007\n\u0002\b\u0002\n\u0002\u0010\t\n\u0000\n\u0002\u0010\u0000\n\u0002\b\u0002\b\u0086\u0003\u0018\u00002\u00020\u00012\u00060\u0002j\u0002`\u0003:\u0001\u001cB\u0007\b\u0002¢\u0006\u0002\u0010\u0004J\u0010\u0010\u0006\u001a\u00020\u00072\u0006\u0010\b\u001a\u00020\u0007H\u0016J\b\u0010\t\u001a\u00020\nH\u0016J\u0010\u0010\u000b\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\fH\u0016J \u0010\u000b\u001a\u00020\f2\u0006\u0010\r\u001a\u00020\f2\u0006\u0010\u000e\u001a\u00020\u00072\u0006\u0010\u000f\u001a\u00020\u0007H\u0016J\u0010\u0010\u000b\u001a\u00020\f2\u0006\u0010\u0010\u001a\u00020\u0007H\u0016J\b\u0010\u0011\u001a\u00020\u0012H\u0016J\u0010\u0010\u0011\u001a\u00020\u00122\u0006\u0010\u0013\u001a\u00020\u0012H\u0016J\u0018\u0010\u0011\u001a\u00020\u00122\u0006\u0010\u0014\u001a\u00020\u00122\u0006\u0010\u0013\u001a\u00020\u0012H\u0016J\b\u0010\u0015\u001a\u00020\u0016H\u0016J\b\u0010\u0017\u001a\u00020\u0007H\u0016J\u0010\u0010\u0017\u001a\u00020\u00072\u0006\u0010\u0013\u001a\u00020\u0007H\u0016J\u0018\u0010\u0017\u001a\u00020\u00072\u0006\u0010\u0014\u001a\u00020\u00072\u0006\u0010\u0013\u001a\u00020\u0007H\u0016J\b\u0010\u0018\u001a\u00020\u0019H\u0016J\u0010\u0010\u0018\u001a\u00020\u00192\u0006\u0010\u0013\u001a\u00020\u0019H\u0016J\u0018\u0010\u0018\u001a\u00020\u00192\u0006\u0010\u0014\u001a\u00020\u00192\u0006\u0010\u0013\u001a\u00020\u0019H\u0016J\b\u0010\u001a\u001a\u00020\u001bH\u0002R\u000e\u0010\u0005\u001a\u00020\u0001X\u0082\u0004¢\u0006\u0002\n\u0000¨\u0006\u001d"}, d2 = {"Lkotlin/random/Random$Default;", "Lkotlin/random/Random;", "Ljava/io/Serializable;", "Lkotlin/io/Serializable;", "()V", "defaultRandom", "nextBits", "", "bitCount", "nextBoolean", "", "nextBytes", "", "array", "fromIndex", "toIndex", "size", "nextDouble", "", "until", Constants.MessagePayloadKeys.FROM, "nextFloat", "", "nextInt", "nextLong", "", "writeReplace", "", "Serialized", "kotlin-stdlib"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
/* renamed from: kotlin.random.Random$Default, reason: from kotlin metadata */
|
||||
/* loaded from: classes3.dex */
|
||||
public static final class Companion extends Random implements Serializable {
|
||||
|
||||
@Metadata(d1 = {"\u0000\u001c\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\t\n\u0000\n\u0002\u0010\u0000\n\u0000\bÂ\u0002\u0018\u00002\u00060\u0001j\u0002`\u0002B\u0007\b\u0002¢\u0006\u0002\u0010\u0003J\b\u0010\u0006\u001a\u00020\u0007H\u0002R\u000e\u0010\u0004\u001a\u00020\u0005X\u0082T¢\u0006\u0002\n\u0000¨\u0006\b"}, d2 = {"Lkotlin/random/Random$Default$Serialized;", "Ljava/io/Serializable;", "Lkotlin/io/Serializable;", "()V", "serialVersionUID", "", "readResolve", "", "kotlin-stdlib"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
/* renamed from: kotlin.random.Random$Default$Serialized */
|
||||
/* loaded from: classes3.dex */
|
||||
public static final class Serialized implements Serializable {
|
||||
public static final Serialized INSTANCE = new Serialized();
|
||||
private static final long serialVersionUID = 0;
|
||||
|
||||
private Serialized() {
|
||||
}
|
||||
|
||||
private final Object readResolve() {
|
||||
return Random.INSTANCE;
|
||||
}
|
||||
}
|
||||
|
||||
public /* synthetic */ Companion(DefaultConstructorMarker defaultConstructorMarker) {
|
||||
this();
|
||||
}
|
||||
|
||||
private final Object writeReplace() {
|
||||
return Serialized.INSTANCE;
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public int nextBits(int bitCount) {
|
||||
return Random.defaultRandom.nextBits(bitCount);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public boolean nextBoolean() {
|
||||
return Random.defaultRandom.nextBoolean();
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public byte[] nextBytes(byte[] array) {
|
||||
Intrinsics.checkNotNullParameter(array, "array");
|
||||
return Random.defaultRandom.nextBytes(array);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public double nextDouble() {
|
||||
return Random.defaultRandom.nextDouble();
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public float nextFloat() {
|
||||
return Random.defaultRandom.nextFloat();
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public int nextInt() {
|
||||
return Random.defaultRandom.nextInt();
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public long nextLong() {
|
||||
return Random.defaultRandom.nextLong();
|
||||
}
|
||||
|
||||
private Companion() {
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public byte[] nextBytes(int size) {
|
||||
return Random.defaultRandom.nextBytes(size);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public double nextDouble(double until) {
|
||||
return Random.defaultRandom.nextDouble(until);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public int nextInt(int until) {
|
||||
return Random.defaultRandom.nextInt(until);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public long nextLong(long until) {
|
||||
return Random.defaultRandom.nextLong(until);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public byte[] nextBytes(byte[] array, int fromIndex, int toIndex) {
|
||||
Intrinsics.checkNotNullParameter(array, "array");
|
||||
return Random.defaultRandom.nextBytes(array, fromIndex, toIndex);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public double nextDouble(double from, double until) {
|
||||
return Random.defaultRandom.nextDouble(from, until);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public int nextInt(int from, int until) {
|
||||
return Random.defaultRandom.nextInt(from, until);
|
||||
}
|
||||
|
||||
@Override // kotlin.random.Random
|
||||
public long nextLong(long from, long until) {
|
||||
return Random.defaultRandom.nextLong(from, until);
|
||||
}
|
||||
}
|
||||
|
||||
public static /* synthetic */ byte[] nextBytes$default(Random random, byte[] bArr, int i, int i4, int i5, Object obj) {
|
||||
if (obj != null) {
|
||||
throw new UnsupportedOperationException("Super calls with default arguments not supported in this target, function: nextBytes");
|
||||
}
|
||||
if ((i5 & 2) != 0) {
|
||||
i = 0;
|
||||
}
|
||||
if ((i5 & 4) != 0) {
|
||||
i4 = bArr.length;
|
||||
}
|
||||
return random.nextBytes(bArr, i, i4);
|
||||
}
|
||||
|
||||
public abstract int nextBits(int bitCount);
|
||||
|
||||
public boolean nextBoolean() {
|
||||
return nextBits(1) != 0;
|
||||
}
|
||||
|
||||
public byte[] nextBytes(byte[] array, int fromIndex, int toIndex) {
|
||||
Intrinsics.checkNotNullParameter(array, "array");
|
||||
if (!new IntRange(0, array.length).contains(fromIndex) || !new IntRange(0, array.length).contains(toIndex)) {
|
||||
StringBuilder sb = new StringBuilder("fromIndex (");
|
||||
sb.append(fromIndex);
|
||||
sb.append(") or toIndex (");
|
||||
sb.append(toIndex);
|
||||
sb.append(") are out of range: 0..");
|
||||
throw new IllegalArgumentException(w.p(sb, array.length, '.').toString());
|
||||
}
|
||||
if (fromIndex <= toIndex) {
|
||||
int i = (toIndex - fromIndex) / 4;
|
||||
for (int i4 = 0; i4 < i; i4++) {
|
||||
int nextInt = nextInt();
|
||||
array[fromIndex] = (byte) nextInt;
|
||||
array[fromIndex + 1] = (byte) (nextInt >>> 8);
|
||||
array[fromIndex + 2] = (byte) (nextInt >>> 16);
|
||||
array[fromIndex + 3] = (byte) (nextInt >>> 24);
|
||||
fromIndex += 4;
|
||||
}
|
||||
int i5 = toIndex - fromIndex;
|
||||
int nextBits = nextBits(i5 * 8);
|
||||
for (int i6 = 0; i6 < i5; i6++) {
|
||||
array[fromIndex + i6] = (byte) (nextBits >>> (i6 * 8));
|
||||
}
|
||||
return array;
|
||||
}
|
||||
throw new IllegalArgumentException(("fromIndex (" + fromIndex + ") must be not greater than toIndex (" + toIndex + ").").toString());
|
||||
}
|
||||
|
||||
public double nextDouble() {
|
||||
return PlatformRandomKt.doubleFromParts(nextBits(26), nextBits(27));
|
||||
}
|
||||
|
||||
public float nextFloat() {
|
||||
return nextBits(24) / 1.6777216E7f;
|
||||
}
|
||||
|
||||
public int nextInt() {
|
||||
return nextBits(32);
|
||||
}
|
||||
|
||||
public long nextLong() {
|
||||
return (nextInt() << 32) + nextInt();
|
||||
}
|
||||
|
||||
public double nextDouble(double until) {
|
||||
return nextDouble(FirebaseRemoteConfig.DEFAULT_VALUE_FOR_DOUBLE, until);
|
||||
}
|
||||
|
||||
public int nextInt(int until) {
|
||||
return nextInt(0, until);
|
||||
}
|
||||
|
||||
public long nextLong(long until) {
|
||||
return nextLong(0L, until);
|
||||
}
|
||||
|
||||
public double nextDouble(double from, double until) {
|
||||
double nextDouble;
|
||||
RandomKt.checkRangeBounds(from, until);
|
||||
double d4 = until - from;
|
||||
if (Double.isInfinite(d4) && !Double.isInfinite(from) && !Double.isNaN(from) && !Double.isInfinite(until) && !Double.isNaN(until)) {
|
||||
double d5 = 2;
|
||||
double nextDouble2 = ((until / d5) - (from / d5)) * nextDouble();
|
||||
nextDouble = from + nextDouble2 + nextDouble2;
|
||||
} else {
|
||||
nextDouble = from + (nextDouble() * d4);
|
||||
}
|
||||
return nextDouble >= until ? Math.nextAfter(until, Double.NEGATIVE_INFINITY) : nextDouble;
|
||||
}
|
||||
|
||||
public int nextInt(int from, int until) {
|
||||
int nextInt;
|
||||
int i;
|
||||
int i4;
|
||||
RandomKt.checkRangeBounds(from, until);
|
||||
int i5 = until - from;
|
||||
if (i5 > 0 || i5 == Integer.MIN_VALUE) {
|
||||
if (((-i5) & i5) == i5) {
|
||||
i4 = nextBits(RandomKt.fastLog2(i5));
|
||||
return from + i4;
|
||||
}
|
||||
do {
|
||||
nextInt = nextInt() >>> 1;
|
||||
i = nextInt % i5;
|
||||
} while ((i5 - 1) + (nextInt - i) < 0);
|
||||
i4 = i;
|
||||
return from + i4;
|
||||
}
|
||||
while (true) {
|
||||
int nextInt2 = nextInt();
|
||||
if (from <= nextInt2 && nextInt2 < until) {
|
||||
return nextInt2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public long nextLong(long from, long until) {
|
||||
long nextLong;
|
||||
long j4;
|
||||
long j5;
|
||||
int nextInt;
|
||||
RandomKt.checkRangeBounds(from, until);
|
||||
long j6 = until - from;
|
||||
if (j6 > 0) {
|
||||
if (((-j6) & j6) == j6) {
|
||||
int i = (int) j6;
|
||||
int i4 = (int) (j6 >>> 32);
|
||||
if (i != 0) {
|
||||
nextInt = nextBits(RandomKt.fastLog2(i));
|
||||
} else if (i4 == 1) {
|
||||
nextInt = nextInt();
|
||||
} else {
|
||||
j5 = (nextBits(RandomKt.fastLog2(i4)) << 32) + (nextInt() & 4294967295L);
|
||||
return from + j5;
|
||||
}
|
||||
j5 = nextInt & 4294967295L;
|
||||
return from + j5;
|
||||
}
|
||||
do {
|
||||
nextLong = nextLong() >>> 1;
|
||||
j4 = nextLong % j6;
|
||||
} while ((j6 - 1) + (nextLong - j4) < 0);
|
||||
j5 = j4;
|
||||
return from + j5;
|
||||
}
|
||||
while (true) {
|
||||
long nextLong2 = nextLong();
|
||||
if (from <= nextLong2 && nextLong2 < until) {
|
||||
return nextLong2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public byte[] nextBytes(byte[] array) {
|
||||
Intrinsics.checkNotNullParameter(array, "array");
|
||||
return nextBytes(array, 0, array.length);
|
||||
}
|
||||
|
||||
public byte[] nextBytes(int size) {
|
||||
return nextBytes(new byte[size]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user