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:
@@ -0,0 +1,178 @@
|
||||
package androidx.datastore.preferences.protobuf;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class M extends LinkedHashMap {
|
||||
|
||||
/* renamed from: b, reason: collision with root package name */
|
||||
public static final M f2857b;
|
||||
|
||||
/* renamed from: a, reason: collision with root package name */
|
||||
public boolean f2858a = true;
|
||||
|
||||
static {
|
||||
M m4 = new M();
|
||||
f2857b = m4;
|
||||
m4.f2858a = false;
|
||||
}
|
||||
|
||||
public final void a() {
|
||||
if (!this.f2858a) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
/* JADX WARN: Type inference failed for: r0v1, types: [java.util.LinkedHashMap, androidx.datastore.preferences.protobuf.M] */
|
||||
public final M b() {
|
||||
if (isEmpty()) {
|
||||
return new M();
|
||||
}
|
||||
?? linkedHashMap = new LinkedHashMap(this);
|
||||
linkedHashMap.f2858a = true;
|
||||
return linkedHashMap;
|
||||
}
|
||||
|
||||
@Override // java.util.LinkedHashMap, java.util.HashMap, java.util.AbstractMap, java.util.Map
|
||||
public final void clear() {
|
||||
a();
|
||||
super.clear();
|
||||
}
|
||||
|
||||
@Override // java.util.LinkedHashMap, java.util.HashMap, java.util.AbstractMap, java.util.Map
|
||||
public final Set entrySet() {
|
||||
return isEmpty() ? Collections.EMPTY_SET : super.entrySet();
|
||||
}
|
||||
|
||||
/* JADX WARN: Removed duplicated region for block: B:7:0x005d A[RETURN] */
|
||||
@Override // java.util.AbstractMap, java.util.Map
|
||||
/*
|
||||
Code decompiled incorrectly, please refer to instructions dump.
|
||||
To view partially-correct add '--show-bad-code' argument
|
||||
*/
|
||||
public final boolean equals(java.lang.Object r6) {
|
||||
/*
|
||||
r5 = this;
|
||||
boolean r0 = r6 instanceof java.util.Map
|
||||
r1 = 0
|
||||
if (r0 == 0) goto L5e
|
||||
java.util.Map r6 = (java.util.Map) r6
|
||||
r0 = 1
|
||||
if (r5 != r6) goto Lc
|
||||
La:
|
||||
r5 = r0
|
||||
goto L5b
|
||||
Lc:
|
||||
int r2 = r5.size()
|
||||
int r3 = r6.size()
|
||||
if (r2 == r3) goto L18
|
||||
L16:
|
||||
r5 = r1
|
||||
goto L5b
|
||||
L18:
|
||||
java.util.Set r5 = r5.entrySet()
|
||||
java.util.Iterator r5 = r5.iterator()
|
||||
L20:
|
||||
boolean r2 = r5.hasNext()
|
||||
if (r2 == 0) goto La
|
||||
java.lang.Object r2 = r5.next()
|
||||
java.util.Map$Entry r2 = (java.util.Map.Entry) r2
|
||||
java.lang.Object r3 = r2.getKey()
|
||||
boolean r3 = r6.containsKey(r3)
|
||||
if (r3 != 0) goto L37
|
||||
goto L16
|
||||
L37:
|
||||
java.lang.Object r3 = r2.getValue()
|
||||
java.lang.Object r2 = r2.getKey()
|
||||
java.lang.Object r2 = r6.get(r2)
|
||||
boolean r4 = r3 instanceof byte[]
|
||||
if (r4 == 0) goto L54
|
||||
boolean r4 = r2 instanceof byte[]
|
||||
if (r4 == 0) goto L54
|
||||
byte[] r3 = (byte[]) r3
|
||||
byte[] r2 = (byte[]) r2
|
||||
boolean r2 = java.util.Arrays.equals(r3, r2)
|
||||
goto L58
|
||||
L54:
|
||||
boolean r2 = r3.equals(r2)
|
||||
L58:
|
||||
if (r2 != 0) goto L20
|
||||
goto L16
|
||||
L5b:
|
||||
if (r5 == 0) goto L5e
|
||||
return r0
|
||||
L5e:
|
||||
return r1
|
||||
*/
|
||||
throw new UnsupportedOperationException("Method not decompiled: androidx.datastore.preferences.protobuf.M.equals(java.lang.Object):boolean");
|
||||
}
|
||||
|
||||
@Override // java.util.AbstractMap, java.util.Map
|
||||
public final int hashCode() {
|
||||
int hashCode;
|
||||
int hashCode2;
|
||||
int i = 0;
|
||||
for (Map.Entry entry : entrySet()) {
|
||||
Object key = entry.getKey();
|
||||
if (key instanceof byte[]) {
|
||||
byte[] bArr = (byte[]) key;
|
||||
Charset charset = AbstractC0133y.f2975a;
|
||||
hashCode = bArr.length;
|
||||
for (byte b4 : bArr) {
|
||||
hashCode = (hashCode * 31) + b4;
|
||||
}
|
||||
if (hashCode == 0) {
|
||||
hashCode = 1;
|
||||
}
|
||||
} else {
|
||||
hashCode = key.hashCode();
|
||||
}
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof byte[]) {
|
||||
byte[] bArr2 = (byte[]) value;
|
||||
Charset charset2 = AbstractC0133y.f2975a;
|
||||
hashCode2 = bArr2.length;
|
||||
for (byte b5 : bArr2) {
|
||||
hashCode2 = (hashCode2 * 31) + b5;
|
||||
}
|
||||
if (hashCode2 == 0) {
|
||||
hashCode2 = 1;
|
||||
}
|
||||
} else {
|
||||
hashCode2 = value.hashCode();
|
||||
}
|
||||
i += hashCode ^ hashCode2;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
@Override // java.util.HashMap, java.util.AbstractMap, java.util.Map
|
||||
public final Object put(Object obj, Object obj2) {
|
||||
a();
|
||||
Charset charset = AbstractC0133y.f2975a;
|
||||
obj.getClass();
|
||||
obj2.getClass();
|
||||
return super.put(obj, obj2);
|
||||
}
|
||||
|
||||
@Override // java.util.HashMap, java.util.AbstractMap, java.util.Map
|
||||
public final void putAll(Map map) {
|
||||
a();
|
||||
for (Object obj : map.keySet()) {
|
||||
Charset charset = AbstractC0133y.f2975a;
|
||||
obj.getClass();
|
||||
map.get(obj).getClass();
|
||||
}
|
||||
super.putAll(map);
|
||||
}
|
||||
|
||||
@Override // java.util.HashMap, java.util.AbstractMap, java.util.Map
|
||||
public final Object remove(Object obj) {
|
||||
a();
|
||||
return super.remove(obj);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user