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:
171
apk_decompiled/sources/kotlin/collections/RingBuffer.java
Normal file
171
apk_decompiled/sources/kotlin/collections/RingBuffer.java
Normal file
@@ -0,0 +1,171 @@
|
||||
package kotlin.collections;
|
||||
|
||||
import C.w;
|
||||
import com.google.android.gms.measurement.internal.a;
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.RandomAccess;
|
||||
import kotlin.Metadata;
|
||||
import kotlin.jvm.internal.Intrinsics;
|
||||
import kotlin.jvm.internal.SourceDebugExtension;
|
||||
import kotlin.ranges.RangesKt;
|
||||
|
||||
@Metadata(d1 = {"\u0000>\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u0011\n\u0002\u0010\u0000\n\u0002\b\t\n\u0002\u0010\u0002\n\u0002\b\b\n\u0002\u0010\u000b\n\u0000\n\u0002\u0010(\n\u0002\b\b\b\u0002\u0018\u0000*\u0004\b\u0000\u0010\u00012\b\u0012\u0004\u0012\u0002H\u00010\u00022\u00060\u0003j\u0002`\u0004B\u000f\b\u0016\u0012\u0006\u0010\u0005\u001a\u00020\u0006¢\u0006\u0002\u0010\u0007B\u001d\u0012\u000e\u0010\b\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\n0\t\u0012\u0006\u0010\u000b\u001a\u00020\u0006¢\u0006\u0002\u0010\fJ\u0013\u0010\u0013\u001a\u00020\u00142\u0006\u0010\u0015\u001a\u00028\u0000¢\u0006\u0002\u0010\u0016J\u0014\u0010\u0017\u001a\b\u0012\u0004\u0012\u00028\u00000\u00002\u0006\u0010\u0018\u001a\u00020\u0006J\u0016\u0010\u0019\u001a\u00028\u00002\u0006\u0010\u001a\u001a\u00020\u0006H\u0096\u0002¢\u0006\u0002\u0010\u001bJ\u0006\u0010\u001c\u001a\u00020\u001dJ\u000f\u0010\u001e\u001a\b\u0012\u0004\u0012\u00028\u00000\u001fH\u0096\u0002J\u000e\u0010 \u001a\u00020\u00142\u0006\u0010!\u001a\u00020\u0006J\u0015\u0010\"\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\n0\tH\u0014¢\u0006\u0002\u0010#J'\u0010\"\u001a\b\u0012\u0004\u0012\u0002H\u00010\t\"\u0004\b\u0001\u0010\u00012\f\u0010$\u001a\b\u0012\u0004\u0012\u0002H\u00010\tH\u0014¢\u0006\u0002\u0010%J\u0015\u0010&\u001a\u00020\u0006*\u00020\u00062\u0006\u0010!\u001a\u00020\u0006H\u0082\bR\u0018\u0010\b\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\n0\tX\u0082\u0004¢\u0006\u0004\n\u0002\u0010\rR\u000e\u0010\u0005\u001a\u00020\u0006X\u0082\u0004¢\u0006\u0002\n\u0000R\u001e\u0010\u000f\u001a\u00020\u00062\u0006\u0010\u000e\u001a\u00020\u0006@RX\u0096\u000e¢\u0006\b\n\u0000\u001a\u0004\b\u0010\u0010\u0011R\u000e\u0010\u0012\u001a\u00020\u0006X\u0082\u000e¢\u0006\u0002\n\u0000¨\u0006'"}, d2 = {"Lkotlin/collections/RingBuffer;", "T", "Lkotlin/collections/AbstractList;", "Ljava/util/RandomAccess;", "Lkotlin/collections/RandomAccess;", "capacity", "", "(I)V", "buffer", "", "", "filledSize", "([Ljava/lang/Object;I)V", "[Ljava/lang/Object;", "<set-?>", "size", "getSize", "()I", "startIndex", "add", "", "element", "(Ljava/lang/Object;)V", "expanded", "maxCapacity", "get", FirebaseAnalytics.Param.INDEX, "(I)Ljava/lang/Object;", "isFull", "", "iterator", "", "removeFirst", "n", "toArray", "()[Ljava/lang/Object;", "array", "([Ljava/lang/Object;)[Ljava/lang/Object;", "forward", "kotlin-stdlib"}, k = 1, mv = {1, 9, 0}, xi = 48)
|
||||
@SourceDebugExtension({"SMAP\nSlidingWindow.kt\nKotlin\n*S Kotlin\n*F\n+ 1 SlidingWindow.kt\nkotlin/collections/RingBuffer\n+ 2 fake.kt\nkotlin/jvm/internal/FakeKt\n*L\n1#1,206:1\n204#1:208\n204#1:209\n204#1:210\n1#2:207\n*S KotlinDebug\n*F\n+ 1 SlidingWindow.kt\nkotlin/collections/RingBuffer\n*L\n106#1:208\n175#1:209\n188#1:210\n*E\n"})
|
||||
/* loaded from: classes3.dex */
|
||||
final class RingBuffer<T> extends AbstractList<T> implements RandomAccess {
|
||||
private final Object[] buffer;
|
||||
private final int capacity;
|
||||
private int size;
|
||||
private int startIndex;
|
||||
|
||||
public RingBuffer(Object[] buffer, int i) {
|
||||
Intrinsics.checkNotNullParameter(buffer, "buffer");
|
||||
this.buffer = buffer;
|
||||
if (i >= 0) {
|
||||
if (i <= buffer.length) {
|
||||
this.capacity = buffer.length;
|
||||
this.size = i;
|
||||
return;
|
||||
} else {
|
||||
StringBuilder t2 = w.t(i, "ring buffer filled size: ", " cannot be larger than the buffer size: ");
|
||||
t2.append(buffer.length);
|
||||
throw new IllegalArgumentException(t2.toString().toString());
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException(a.l(i, "ring buffer filled size should not be negative but it is ").toString());
|
||||
}
|
||||
|
||||
private final int forward(int i, int i4) {
|
||||
return (i + i4) % this.capacity;
|
||||
}
|
||||
|
||||
@Override // java.util.Collection, java.util.List
|
||||
public final void add(T element) {
|
||||
if (isFull()) {
|
||||
throw new IllegalStateException("ring buffer is full");
|
||||
}
|
||||
this.buffer[(size() + this.startIndex) % this.capacity] = element;
|
||||
this.size = size() + 1;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
public final RingBuffer<T> expanded(int maxCapacity) {
|
||||
Object[] array;
|
||||
int i = this.capacity;
|
||||
int coerceAtMost = RangesKt.coerceAtMost(i + (i >> 1) + 1, maxCapacity);
|
||||
if (this.startIndex == 0) {
|
||||
array = Arrays.copyOf(this.buffer, coerceAtMost);
|
||||
Intrinsics.checkNotNullExpressionValue(array, "copyOf(...)");
|
||||
} else {
|
||||
array = toArray(new Object[coerceAtMost]);
|
||||
}
|
||||
return new RingBuffer<>(array, size());
|
||||
}
|
||||
|
||||
@Override // kotlin.collections.AbstractList, java.util.List
|
||||
public T get(int index) {
|
||||
AbstractList.INSTANCE.checkElementIndex$kotlin_stdlib(index, size());
|
||||
return (T) this.buffer[(this.startIndex + index) % this.capacity];
|
||||
}
|
||||
|
||||
@Override // kotlin.collections.AbstractList, kotlin.collections.AbstractCollection
|
||||
/* renamed from: getSize, reason: from getter */
|
||||
public int get_size() {
|
||||
return this.size;
|
||||
}
|
||||
|
||||
public final boolean isFull() {
|
||||
return size() == this.capacity;
|
||||
}
|
||||
|
||||
@Override // kotlin.collections.AbstractList, kotlin.collections.AbstractCollection, java.util.Collection, java.lang.Iterable
|
||||
public Iterator<T> iterator() {
|
||||
return new AbstractIterator<T>(this) { // from class: kotlin.collections.RingBuffer$iterator$1
|
||||
private int count;
|
||||
private int index;
|
||||
final /* synthetic */ RingBuffer<T> this$0;
|
||||
|
||||
{
|
||||
int i;
|
||||
this.this$0 = this;
|
||||
this.count = this.size();
|
||||
i = ((RingBuffer) this).startIndex;
|
||||
this.index = i;
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // kotlin.collections.AbstractIterator
|
||||
public void computeNext() {
|
||||
Object[] objArr;
|
||||
if (this.count == 0) {
|
||||
done();
|
||||
return;
|
||||
}
|
||||
objArr = ((RingBuffer) this.this$0).buffer;
|
||||
setNext(objArr[this.index]);
|
||||
this.index = (this.index + 1) % ((RingBuffer) this.this$0).capacity;
|
||||
this.count--;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public final void removeFirst(int n4) {
|
||||
if (n4 < 0) {
|
||||
throw new IllegalArgumentException(a.l(n4, "n shouldn't be negative but it is ").toString());
|
||||
}
|
||||
if (n4 > size()) {
|
||||
StringBuilder t2 = w.t(n4, "n shouldn't be greater than the buffer size: n = ", ", size = ");
|
||||
t2.append(size());
|
||||
throw new IllegalArgumentException(t2.toString().toString());
|
||||
}
|
||||
if (n4 > 0) {
|
||||
int i = this.startIndex;
|
||||
int i4 = (i + n4) % this.capacity;
|
||||
if (i > i4) {
|
||||
ArraysKt___ArraysJvmKt.fill(this.buffer, (Object) null, i, this.capacity);
|
||||
ArraysKt___ArraysJvmKt.fill(this.buffer, (Object) null, 0, i4);
|
||||
} else {
|
||||
ArraysKt___ArraysJvmKt.fill(this.buffer, (Object) null, i, i4);
|
||||
}
|
||||
this.startIndex = i4;
|
||||
this.size = size() - n4;
|
||||
}
|
||||
}
|
||||
|
||||
@Override // kotlin.collections.AbstractCollection, java.util.Collection
|
||||
public <T> T[] toArray(T[] array) {
|
||||
Intrinsics.checkNotNullParameter(array, "array");
|
||||
int length = array.length;
|
||||
Object[] objArr = array;
|
||||
if (length < size()) {
|
||||
Object[] objArr2 = (T[]) Arrays.copyOf(array, size());
|
||||
Intrinsics.checkNotNullExpressionValue(objArr2, "copyOf(...)");
|
||||
objArr = objArr2;
|
||||
}
|
||||
int size = size();
|
||||
int i = 0;
|
||||
int i4 = 0;
|
||||
for (int i5 = this.startIndex; i4 < size && i5 < this.capacity; i5++) {
|
||||
objArr[i4] = this.buffer[i5];
|
||||
i4++;
|
||||
}
|
||||
while (i4 < size) {
|
||||
objArr[i4] = this.buffer[i];
|
||||
i4++;
|
||||
i++;
|
||||
}
|
||||
return (T[]) CollectionsKt__CollectionsJVMKt.terminateCollectionToArray(size, objArr);
|
||||
}
|
||||
|
||||
/* JADX WARN: Multi-variable type inference failed */
|
||||
@Override // kotlin.collections.AbstractCollection, java.util.Collection
|
||||
public Object[] toArray() {
|
||||
return toArray(new Object[size()]);
|
||||
}
|
||||
|
||||
public RingBuffer(int i) {
|
||||
this(new Object[i], 0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user