逆向了它安卓版本的,数据在资源文件里。
数据的具体是什么意思不太懂,你自己研究。
数据加载在 com.p026sm.datacenter 这个类
这个是我的测试代码
[Java] 纯文本查看 复制代码 public static ArrayList[] dataloader_binary(String filename, int[] types) {
int i = 0;
int sCount = types.length;
int rLen = 0;
ArrayList[] cols = new ArrayList[sCount];
for (int i2 : types) {
switch (i2) {
case 0:
rLen += 2;
break;
case 1:
rLen += 4;
break;
case 2:
rLen++;
break;
case 3:
rLen += 8;
break;
}
}
try {
InputStream in = getInpustStream(filename);
BufferedInputStream bis = new BufferedInputStream(in);
DataInputStream dis = new DataInputStream(bis);
int loops = in.available() / rLen;
while (i < sCount) {
switch (types[i]) {
case 0:
cols[i] = new ArrayList(loops);
break;
case 1:
cols[i] = new ArrayList(loops);
break;
case 2:
cols[i] = new ArrayList(loops);
break;
case 3:
cols[i] = new ArrayList(loops);
break;
}
i++;
}
for (int idx = 0; idx < loops; idx++) {
for (int i3 = 0; i3 < sCount; i3++) {
try {
switch (types[i3]) {
case 0:
cols[i3].add(Short.valueOf(dis.readShort()));
break;
case 1:
cols[i3].add(Integer.valueOf(dis.readInt()));
break;
case 2:
cols[i3].add(Byte.valueOf(dis.readByte()));
break;
case 3:
cols[i3].add(Long.valueOf(dis.readLong()));
break;
}
} catch (Exception e) {
}
}
}
dis.close();
bis.close();
in.close();
for (int i4 = 0; i4 < sCount; i4++) {
cols[i4].trimToSize();
}
} catch (Exception e2) {
System.out.println("readUTF Error:" + e2.toString());
} finally {
}
return cols;
}
public static InputStream getInpustStream(String filename) throws IOException {
return new FileInputStream( filename);
}
public static ArrayList<String> dataloader_line(InputStream in, int iniSize) throws Exception {
ArrayList<String> Rtns = iniSize > 0 ? new ArrayList<>(iniSize) : new ArrayList<>();
InputStreamReader inputstreamReader = new InputStreamReader(in, "UTF-8");
BufferedReader br = new BufferedReader(inputstreamReader);
while (br.ready()) {
Rtns.add(br.readLine());
}
br.close();
inputstreamReader.close();
in.close();
return Rtns;
}
public static List<byte[]> dataloader_binary_BlockRead(String str, int i) {
Exception e;
int rLen = i;
List cols = null;
try {
InputStream in = getInpustStream(str);
BufferedInputStream bufferedInputStream = new BufferedInputStream(in);
int available = in.available() / rLen;
Vector arrayList = new Vector(available);
try {
byte[] bArr = new byte[rLen];
for (int i2 = 0; i2 < available; i2++) {
bArr = new byte[rLen];
bufferedInputStream.read(bArr);
arrayList.add(bArr);
}
bufferedInputStream.close();
in.close();
System.gc();
return arrayList;
} catch (Exception e2) {
e = e2;
cols = arrayList;
try {
System.out.println("readUTF Error:" + e.toString());
return cols;
} catch (Throwable th) {
Throwable th2 = th;
try {
throw th2;
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
} catch (Throwable th3) {
}
} catch (Exception e3) {
e = e3;
System.out.println("readUTF Error:" + e.toString());
return cols;
}
return null;
}
public static void main(String args[]) throws Exception {
// ArrayList[] arrayLists = FastJsonUtils.dataloader_binary("F:\\安卓逆向\\AndroidKiller_v1.3.1\\projects\\smlcskbv2019.08.20_downcc.com\\Project\\assets\\data\\cctksy.dat", new int[]{1});
// for (ArrayList arrayList : arrayLists) {
// System.out.println("arrayList = " + arrayList);
// }
ArrayList<String> strings = FastJsonUtils.dataloader_line(getInpustStream("F:\\安卓逆向\\AndroidKiller_v1.3.1\\projects\\smlcskbv2019.08.20_downcc.com\\Project\\assets\\data\\cc.idx"), 4500);
List<byte[]> bytes = FastJsonUtils.dataloader_binary_BlockRead("F:\\安卓逆向\\AndroidKiller_v1.3.1\\projects\\smlcskbv2019.08.20_downcc.com\\Project\\assets\\data\\cc.dat", 62);
for (int i = 0; i < bytes.size(); i++) {
ByteBuffer btsBuffer = ByteBuffer.wrap(bytes.get(i));
String TrainName = strings.get(i);
short TrainDJ = btsBuffer.get();
short TrainSF = btsBuffer.get();
int TrainInCCTKSYs = btsBuffer.getInt();
int TrainInCCTKSYe = btsBuffer.getInt();
boolean TrainSFKT = btsBuffer.get() + -48 == 1;
String TrainXW = String.format("%04d", new Object[]{Short.valueOf(btsBuffer.getShort())});
int TrainBJ = btsBuffer.get() - 48;
short TrainKXZQ = btsBuffer.get();
int TrainKXGL = (short) btsBuffer.getInt();
int TrainKSRQ = btsBuffer.getInt();
int TrainJSRQ = btsBuffer.getInt();
int noticeStart = btsBuffer.getInt();
int noticeEnd = btsBuffer.getInt();
String ddj = new StringBuilder(String.valueOf((char) btsBuffer.get())).append((char) btsBuffer.get()).append((char) btsBuffer.get()).toString();
int hcStart = btsBuffer.getInt();
int hcEnd = btsBuffer.getInt();
int pjdmStart = btsBuffer.getInt();
int pjdmEnd = btsBuffer.getInt();
int caceStart = btsBuffer.getInt();
int caceEnd = btsBuffer.getInt();
int ID = i;
System.out.println("TrainName = " + TrainName +" TrainSFKT:"+TrainSFKT +" TrainXW:" + TrainXW + " ddj:"+ddj + " caceStart:"+caceStart+" caceEnd:"+caceEnd);
}
} |