Altering Encryption to block clients

Status
Not open for further replies.
Jun 8, 2007
2,233
163
0
Description: Change the encryption on the client and server to block unwanted clients.

Difficulty: -1

Assumed Knowledge: Basic number changing, Memory.

Tested Server: Winterloves.

Files/Classes Modified: You will need a client and a server for this to work

Procedure
Step 1: For this to work you need to have your own personal client.
Open class17 client side to open the clients encryption.

It should look like this
PHP:
public final class Class17
{

    public Class17(int i, int ai[])
    {
        anInt332 = -436;
        anInt333 = -431;
        anIntArray336 = new int[256];
        anIntArray335 = new int[256];
        for(int j = 0; j < ai.length; j++)
            anIntArray335[j] = ai[j];

        if(i >= 0)
            anInt333 = -242;
        method248();
    }

    public final int method246()
    {
        if(anInt334-- == 0)
        {
            method247();
            anInt334 = 255;
        }
        return anIntArray335[anInt334];
    }

    private final void method247()
    {
        anInt338 += ++anInt339;
        for(int i = 0; i < 256; i++)
        {
            int j = anIntArray336[i];
            if((i & 3) == 0)
                anInt337 ^= anInt337 << 13;
            else
            if((i & 3) == 1)
                anInt337 ^= anInt337 >>> 6;
            else
            if((i & 3) == 2)
                anInt337 ^= anInt337 << 2;
            else
            if((i & 3) == 3)
                anInt337 ^= anInt337 >>> 16;
            anInt337 += anIntArray336[i + 128 & 0xff];
            int k;
            anIntArray336[i] = k = anIntArray336[(j & 0x3fc) >> 2] + anInt337 + anInt338;
            anIntArray335[i] = anInt338 = anIntArray336[(k >> 8 & 0x3fc) >> 2] + j;
        }

    }

    private final void method248()
    {
        int i1;
        int j1;
        int k1;
        int l1;
        int i2;
        int j2;
        int k2;
        int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9;
        for(int i = 0; i < 4; i++)
        {
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
        }

        for(int j = 0; j < 256; j += 8)
        {
            l += anIntArray335[j];
            i1 += anIntArray335[j + 1];
            j1 += anIntArray335[j + 2];
            k1 += anIntArray335[j + 3];
            l1 += anIntArray335[j + 4];
            i2 += anIntArray335[j + 5];
            j2 += anIntArray335[j + 6];
            k2 += anIntArray335[j + 7];
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
            anIntArray336[j] = l;
            anIntArray336[j + 1] = i1;
            anIntArray336[j + 2] = j1;
            anIntArray336[j + 3] = k1;
            anIntArray336[j + 4] = l1;
            anIntArray336[j + 5] = i2;
            anIntArray336[j + 6] = j2;
            anIntArray336[j + 7] = k2;
        }

        for(int k = 0; k < 256; k += 8)
        {
            l += anIntArray336[k];
            i1 += anIntArray336[k + 1];
            j1 += anIntArray336[k + 2];
            k1 += anIntArray336[k + 3];
            l1 += anIntArray336[k + 4];
            i2 += anIntArray336[k + 5];
            j2 += anIntArray336[k + 6];
            k2 += anIntArray336[k + 7];
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
            anIntArray336[k] = l;
            anIntArray336[k + 1] = i1;
            anIntArray336[k + 2] = j1;
            anIntArray336[k + 3] = k1;
            anIntArray336[k + 4] = l1;
            anIntArray336[k + 5] = i2;
            anIntArray336[k + 6] = j2;
            anIntArray336[k + 7] = k2;
        }

        method247();
        anInt334 = 256;
    }

    private int anInt332;
    private int anInt333;
    private int anInt334;
    private int anIntArray335[];
    private int anIntArray336[];
    private int anInt337;
    private int anInt338;
    private int anInt339;
}


Step 2: All there is to do is change a variable around in that code.

In Cryption.java server side change the exact same number!
The best place to change is this method
PHP:
public void initializeKeySet()
    {
        int i1;
        int j1;
        int k1;
        int l1;
        int i2;
        int j2;
        int k2;
        int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9;
        for(int i = 0; i < 4; i++)
        {
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
        }

        for(int j = 0; j < 256; j += 8)
        {
            l += keySetArray[j];
            i1 += keySetArray[j + 1];
            j1 += keySetArray[j + 2];
            k1 += keySetArray[j + 3];
            l1 += keySetArray[j + 4];
            i2 += keySetArray[j + 5];
            j2 += keySetArray[j + 6];
            k2 += keySetArray[j + 7];
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
            cryptArray[j] = l;
            cryptArray[j + 1] = i1;
            cryptArray[j + 2] = j1;
            cryptArray[j + 3] = k1;
            cryptArray[j + 4] = l1;
            cryptArray[j + 5] = i2;
            cryptArray[j + 6] = j2;
            cryptArray[j + 7] = k2;
        }

        for(int k = 0; k < 256; k += 8)
        {
            l += cryptArray[k];
            i1 += cryptArray[k + 1];
            j1 += cryptArray[k + 2];
            k1 += cryptArray[k + 3];
            l1 += cryptArray[k + 4];
            i2 += cryptArray[k + 5];
            j2 += cryptArray[k + 6];
            k2 += cryptArray[k + 7];
            l ^= i1 << 11;
            k1 += l;
            i1 += j1;
            i1 ^= j1 >>> 2;
            l1 += i1;
            j1 += k1;
            j1 ^= k1 << 8;
            i2 += j1;
            k1 += l1;
            k1 ^= l1 >>> 16;
            j2 += k1;
            l1 += i2;
            l1 ^= i2 << 10;
            k2 += l1;
            i2 += j2;
            i2 ^= j2 >>> 4;
            l += i2;
            j2 += k2;
            j2 ^= k2 << 8;
            i1 += j2;
            k2 += l;
            k2 ^= l >>> 9;
            j1 += k2;
            l += i1;
            cryptArray[k] = l;
            cryptArray[k + 1] = i1;
            cryptArray[k + 2] = j1;
            cryptArray[k + 3] = k1;
            cryptArray[k + 4] = l1;
            cryptArray[k + 5] = i2;
            cryptArray[k + 6] = j2;
            cryptArray[k + 7] = k2;
        }

        generateNextKeySet();
        keyArrayIdx = 256;
    }
(It must be the same as Cliet side!)

NOTE: Remember which one you changed!

In my client and server i changed
PHP:
int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3779b9;
To
PHP:
int l = i1 = j1 = k1 = l1 = i2 = j2 = k2 = 0x9e3769b9;

I tested it with four clients and not one could connect with me :)



Step 3: Now is any client tries to connect to the server without the same encryption the client will get a t1 error and disconnect.
Its that simple :)



Credits: Jagex for the client.
 
  • Like
Reactions: Sub and Ultimate
Awsome job, surfer ;)
 
Karma++; This is way better than using UID now my client can be downloadable thanks
 
awesome job Surfer, ive never seen something like this before.

EDIT : are you sure that method isnt used by anything else?
 
Status
Not open for further replies.

Users who are viewing this thread (total: 1, members: 0, guests: 1)

Who read this thread (total members: 1)