(Nov-19-2020, 11:36 PM)bowlofred Wrote: I think you'll need more information on how it was created. I tried running it though the javaobj-py3 decoder (both with and without the first 4 bytes) and it didn't decode it either way.
What more do you need?
I am not relly fluent with Java or serialization.
I think I found the code that converts it, but java seems to be a little more complicated than anything I have programmed before. It looks like it's all functions, and no code that seem to call it.
Here is the code I believe creates the time code
package com.google.gson;
import com.google.gson.internal.C$Gson$Preconditions;
import com.google.gson.internal.Excluder;
import com.google.gson.internal.bind.TreeTypeAdapter;
import com.google.gson.internal.bind.TypeAdapters;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public final class GsonBuilder {
private boolean complexMapKeySerialization = false;
private String datePattern;
private int dateStyle = 2;
private boolean escapeHtmlChars = true;
private Excluder excluder = Excluder.DEFAULT;
private final List<TypeAdapterFactory> factories = new ArrayList();
private FieldNamingStrategy fieldNamingPolicy = FieldNamingPolicy.IDENTITY;
private boolean generateNonExecutableJson = false;
private final List<TypeAdapterFactory> hierarchyFactories = new ArrayList();
private final Map<Type, InstanceCreator<?>> instanceCreators = new HashMap();
private boolean lenient = false;
private LongSerializationPolicy longSerializationPolicy = LongSerializationPolicy.DEFAULT;
private boolean prettyPrinting = false;
private boolean serializeNulls = false;
private boolean serializeSpecialFloatingPointValues = false;
private int timeStyle = 2;
public GsonBuilder() {
}
GsonBuilder(Gson gson) {
this.excluder = gson.excluder;
this.fieldNamingPolicy = gson.fieldNamingStrategy;
this.instanceCreators.putAll(gson.instanceCreators);
this.serializeNulls = gson.serializeNulls;
this.complexMapKeySerialization = gson.complexMapKeySerialization;
this.generateNonExecutableJson = gson.generateNonExecutableJson;
this.escapeHtmlChars = gson.htmlSafe;
this.prettyPrinting = gson.prettyPrinting;
this.lenient = gson.lenient;
this.serializeSpecialFloatingPointValues = gson.serializeSpecialFloatingPointValues;
this.longSerializationPolicy = gson.longSerializationPolicy;
this.datePattern = gson.datePattern;
this.dateStyle = gson.dateStyle;
this.timeStyle = gson.timeStyle;
this.factories.addAll(gson.builderFactories);
this.hierarchyFactories.addAll(gson.builderHierarchyFactories);
}
public GsonBuilder setVersion(double d) {
this.excluder = this.excluder.withVersion(d);
return this;
}
public GsonBuilder excludeFieldsWithModifiers(int... iArr) {
this.excluder = this.excluder.withModifiers(iArr);
return this;
}
public GsonBuilder generateNonExecutableJson() {
this.generateNonExecutableJson = true;
return this;
}
public GsonBuilder excludeFieldsWithoutExposeAnnotation() {
this.excluder = this.excluder.excludeFieldsWithoutExposeAnnotation();
return this;
}
public GsonBuilder serializeNulls() {
this.serializeNulls = true;
return this;
}
public GsonBuilder enableComplexMapKeySerialization() {
this.complexMapKeySerialization = true;
return this;
}
public GsonBuilder disableInnerClassSerialization() {
this.excluder = this.excluder.disableInnerClassSerialization();
return this;
}
public GsonBuilder setLongSerializationPolicy(LongSerializationPolicy longSerializationPolicy2) {
this.longSerializationPolicy = longSerializationPolicy2;
return this;
}
public GsonBuilder setFieldNamingPolicy(FieldNamingPolicy fieldNamingPolicy2) {
this.fieldNamingPolicy = fieldNamingPolicy2;
return this;
}
public GsonBuilder setFieldNamingStrategy(FieldNamingStrategy fieldNamingStrategy) {
this.fieldNamingPolicy = fieldNamingStrategy;
return this;
}
public GsonBuilder setExclusionStrategies(ExclusionStrategy... exclusionStrategyArr) {
for (ExclusionStrategy withExclusionStrategy : exclusionStrategyArr) {
this.excluder = this.excluder.withExclusionStrategy(withExclusionStrategy, true, true);
}
return this;
}
public GsonBuilder addSerializationExclusionStrategy(ExclusionStrategy exclusionStrategy) {
this.excluder = this.excluder.withExclusionStrategy(exclusionStrategy, true, false);
return this;
}
public GsonBuilder addDeserializationExclusionStrategy(ExclusionStrategy exclusionStrategy) {
this.excluder = this.excluder.withExclusionStrategy(exclusionStrategy, false, true);
return this;
}
public GsonBuilder setPrettyPrinting() {
this.prettyPrinting = true;
return this;
}
public GsonBuilder setLenient() {
this.lenient = true;
return this;
}
public GsonBuilder disableHtmlEscaping() {
this.escapeHtmlChars = false;
return this;
}
public GsonBuilder setDateFormat(String str) {
this.datePattern = str;
return this;
}
public GsonBuilder setDateFormat(int i) {
this.dateStyle = i;
this.datePattern = null;
return this;
}
public GsonBuilder setDateFormat(int i, int i2) {
this.dateStyle = i;
this.timeStyle = i2;
this.datePattern = null;
return this;
}
public GsonBuilder registerTypeAdapter(Type type, Object obj) {
boolean z = obj instanceof JsonSerializer;
C$Gson$Preconditions.checkArgument(z || (obj instanceof JsonDeserializer) || (obj instanceof InstanceCreator) || (obj instanceof TypeAdapter));
if (obj instanceof InstanceCreator) {
this.instanceCreators.put(type, (InstanceCreator) obj);
}
if (z || (obj instanceof JsonDeserializer)) {
this.factories.add(TreeTypeAdapter.newFactoryWithMatchRawType(TypeToken.get(type), obj));
}
if (obj instanceof TypeAdapter) {
this.factories.add(TypeAdapters.newFactory(TypeToken.get(type), (TypeAdapter) obj));
}
return this;
}
public GsonBuilder registerTypeAdapterFactory(TypeAdapterFactory typeAdapterFactory) {
this.factories.add(typeAdapterFactory);
return this;
}
public GsonBuilder registerTypeHierarchyAdapter(Class<?> cls, Object obj) {
boolean z = obj instanceof JsonSerializer;
C$Gson$Preconditions.checkArgument(z || (obj instanceof JsonDeserializer) || (obj instanceof TypeAdapter));
if ((obj instanceof JsonDeserializer) || z) {
this.hierarchyFactories.add(TreeTypeAdapter.newTypeHierarchyFactory(cls, obj));
}
if (obj instanceof TypeAdapter) {
this.factories.add(TypeAdapters.newTypeHierarchyFactory(cls, (TypeAdapter) obj));
}
return this;
}
public GsonBuilder serializeSpecialFloatingPointValues() {
this.serializeSpecialFloatingPointValues = true;
return this;
}
public Gson create() {
ArrayList arrayList = r1;
ArrayList arrayList2 = new ArrayList(this.factories.size() + this.hierarchyFactories.size() + 3);
arrayList2.addAll(this.factories);
Collections.reverse(arrayList2);
ArrayList arrayList3 = new ArrayList(this.hierarchyFactories);
Collections.reverse(arrayList3);
arrayList2.addAll(arrayList3);
addTypeAdaptersForDate(this.datePattern, this.dateStyle, this.timeStyle, arrayList2);
return new Gson(this.excluder, this.fieldNamingPolicy, this.instanceCreators, this.serializeNulls, this.complexMapKeySerialization, this.generateNonExecutableJson, this.escapeHtmlChars, this.prettyPrinting, this.lenient, this.serializeSpecialFloatingPointValues, this.longSerializationPolicy, this.datePattern, this.dateStyle, this.timeStyle, this.factories, this.hierarchyFactories, arrayList);
}
private void addTypeAdaptersForDate(String str, int i, int i2, List<TypeAdapterFactory> list) {
DefaultDateTypeAdapter defaultDateTypeAdapter;
DefaultDateTypeAdapter defaultDateTypeAdapter2;
DefaultDateTypeAdapter defaultDateTypeAdapter3;
if (str != null && !"".equals(str.trim())) {
defaultDateTypeAdapter2 = new DefaultDateTypeAdapter((Class<? extends Date>) Date.class, str);
defaultDateTypeAdapter = new DefaultDateTypeAdapter((Class<? extends Date>) Timestamp.class, str);
defaultDateTypeAdapter3 = new DefaultDateTypeAdapter((Class<? extends Date>) java.sql.Date.class, str);
} else if (i != 2 && i2 != 2) {
DefaultDateTypeAdapter defaultDateTypeAdapter4 = new DefaultDateTypeAdapter(Date.class, i, i2);
DefaultDateTypeAdapter defaultDateTypeAdapter5 = new DefaultDateTypeAdapter(Timestamp.class, i, i2);
DefaultDateTypeAdapter defaultDateTypeAdapter6 = new DefaultDateTypeAdapter(java.sql.Date.class, i, i2);
defaultDateTypeAdapter2 = defaultDateTypeAdapter4;
defaultDateTypeAdapter = defaultDateTypeAdapter5;
defaultDateTypeAdapter3 = defaultDateTypeAdapter6;
} else {
return;
}
list.add(TypeAdapters.newFactory(Date.class, defaultDateTypeAdapter2));
list.add(TypeAdapters.newFactory(Timestamp.class, defaultDateTypeAdapter));
list.add(TypeAdapters.newFactory(java.sql.Date.class, defaultDateTypeAdapter3));
}
}