Same SBoT.jar, decompiled with jad instead of CFR for comparison -- jad is the same decompiler the community used on RSC client dumps back in 2004 (see DeobedMC201.rar). A few methods didn't fully resolve (jad is much less capable than CFR on complex control flow); those are marked inline where jad gave up.
379 lines
7.2 KiB
Java
379 lines
7.2 KiB
Java
// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov.
|
|
// Jad home page: http://www.geocities.com/kpdus/jad.html
|
|
// Decompiler options: packimports(3)
|
|
// Source File Name: x.java
|
|
|
|
import java.io.*;
|
|
import java.net.Socket;
|
|
|
|
public class x extends w
|
|
implements Runnable
|
|
{
|
|
|
|
public x(Socket socket, a a1)
|
|
throws IOException
|
|
{
|
|
H = false;
|
|
L = true;
|
|
G = socket;
|
|
E = socket.getInputStream();
|
|
F = socket.getOutputStream();
|
|
L = false;
|
|
a1.a(this);
|
|
}
|
|
|
|
public void a()
|
|
{
|
|
boolean flag;
|
|
flag = q.d;
|
|
super.a();
|
|
H = true;
|
|
this;
|
|
if(flag) goto _L2; else goto _L1
|
|
_L1:
|
|
E;
|
|
JVM INSTR ifnull 31;
|
|
goto _L3 _L4
|
|
_L3:
|
|
E.close();
|
|
_L4:
|
|
this;
|
|
_L2:
|
|
if(flag) goto _L6; else goto _L5
|
|
_L5:
|
|
F;
|
|
JVM INSTR ifnull 49;
|
|
goto _L7 _L8
|
|
_L7:
|
|
F.close();
|
|
_L8:
|
|
this;
|
|
_L6:
|
|
G;
|
|
if(flag) goto _L10; else goto _L9
|
|
_L9:
|
|
JVM INSTR ifnull 67;
|
|
goto _L11 _L12
|
|
_L12:
|
|
break MISSING_BLOCK_LABEL_82;
|
|
_L11:
|
|
G;
|
|
_L10:
|
|
close();
|
|
break MISSING_BLOCK_LABEL_82;
|
|
IOException ioexception;
|
|
ioexception;
|
|
System.out.println(M[1]);
|
|
L = true;
|
|
synchronized(this)
|
|
{
|
|
notify();
|
|
}
|
|
I = null;
|
|
return;
|
|
}
|
|
|
|
public int h()
|
|
throws IOException
|
|
{
|
|
H;
|
|
if(q.d) goto _L2; else goto _L1
|
|
_L1:
|
|
if(H)
|
|
return 0;
|
|
E.read();
|
|
_L2:
|
|
return;
|
|
}
|
|
|
|
public int d()
|
|
throws IOException
|
|
{
|
|
H;
|
|
if(q.d) goto _L2; else goto _L1
|
|
_L1:
|
|
if(H)
|
|
return 0;
|
|
E.available();
|
|
_L2:
|
|
return;
|
|
}
|
|
|
|
public void a(int i, int j, byte abyte0[])
|
|
throws IOException
|
|
{
|
|
boolean flag1 = q.d;
|
|
H;
|
|
if(flag1) goto _L2; else goto _L1
|
|
_L1:
|
|
if(H)
|
|
return;
|
|
false;
|
|
_L2:
|
|
int k;
|
|
k;
|
|
boolean flag = false;
|
|
_L8:
|
|
if(k >= i)
|
|
break; /* Loop/switch isn't completed */
|
|
int l = E.read(abyte0, k + j, i - k);
|
|
if(flag1) goto _L4; else goto _L3
|
|
_L3:
|
|
JVM INSTR ifgt 70;
|
|
goto _L5 _L6
|
|
_L5:
|
|
break MISSING_BLOCK_LABEL_57;
|
|
_L6:
|
|
break MISSING_BLOCK_LABEL_70;
|
|
throw new IOException(M[0]);
|
|
k + l;
|
|
_L4:
|
|
k;
|
|
if(!flag1) goto _L8; else goto _L7
|
|
_L7:
|
|
}
|
|
|
|
public void b(byte abyte0[], int i, int j)
|
|
throws IOException
|
|
{
|
|
boolean flag = q.d;
|
|
this;
|
|
if(flag) goto _L2; else goto _L1
|
|
_L1:
|
|
H;
|
|
JVM INSTR ifeq 18;
|
|
goto _L3 _L4
|
|
_L3:
|
|
break MISSING_BLOCK_LABEL_17;
|
|
_L4:
|
|
break MISSING_BLOCK_LABEL_18;
|
|
return;
|
|
this;
|
|
_L2:
|
|
if(flag) goto _L6; else goto _L5
|
|
_L5:
|
|
I;
|
|
JVM INSTR ifnonnull 39;
|
|
goto _L7 _L8
|
|
_L7:
|
|
break MISSING_BLOCK_LABEL_30;
|
|
_L8:
|
|
break MISSING_BLOCK_LABEL_39;
|
|
I = new byte[5000];
|
|
this;
|
|
_L6:
|
|
JVM INSTR dup ;
|
|
x x1;
|
|
x1;
|
|
JVM INSTR monitorenter ;
|
|
int k = 0;
|
|
_L14:
|
|
if(k >= j)
|
|
break; /* Loop/switch isn't completed */
|
|
I[K] = abyte0[k + i];
|
|
K = (K + 1) % 5000;
|
|
if(flag)
|
|
continue; /* Loop/switch isn't completed */
|
|
this;
|
|
if(flag) goto _L10; else goto _L9
|
|
_L9:
|
|
K;
|
|
(J + 4900) % 5000;
|
|
JVM INSTR icmpne 124;
|
|
goto _L11 _L12
|
|
_L11:
|
|
throw new IOException(M[3]);
|
|
_L12:
|
|
k++;
|
|
if(!flag) goto _L14; else goto _L13
|
|
_L13:
|
|
notify();
|
|
x1;
|
|
_L10:
|
|
JVM INSTR monitorexit ;
|
|
goto _L15
|
|
Exception exception;
|
|
exception;
|
|
throw exception;
|
|
_L15:
|
|
}
|
|
|
|
public void run()
|
|
{
|
|
boolean flag1;
|
|
flag1 = q.d;
|
|
boolean flag = false;
|
|
_L15:
|
|
if(L)
|
|
break; /* Loop/switch isn't completed */
|
|
x x1 = this;
|
|
JVM INSTR monitorenter ;
|
|
K;
|
|
if(flag1) goto _L2; else goto _L1
|
|
_L1:
|
|
J;
|
|
JVM INSTR icmpne 44;
|
|
goto _L3 _L4
|
|
_L3:
|
|
wait();
|
|
goto _L4
|
|
InterruptedException interruptedexception;
|
|
interruptedexception;
|
|
_L4:
|
|
L;
|
|
_L2:
|
|
if(flag1) goto _L6; else goto _L5
|
|
_L5:
|
|
JVM INSTR ifeq 60;
|
|
goto _L7 _L8
|
|
_L7:
|
|
return;
|
|
_L8:
|
|
J;
|
|
_L6:
|
|
int j;
|
|
j;
|
|
K;
|
|
J;
|
|
if(flag1) goto _L10; else goto _L9
|
|
_L9:
|
|
JVM INSTR icmplt 96;
|
|
goto _L11 _L12
|
|
_L11:
|
|
int i = K - J;
|
|
if(!flag1) goto _L13; else goto _L12
|
|
_L12:
|
|
'\u1388';
|
|
J;
|
|
_L10:
|
|
JVM INSTR isub ;
|
|
i;
|
|
goto _L13
|
|
Exception exception;
|
|
exception;
|
|
throw exception;
|
|
_L13:
|
|
if(i <= 0) goto _L15; else goto _L14
|
|
_L14:
|
|
try
|
|
{
|
|
F.write(I, j, i);
|
|
}
|
|
catch(IOException ioexception)
|
|
{
|
|
super.y = true;
|
|
super.C = M[2] + ioexception;
|
|
}
|
|
J = (J + i) % 5000;
|
|
this;
|
|
if(flag1) goto _L17; else goto _L16
|
|
_L16:
|
|
K;
|
|
J;
|
|
JVM INSTR icmpne 210;
|
|
goto _L18 _L15
|
|
_L18:
|
|
this;
|
|
_L17:
|
|
F;
|
|
flush();
|
|
goto _L15
|
|
IOException ioexception1;
|
|
ioexception1;
|
|
super.y = true;
|
|
super.C = M[2] + ioexception1;
|
|
if(!flag1) goto _L15; else goto _L19
|
|
_L19:
|
|
}
|
|
|
|
private InputStream E;
|
|
private OutputStream F;
|
|
private Socket G;
|
|
private boolean H;
|
|
private byte I[];
|
|
private int J;
|
|
private int K;
|
|
private boolean L;
|
|
private static String M[];
|
|
|
|
static
|
|
{
|
|
String as[];
|
|
as = new String[4];
|
|
as[0] = "\005\023|";
|
|
as[1] = "\005.H3y`?V3x)2]|x4._=f";
|
|
as[2] = "\024+H5\177%.\0";
|
|
as[3] = "\")\\:n2|U*n2:V3|";
|
|
M = as;
|
|
break MISSING_BLOCK_LABEL_155;
|
|
local;
|
|
toCharArray();
|
|
JVM INSTR dup ;
|
|
JVM INSTR arraylength .length;
|
|
JVM INSTR swap ;
|
|
int i = 0;
|
|
JVM INSTR swap ;
|
|
JVM INSTR dup_x1 ;
|
|
1;
|
|
JVM INSTR icmpgt 134;
|
|
goto _L1 _L2
|
|
_L1:
|
|
JVM INSTR dup ;
|
|
i;
|
|
_L4:
|
|
JVM INSTR dup2 ;
|
|
JVM INSTR caload ;
|
|
byte byte0;
|
|
switch(i % 5)
|
|
{
|
|
case 0: // '\0'
|
|
byte0 = 0x40;
|
|
break;
|
|
|
|
case 1: // '\001'
|
|
byte0 = 92;
|
|
break;
|
|
|
|
case 2: // '\002'
|
|
byte0 = 58;
|
|
break;
|
|
|
|
case 3: // '\003'
|
|
byte0 = 92;
|
|
break;
|
|
|
|
default:
|
|
byte0 = 11;
|
|
break;
|
|
}
|
|
byte0;
|
|
JVM INSTR ixor ;
|
|
(char);
|
|
JVM INSTR castore ;
|
|
i++;
|
|
JVM INSTR swap ;
|
|
JVM INSTR dup_x1 ;
|
|
JVM INSTR ifne 134;
|
|
goto _L3 _L2
|
|
_L3:
|
|
JVM INSTR dup2 ;
|
|
JVM INSTR swap ;
|
|
goto _L4
|
|
_L2:
|
|
JVM INSTR swap ;
|
|
JVM INSTR dup_x1 ;
|
|
i;
|
|
JVM INSTR icmpgt 57;
|
|
goto _L5 _L1
|
|
_L5:
|
|
JVM INSTR new #157 <Class String>;
|
|
JVM INSTR dup_x1 ;
|
|
JVM INSTR swap ;
|
|
String();
|
|
intern();
|
|
JVM INSTR swap ;
|
|
JVM INSTR pop ;
|
|
JVM INSTR ret 0;
|
|
}
|
|
}
|