Skip to content

Instantly share code, notes, and snippets.

@MewX
Last active March 27, 2021 13:00
Show Gist options
  • Save MewX/0294f004a2a8ede26a94f4a38df392e5 to your computer and use it in GitHub Desktop.
Save MewX/0294f004a2a8ede26a94f4a38df392e5 to your computer and use it in GitHub Desktop.
ConTenDo Viewer debugging logs
package com.b.a.a.a.c;
import com.b.a.a.a;
import com.b.a.a.a.b.b;
import java.util.WeakHashMap;
public class a implements a {
private static WeakHashMap<Object, byte[]> b = (WeakHashMap)new WeakHashMap<>();
public static Object a(byte[] paramArrayOfbyte) {
Object object = new Object();
b.put(object, paramArrayOfbyte);
return object;
}
public static byte[] a(byte[] paramArrayOfbyte1, byte[] paramArrayOfbyte2) {
byte[] arrayOfByte1 = new byte[paramArrayOfbyte1.length];
byte[] arrayOfByte2 = new byte[paramArrayOfbyte2.length];
System.arraycopy(paramArrayOfbyte2, 0, arrayOfByte2, 0, paramArrayOfbyte2.length);
b b = new b(paramArrayOfbyte1.length, 2, paramArrayOfbyte2.length, 4);
byte[] arrayOfByte3 = new byte[Math.min(paramArrayOfbyte2.length, 64)];
b.nextBytes(arrayOfByte3);
byte b1 = 0;
int i = arrayOfByte3.length;
while (b1 < i) {
arrayOfByte2[b1] = (byte)((arrayOfByte2[b1] ^ arrayOfByte3[b1]) & 0xFF);
b1++;
}
a(arrayOfByte1, 0, paramArrayOfbyte1, arrayOfByte2, 0, 0, paramArrayOfbyte1.length);
return arrayOfByte1;
}
public static void a(byte[] paramArrayOfbyte1, int paramInt1, byte[] paramArrayOfbyte2, byte[] paramArrayOfbyte3, int paramInt2, int paramInt3, int paramInt4) {
int i = paramArrayOfbyte3.length;
int j = paramInt2 % i;
int k = paramInt2;
for (byte b = 0; b < paramInt4; b++) {
paramArrayOfbyte1[paramInt1++] = (byte)(paramArrayOfbyte2[paramInt3++] ^ paramArrayOfbyte3[j] ^ (k ^ k >> 8 ^ k >> 16 ^ k >> 24) & 0xFF);
if (++j >= i)
j = 0;
k++;
}
}
public static void a(byte[] paramArrayOfbyte1, int paramInt1, byte[] paramArrayOfbyte2, Object paramObject, int paramInt2, int paramInt3, int paramInt4) {
byte[] arrayOfByte = b.get(paramObject);
a(paramArrayOfbyte1, paramInt1, paramArrayOfbyte2, arrayOfByte, paramInt2, paramInt3, paramInt4);
}
}
// The API file
// Another reference
public Object a(byte[] paramArrayOfbyte) {
if (paramArrayOfbyte.length >= 1024 && ((paramArrayOfbyte[0] == 73 && paramArrayOfbyte[1] == 71 && paramArrayOfbyte[2] == 69 && paramArrayOfbyte[3] == 70) || (paramArrayOfbyte[0] == 67 && paramArrayOfbyte[1] == 68 && paramArrayOfbyte[2] == 69 && paramArrayOfbyte[3] == 70))) {
if (paramArrayOfbyte.length != 1024) {
byte[] arrayOfByte = new byte[1024];
System.arraycopy(paramArrayOfbyte, 0, arrayOfByte, 0, 1024);
paramArrayOfbyte = arrayOfByte;
}
int i = b(paramArrayOfbyte);
if (i != 0)
return this.h.a(i); // turns out to be a digest algorithm.
}
return null;
}
// Looks like decryption, the keys in encrypted files actually have overlaps.
private int b(byte[] paramArrayOfbyte) {
if (!this.q.get())
throw new f(b.a.getString("requireLogin"));
byte[] arrayOfByte1 = new byte[12];
byte[] arrayOfByte2 = new byte[12];
System.arraycopy(paramArrayOfbyte, 4, arrayOfByte1, 0, 12);
System.arraycopy(paramArrayOfbyte, 16, arrayOfByte2, 0, 12);
String str1 = (new String(paramArrayOfbyte, 28, 32)).intern();
String str2 = a.a(this.n, str1);
if (str2 != null) {
int i = this.h.a(str2.getBytes());
this.h.b(this.h.b());
return i;
}
return 0;
}
// Looks like the decryption
public synchronized byte[] b() {
byte[] arrayOfByte = null;
try {
byte[] arrayOfByte1 = this.e.a();
this.g = null;
byte[] arrayOfByte2 = c();
int i = 0;
int j = 0;
while (arrayOfByte == null) {
if (i)
arrayOfByte = new byte[i + 4];
int m = 0;
m = com.b.a.a.a.a.a.a(arrayOfByte, 1, m);
m = a(arrayOfByte, arrayOfByte1, m);
j = m;
m = a(arrayOfByte, arrayOfByte2, m);
m = a(arrayOfByte, (Collection<byte[]>)this.c, m);
i = m;
}
int k;
for (k = j; k < i; k++)
arrayOfByte[k] = (byte)((arrayOfByte[k] ^ this.e.nextInt(256)) & 0xFF);
this.h.reset();
this.h.update(arrayOfByte, 0, i);
com.b.a.a.a.a.a.a(arrayOfByte, (int)(this.h.getValue() & 0xFFFFFFFFFFFFFFFFL), i);
if (this.d != null)
for (k = 0; k < this.d.length; k++)
this.d[k] = null;
if (this.c != null)
this.c.clear();
} catch (Throwable throwable) {}
return arrayOfByte;
}
protected boolean y() throws IOException {
this.s = false;
FileInputStream fileInputStream = new FileInputStream(c());
try {
byte[] arrayOfByte = new byte[4];
int i = fileInputStream.read(arrayOfByte);
if (i == 4 && ((arrayOfByte[0] == 73 && arrayOfByte[1] == 71 && arrayOfByte[2] == 69 && arrayOfByte[3] == 70) || (arrayOfByte[0] == 67 && arrayOfByte[1] == 68 && arrayOfByte[2] == 69 && arrayOfByte[3] == 70)))
this.s = true;
} finally {
fileInputStream.close();
}
if (super.y())
return true;
if (this.s && !com.b.a.a.a().h())
throw new f(b.a.getString("requireLogin"));
return false;
}
// Should trace this
@FXML
private void openAction(ActionEvent paramActionEvent) {
if (this.b != null) {
File file = this.b.h();
try {
b b1 = d.a(file);
this.d.a((b)b1);
} catch (Exception exception) {
a.log(Level.WARNING, ", exception);
}
} else {
this.d.a(this.c);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment