[Статья] C# OOG Авторизация - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация

C# OOG Авторизация

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы Опции просмотра
Старый 18.07.2012, 23:44   #1
-= Мастер Света =-
 Капитан
Аватар для FreePVP)))
 
FreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского Союза
Регистрация: 24.09.2010
Сообщений: 262
Популярность: 6723
Сказал(а) спасибо: 118
Поблагодарили 344 раз(а) в 104 сообщениях
Отправить сообщение для FreePVP))) с помощью ICQ Отправить сообщение для FreePVP))) с помощью Skype™
 
По умолчанию C# OOG Авторизация

Доброго времени суток, в этой статье я опишу процесс авторизации в Perfect World без клиента игры
Пугаться не стоит, так как это очень просто
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для начала я опишу пакеты, которые мы будем отправлять/получать:
Код:
S-C 0x01 - ServerInfo
C-S 0x03 - LogginAnnounce
S-C 0x02/0x05 - SMKey/ServerError
Как только мы подключимся к серверу, он вышлет нам пакет 0x01
В этом пакете будет храниться ключ для генерации хеша, который мы передадим серверу в пакете 0x03
Затем сервер вышлет нам пакет 0x02 или же 0x05
0x02 - Связка верна
0x05 - Связка неверна

Для начала создадим класс PWAuth.cs, в котором будут следующие переменный:
Код:
        string IP;
        int Port;

        public bool Result { get; private set; }// Результат авторизации(связка(логин+пароль) верна/не верна)
        public bool Connected { get; private set; }// Результат подключения к серверу(подключиться удалось/не удалось)
Так же мы должны подключить следующие библиотеки:
Код:
using System.Net.Sockets;
using System.Security.Cryptography;
Удобнее будет передавать IP и Порт классу при его создании, для этого создадим пару методов
Код:
        public PWAuth(string ip) : this(ip, 29000) { }
        public PWAuth(string ip, int port)
        {
            IP = ip; 
            Port = port;
        }
При формировании пакета 0x03(LogginAnnounce) нам понадобится генерация хеша md5 (логин+пароля) в обертке HMACMD5
Для этого мы будем использовать следующий метод:
Код:
        private byte[] GetHash(byte[] key, string login, string pass)
        {
            byte[] logwithpass = Encoding.ASCII.GetBytes(login + pass);
            MD5 md5 = MD5.Create();
            return new HMACMD5(md5.ComputeHash(logwithpass)).ComputeHash(key);
        }
Мы закончили подготавливать класс и начнем писать основной код в методе Check, которому мы передадим логин и пароль:
Код:
public bool Check(string login, string pass)
Этот метод будет возвращать результат(Result)

Чтобы не было путаницы, в самом начале метода сделаем следующее
Код:
            Result = false;
            Connected = false;
Далее приступим к созданию сокета:
Код:
            TcpClient tcp = new TcpClient();
            try
            {
                tcp.Connect(IP, Port);
            }
            catch { return false; }

            Socket skt = tcp.Client;
            Connected = skt.Connected;
Я обернул метод tcp.Connect(IP, Port); в блок try затем, чтобы при неудачном подключении не вылетал Exception

Если же мы подключились к серверу, то можно начинать чтение пакета, который вышлет нам сервер(причему все следующие действия мы будем проводить в цикле while (skt.Connected))
Все полученные данные мы запишем в массив байт
Код:
                byte[] buf = new byte[0xFF];
                skt.Receive(buf);
buf[0] - Тип пакета
buf[1] - Длина пакета
Все остальное - пакет
Если тип пакета равен 0x01(if (buf[0] == 0x01)), то нам нужно сформировать пакет 0x03 и отправить его серверу
Код:
                if (buf[0] == 0x01)
                {
                    List<byte> Send = new List<byte>();

                    byte[] key = new byte[0x10];
                    for (int i = 0; i < 0x10; i++) key[i] = buf[i + 3];

                    byte[] loginbt = Encoding.GetEncoding(1251).GetBytes(login);
                    byte[] hash = GetHash(key, login, pass);

                    Send.Add((byte)loginbt.Length);
                    Send.AddRange(loginbt);
                    Send.Add((byte)hash.Length);
                    Send.AddRange(hash);
                    Send.Add(0x00);
                    Send.AddRange(new byte[]{4,0,0,0,0});

                    Send.Insert(0,(byte)Send.Count);
                    Send.Insert(0, 0x03);

                    skt.Send(Send.ToArray());
                    continue;
                }
[Ссылки могут видеть только зарегистрированные пользователи. ]
В коде чуть выше мы проделали следующие действия:
  1. Вычитали ключ из данных, которые прислал нам сервер
  2. Перевели логин в байт
  3. Сгенерировали хеш
  4. Записали длину логина и логин в массиве байт
  5. Записали длину хеша и сам хеш
  6. Записали длину пакета в начало массива
  7. Записали тип пакета(0x03) в начало массива
  8. Отправили пакет
Следующий пакет, который отправит нам сервер, будет для нас результатом авторизации и если тип пакета не равен 0x01, то будет выполнен код после условия выше:
Код:
                Result = buf[0] == 0x02;
                break;
[Ссылки могут видеть только зарегистрированные пользователи. ]
И под конец метода мы закроем сокет и вернем результат:
Код:
            skt.Close();
            return Result;
В итоге у нас должен получиться следующий класс:
PWAuth
Пример работы с классом:
Код:
            PWAuth auth = new PWAuth(tbIP.Text, (int)updPort.Value);
            auth.Check(tbLogin.Text, tbPass.Text);
            if (!auth.Connected)
            {
                MessageBox.Show("Ошибка при подключении");
                return;
            }
            MessageBox.Show(auth.Result ? "Успешная авторизация" : "Логин или пароль не верны");
В аттаче лежит готовый проект с GUI интерфейсом
Вложения
Тип файла: rar PWCheckAccount.rar (41.4 Кб, 444 просмотров)
________________
TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115


[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот
[Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон

Последний раз редактировалось FreePVP))); 17.10.2012 в 19:31.
  Ответить с цитированием
11 пользователя(ей) сказали cпасибо:
/GeG/ (18.07.2012), gurin (25.08.2012), krukovis (19.07.2012), krysun (20.08.2012), RemoteAccess (20.08.2012), Sinyss (10.10.2012), Smertig (25.08.2012), union+select (05.04.2013), vladoscom93 (28.07.2012), wajskopf (23.07.2013), [Na`Vi]DendI (20.09.2012)
Старый 19.07.2012, 19:37   #2
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,541
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,716 раз(а) в 538 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Делал бы уже нормально: с чтением куинтов на тип и размер, на асинхронной модели сокетов с последующей нарезкой и сборкой пакетов.

Ну и сокет использовать лучше, чем обертку над ним под названием tcpclient...
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
  Ответить с цитированием
Старый 19.07.2012, 19:42   #3
-= Мастер Света =-
 Капитан
Аватар для FreePVP)))
 
FreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского Союза
Регистрация: 24.09.2010
Сообщений: 262
Популярность: 6723
Сказал(а) спасибо: 118
Поблагодарили 344 раз(а) в 104 сообщениях
Отправить сообщение для FreePVP))) с помощью ICQ Отправить сообщение для FreePVP))) с помощью Skype™
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от TBX1nПосмотреть сообщение
Делал бы уже нормально: с чтением куинтов на тип и размер, на асинхронной модели сокетов с последующей нарезкой и сборкой пакетов.

Ну и сокет использовать лучше, чем обертку над ним под названием tcpclient...

Этот класс сделан специально для проверки аккаунтов на валидность
Не вижу смысла делать большее, разве что чек логина еще добавить
Если уж и делать с нарезкой, куинтами и асинхронными сокетами, то в отдельной статье
________________
TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115


[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот
[Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон
  Ответить с цитированием
Старый 19.07.2012, 20:02   #4
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,541
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,716 раз(а) в 538 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от FreePVP)))Посмотреть сообщение
Этот класс сделан специально для проверки аккаунтов на валидность

Нет смысла делать урезки, когда можно сделать что-то полноценное, что можно применять и как проверку логина и все остальное.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
  Ответить с цитированием
Старый 19.07.2012, 20:07   #5
-= Мастер Света =-
 Капитан
Аватар для FreePVP)))
 
FreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского СоюзаFreePVP))) трижды герой Советского Союза
Регистрация: 24.09.2010
Сообщений: 262
Популярность: 6723
Сказал(а) спасибо: 118
Поблагодарили 344 раз(а) в 104 сообщениях
Отправить сообщение для FreePVP))) с помощью ICQ Отправить сообщение для FreePVP))) с помощью Skype™
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от TBX1nПосмотреть сообщение
Нет смысла делать урезки, когда можно сделать что-то полноценное, что можно применять и как проверку логина и все остальное.

Ну знаешь, в своем парсере логинов мне удобнее было использовать этот класс, нежели подключать несколько других классов моей библиотеки

Добавлено через 3 минуты
Да и для того же брутфорса это было бы не очень удобно
________________
TwinkDB - твинки любого игрока, их дата создания, последний онлайн, статус удаления и прочее
Skype - freepvps
ICQ - 412705115


[Ссылки могут видеть только зарегистрированные пользователи. ] - ставкобот
[Ссылки могут видеть только зарегистрированные пользователи. ] - общение в КЧ через смартфон

Последний раз редактировалось FreePVP))); 19.07.2012 в 20:11. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 20.07.2012, 09:20   #6
 Разведчик
Аватар для chetoss
 
chetoss на правильном путиchetoss на правильном пути
Регистрация: 30.10.2009
Сообщений: 7
Популярность: 107
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: C# OOG Авторизация

А не лучше было сделать, чтобы он логинился, если ок, то ловим 53 и берем оттуда лвл персонажей? а запись например: логин,пароль: лвл,лвл,лвл
  Ответить с цитированием
Старый 20.07.2012, 11:18   #7
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Это же пример алгоритма, а не готовая программма.
Как хотите, так дальше и модифицируйте её.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 20.07.2012, 19:46   #8
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,541
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,716 раз(а) в 538 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от N00bSa1b0tПосмотреть сообщение
Это же пример алгоритма, а не готовая программма.

Алгоритм описывается просто, без привязки к среде, языку программирования и т.д.
Автор темы предоставил реализацию алгоритма по работе с трафиком игры.
Реализация далека от идеала, поэтому и критикую.
________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
  Ответить с цитированием
Старый 24.07.2012, 00:15   #9
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от TBX1nПосмотреть сообщение
Реализация далека от идеала, поэтому и критикую.

Я отвечал chetoss К Вашим словам у меня претензий никаких нету.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 20.08.2012, 00:15   #10
 Разведчик
Аватар для nitrotek
 
nitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компании
Регистрация: 10.06.2010
Сообщений: 30
Популярность: 940
Сказал(а) спасибо: 7
Поблагодарили 139 раз(а) в 22 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Думаю лишнее, для тех кто хочет этим заняться уже давно всё описано.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 25.08.2012, 13:03   #11
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от TBX1nПосмотреть сообщение
Алгоритм описывается просто, без привязки к среде, языку программирования и т.д.

не могли бы Вы подсказать ссылочку на такой алгоритм?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 25.08.2012, 13:09   #12
-= Элитный Мастер =-
 Главнокомандующий
Аватар для Kitsune
 
Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(Kitsune сломал счётчик популярности :(
Регистрация: 20.01.2010
Сообщений: 1,541
Популярность: 22780
Золото Zhyk.Ru: 600
Сказал(а) спасибо: 43
Поблагодарили 1,716 раз(а) в 538 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Цитата:
Сообщение от gurinПосмотреть сообщение
не могли бы Вы подсказать ссылочку на такой алгоритм?

Речь шла об абстрактном алгоритме, а точнее о том, что правильно называть алгоритмом.

Цитата:
Алгоритм — набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за конечное время.

________________
Fireball - Быстрое снятие и загрузка скриншотов на хостинг.
  Ответить с цитированием
Старый 05.09.2012, 19:26   #13
 Разведчик
Аватар для 7_ON
 
7_ON никому не известный тип
Регистрация: 11.09.2011
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Эта тема уже не раз поднималась, и работа с первыми пакетами не один раз описана. Но было бы очень интересно увидеть процесс выбора персонажа и входа в игру)
  Ответить с цитированием
Старый 15.09.2012, 20:10   #14
 Разведчик
Аватар для nitrotek
 
nitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компанииnitrotek душа компании
Регистрация: 10.06.2010
Сообщений: 30
Популярность: 940
Сказал(а) спасибо: 7
Поблагодарили 139 раз(а) в 22 сообщениях
 
По умолчанию Re: C# OOG Авторизация

Ничего интересного, всё разбирается очень просто. Пишите или ищите снифер и исследуйте пакеты.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 20.09.2012, 01:33   #15
Заблокирован
 Сержант
Аватар для [Na`Vi]DendI
 
[Na`Vi]DendI на правильном пути[Na`Vi]DendI на правильном пути
Регистрация: 06.06.2012
Сообщений: 131
Популярность: 102
Сказал(а) спасибо: 141
Поблагодарили 131 раз(а) в 78 сообщениях
Отправить сообщение для [Na`Vi]DendI с помощью Skype™
 
По умолчанию Re: C# OOG Авторизация

А возможно ли как то таким образом спарсить информацию об аккаунте ?
Автор спасибо большое за авторизацию.
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Авторизация DO BugattiVeyron Вопросы и ответы, обсуждения 1 08.12.2011 21:18
[Помогите!] Авторизация на жук.ру DelphiLab Вопросы и ответы, обсуждения 3 01.08.2011 17:46
Авторизация Доминик Общение разработчиков 1 15.07.2011 00:22
[Помогите!] Авторизация и бот BinKz Вопросы и ответы, обсуждения 7 10.05.2011 18:56
[Help] ФГ авторизация manstrrr Вопросы и ответы: RF Online 1 03.12.2009 22:06

www.webmoney.ru
Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 00:21.

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net