Показать сообщение отдельно
Старый 02.12.2012, 10:41   #1
Nightshade2
Эксперт
Аватар для Nightshade2
OFFLINE
Регистрация: 06.11.2010
Возраст: 42
Сообщений: 1,336
Благодарностей:
738 всего
Мнения: + 5037
Репутация: 2215
Отправить сообщение для Nightshade2 с помощью ICQ Отправить сообщение для Nightshade2 с помощью Skype™

Авторизация BSFG-RF


Недавно скинули мне ланчер этого сервака. На нем не работала стандартная авторизация в логине. Решил посмотреть защиту. Те кто знают стандартную авторизацию в рф могут почитать дальше. Остальные .
Вот кусок кода их ланчера:
Код:
private void method_0(object sender, EventArgs e)
{
    try
    {
        this.pictureBox_1.Enabled = false;
        byte[] bytes = new byte[0x37];
        byte[] buffer = new byte[0x40];
        byte[] buffer3 = new byte[] { 5, 0, 0x15, 12, 0xff };
        while (((byte) buffer.GetValue(0)) != 7)
        {
            this.socket_0 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            this.socket_0.Connect("46.188.24.32", 0x2712);
            this.socket_0.Send(buffer3);
            this.socket_0.Receive(buffer);
            if (((byte) buffer.GetValue(0)) != 7)
            {
                this.socket_0.Close();
            }
        }
        byte num = (byte) buffer.GetValue(4);
        byte num2 = (byte) buffer.GetValue(5);
        byte[] buffer4 = new byte[] { 
            0x1f, 0, 0x15, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
         };
        byte[] buffer5 = Encoding.ASCII.GetBytes(this.textBox_0.Text);
        for (int i = 0; i < this.textBox_0.Text.Length; i++)
        {
            buffer4.SetValue(buffer5.GetValue(i), (int) (i + 4));
            bytes.SetValue(buffer5.GetValue(i), (int) (i + 6));
        }
        buffer5 = Encoding.ASCII.GetBytes(this.textBox_1.Text);
        for (int j = 0; j < this.textBox_1.Text.Length; j++)
        {
            buffer4.SetValue(buffer5.GetValue(j), (int) (j + 0x11));
        }
        for (int k = 4; k < 30; k++)
        {
            buffer4.SetValue((byte) (((((byte) buffer4.GetValue(k)) + ((byte) buffer.GetValue(4))) + 1) ^ (((byte) buffer.GetValue(5)) + 3)), k);
        }
        for (int m = 0; m < 30; m++)
        {
            buffer4.SetValue((byte) ((((byte) buffer4.GetValue(m)) ^ num2) - ((num + 5) ^ (num2 + 3))), m);
        }
        this.socket_0.Send(buffer4);
        this.socket_0.Receive(buffer);
        for (int n = 0; n < 0x2f; n++)
        {
            buffer.SetValue((byte) ((((byte) buffer.GetValue(n)) + ((num + 5) ^ (num2 + 3))) ^ num2), n);
        }
        if (((byte) buffer.GetValue(4)) == 0)
        {
            bytes.SetValue((byte) (((byte) buffer.GetValue(5)) ^ 0xaf), 0x13);
            bytes.SetValue((byte) (((byte) buffer.GetValue(6)) ^ 0xe0), 20);
            bytes.SetValue((byte) (((byte) buffer.GetValue(7)) ^ 0x65), 0x15);
            bytes.SetValue((byte) (((byte) buffer.GetValue(8)) ^ 110), 0x16);
            bytes.SetValue((byte) (((byte) buffer.GetValue(5)) ^ 0x3a), 0x29);
            bytes.SetValue((byte) (((byte) buffer.GetValue(6)) ^ 0x18), 0x2a);
            bytes.SetValue((byte) (((byte) buffer.GetValue(7)) ^ 0x9c), 0x2b);
            bytes.SetValue((byte) (((byte) buffer.GetValue(8)) ^ 200), 0x2c);
            bytes.SetValue((byte) (((byte) buffer.GetValue(10)) ^ 0x3a), 0x2d);
            bytes.SetValue((byte) (((byte) buffer.GetValue(11)) ^ 0x18), 0x2e);
            bytes.SetValue((byte) (((byte) buffer.GetValue(12)) ^ 0x9c), 0x2f);
            bytes.SetValue((byte) (((byte) buffer.GetValue(13)) ^ 200), 0x30);
            bytes.SetValue((byte) 0x3a, 0x27);
            bytes.SetValue((byte) 0x4b, 40);
            this.socket_0.Receive(buffer);
            for (int num8 = 0; num8 < 0x1c; num8++)
            {
                buffer.SetValue((byte) ((((byte) buffer.GetValue(num8)) + ((num + 5) ^ (num2 + 3))) ^ num2), num8);
            }
            bytes.SetValue((byte) (((byte) buffer.GetValue(11)) ^ 230), 0x17);
            bytes.SetValue((byte) (((byte) buffer.GetValue(12)) ^ 0x22), 0x18);
            bytes.SetValue((byte) (((byte) buffer.GetValue(13)) ^ 0xcf), 0x19);
            bytes.SetValue((byte) (((byte) buffer.GetValue(14)) ^ 0xcf), 0x1a);
            bytes.SetValue((byte) (((byte) buffer.GetValue(15)) ^ 0x6f), 0x1b);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x10)) ^ 0xde), 0x1c);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x11)) ^ 0xbc), 0x1d);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x12)) ^ 0x5b), 30);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x13)) ^ 0xda), 0x1f);
            bytes.SetValue((byte) (((byte) buffer.GetValue(20)) ^ 0x5e), 0x20);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x15)) ^ 0xdf), 0x21);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x16)) ^ 0xac), 0x22);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x17)) ^ 0x37), 0x23);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x18)) ^ 0x1b), 0x24);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x19)) ^ 0xcd), 0x25);
            bytes.SetValue((byte) (((byte) buffer.GetValue(0x1a)) ^ 0xbc), 0x26);
            bytes.SetValue((byte) 20, 0);
            bytes.SetValue((byte) 0xf7, 1);
            bytes.SetValue((byte) 0x84, 2);
            bytes.SetValue((byte) 0xeb, 3);
            bytes.SetValue((byte) 50, 4);
            bytes.SetValue((byte) 0x23, 5);
            bytes.SetValue((byte) 0xd0, 0x35);
            bytes.SetValue((byte) 50, 0x36);
            File.WriteAllBytes(Application.StartupPath + @"\System\DefaultSet.tmp", bytes);
            Struct1 struct2 = new Struct1();
            Struct0 struct3 = new Struct0();
            CreateProcess(Application.StartupPath + @"\KZ_Online.dll", null, IntPtr.Zero, IntPtr.Zero, false, 0, IntPtr.Zero, null, ref struct2, out struct3);
            this.socket_0.Close();
            if (Registry.CurrentUser.OpenSubKey(@"SOFTWARE\RF-BSFG\login") == null)
            {
                RegistryKey key2 = Registry.CurrentUser.CreateSubKey(@"SOFTWARE\RF-BSFG\");
                key2 = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\RF-BSFG\", true);
                key2.SetValue("login", this.textBox_0.Text);
                key2.SetValue("passw", this.textBox_1.Text);
            }
            Application.Exit();
        }
        else
        {
            MessageBox.Show("Аккаунт не верный или заблокирован ", "Ошибка");
            this.socket_0.Close();
        }
    }
    catch
    {
        MessageBox.Show("нет соедиения с логин сервером/миром");
        this.socket_0.Close();
        Application.Exit();
    }
    this.pictureBox_1.Enabled = true;
}
Тут видна шифрация всех пакетов авторизации. Может быть кому-то будет полезно для написания брутов аккаунтов или чекеров login+pass.
Логин сервер у них реально нестандартный)

Передаю вещи между расами на фри серверах( phenix, binaris и др). Подробнее в пм.
Антимины, антиинвиз, фильтр и др для пвпвара и других фришек здесь
 
Ответить с цитированием