所以有一个我用过的名为"战争委员会"的应用程序,用来在ASOIAF迷你战争游戏中建立军队名单.它具有列表导出功能,可以导出Base64编码的二进制BLOB,如下所示:
EgVXYXRjaBgFICgoAFoHCIVSELagAVoDCJFSWgMIjFJaAwiRUmCm7gFgse4BYMPtAQ==
个
然后可以将其重新导入到另一部手机上的另一款应用程序中,等等.
当我解码这个和xxd
的时候,我看到:
┌──(admuser㉿wkstation5)-[~]
└─$ xxd decoded2.txt
00000000: 1209 6a6f 6b69 6e20 6361 7618 0620 2828 ..jokin cav.. ((
00000010: 005a 0708 ac51 10c8 9f01 5a07 08ec 5210 .Z...Q....Z...R.
00000020: c99f 015a 0308 f452 5a03 08ee 5260 90ef ...Z...RZ...R`..
00000030: 0160 94ef 0160 92ef 01 .`...`...
这里是另一个:
Eglqb2tpbiBjYXYYBiAoKABaBwisURDInwFaBwjsUhDJnwFaAwj0UloDCO5SYJDvAWCU7wFgku8B
个
┌──(admuser㉿wkstation5)-[~]
└─$ xxd decode.txt
00000000: 1205 5761 7463 6818 0520 2828 005a 0708 ..Watch.. ((.Z..
00000010: 8552 10b6 a001 5a03 0891 525a 0308 8c52 .R....Z...RZ...R
00000020: 5a03 0891 5260 a6ee 0160 b1ee 0160 c3ed Z...R`...`...`..
00000030: 01 .
在上面的观察名单中,应该有一个夜间值班的长矛单位,在战争委员会的数据中ID为10513.但似乎不能从数据中得出这一点.如果它实际上是使用id来存储单位的话,我倾向于这样认为.
我做了一些分析,应用程序将所有单位表示为整数.我注意到Watch
和jokin cav
是我给他们的名单的名字.它似乎总是从12
开始,05
或09
表示后面的字符串的长度.
我还try 用dart和java解码,因为这是用flutter引擎做的,它使用dart并在android上编译成java.
import 'dart:convert';
void main() {
// Your base64 encoded string
String base64EncodedString = 'EgVXYXRjaBgFICgoAFoHCIVSELagAVoDCJFSWgMIjFJaAwiRUmCm7gFgse4BYMPtAQ==';
// Decode the base64 string
String serializedData = utf8.decode(base64.decode(base64EncodedString));
try {
// Try to parse the data as JSON
dynamic deserializedObject = json.decode(serializedData);
// Check if the deserialized object is a JSON-like map or an array of integers
if (deserializedObject is Map) {
print("Deserialized JSON-like object: $deserializedObject");
} else if (deserializedObject is List) {
//} else if (deserializedObject is List && deserializedObject.every((element) => element is int)) {
print("Deserialized array of integers: $deserializedObject");
} else {
print("Deserialized data is of unknown type");
}
} catch (e) {
print("Error during deserialization: $e");
}
}
Java:
import java.io.ByteArrayInputStream;
import java.io.ObjectInputStream;
import java.io.IOException;
import java.util.Base64;
public class Base64Decoder {
public static void main(String[] args) {
String base64EncodedString = "EgVXYXRjaBgFICgoAFoHCIVSELagAVoDCJFSWgMIjFJaAwiRUmCm7gFgse4BYMPtAQ==";
try {
// Decode the base64 string into bytes
byte[] data = Base64.getDecoder().decode(base64EncodedString);
// Attempt to deserialize the object
Object deserializedObject = deserialize(data);
System.out.println("Deserialized object: " + deserializedObject);
} catch (IOException | ClassNotFoundException e) {
System.out.println("Deserialization failed: " + e.getMessage());
}
}
private static Object deserialize(byte[] data) throws IOException, ClassNotFoundException {
try (ByteArrayInputStream bis = new ByteArrayInputStream(data);
ObjectInputStream in = new ObjectInputStream(bis)) {
return in.readObject();
}
}
}
但运气不佳,两人都失败了.
我很好奇是否有人知道这是什么类型的编码/序列化,以及我如何破译它,这样我就可以弄清楚如何编程构建/导入列表到我正在开发的其他产品中.
下面是另一个示例:
EglWaWN0YXJpb24YCCAoKABaAwi4VFoHCLdUEMOiAVoDCLFUWgMItFRaAwiyVGDT8AFg1PABYNXwAQ==
个
└─$ xxd enc.txt
00000000: 1209 5669 6374 6172 696f 6e18 0820 2828 ..Victarion.. ((
00000010: 005a 0308 b854 5a07 08b7 5410 c3a2 015a .Z...TZ...T....Z
00000020: 0308 b154 5a03 08b4 545a 0308 b254 60d3 ...TZ...TZ...T`.
00000030: f001 60d4 f001 60d5 f001 ..`...`...