Автоматическая авторизация - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Игровой клиент

Игровой клиент Есть вопросы по поводу редактирования dat, utx и других файлов клиента, пожалуйста, задавайте их здесь.

Ответ
Опции темы
Непрочитано 17.07.2014, 16:35   #1
Аватар для moveton
Супер-модератор

Автор темы (Топик Стартер) Автоматическая авторизация

Доброго времени суток!

Собственно сабж:
Делаю лаунчер. Требуется добавить функцию автоматической авторизации.
Бороздил этот коммунити, бороздил гугол, но конкретного ответа не нашел. В этом коммунити были догадки насчет изменения l2.ini и добавления ключей для l2.exe, но ключи я так и не смог подобрать.

Если тут есть люди, которые владеют нужной информацией - поделитесь ей пожалуйста.
moveton вне форума Отправить сообщение для moveton с помощью ICQ Отправить сообщение для moveton с помощью Skype™ Ответить с цитированием
Непрочитано 17.07.2014, 16:55   #2
Аватар для Asmodiel
Последний из независимых

По умолчанию Re: Автоматическая авторизация

Цитата:
Сообщение от moveton Посмотреть сообщение
Доброго времени суток!

Собственно сабж:
Делаю лаунчер. Требуется добавить функцию автоматической авторизации.
Бороздил этот коммунити, бороздил гугол, но конкретного ответа не нашел. В этом коммунити были догадки насчет изменения l2.ini и добавления ключей для l2.exe, но ключи я так и не смог подобрать.

Если тут есть люди, которые владеют нужной информацией - поделитесь ей пожалуйста.
То есть при нажатии на кнопку "Start" в лаунчере, игрока автоматически кидает в комнату персонажей, минуя окно логина?
__________________
Asmodiel вне форума Ответить с цитированием
Непрочитано 17.07.2014, 17:00   #3
Аватар для moveton
Супер-модератор

Автор темы (Топик Стартер) Re: Автоматическая авторизация

Цитата:
Сообщение от Asmodiel Посмотреть сообщение
То есть при нажатии на кнопку "Start" в лаунчере, игрока автоматически кидает в комнату персонажей, минуя окно логина?
Да, всё верно.
moveton вне форума Отправить сообщение для moveton с помощью ICQ Отправить сообщение для moveton с помощью Skype™ Ответить с цитированием
Непрочитано 17.07.2014, 17:01   #4
Аватар для Asmodiel
Последний из независимых

По умолчанию Re: Автоматическая авторизация

Цитата:
Сообщение от moveton Посмотреть сообщение
Да, всё верно.
Значит без вмешательства в клиент это навряд ли возможно, ибо нужно что-то в клиенте, что может послать что-то, что может миновать авторизацию, взяв данные из лаунчера.
__________________
Asmodiel вне форума Ответить с цитированием
Непрочитано 17.07.2014, 17:41   #5
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: Автоматическая авторизация

http://www.l2diary.ru/blog/40.html

+ пакет на стороне сервера полностью копирующий RequestLogin. Точно не помню -

Код:
if(opcode == 0x00)
				{
					if(Config.USE_ONLY_CMD_AUTH)
						packet = new RequestLogin();
					else
						packet = new RequestAuthLogin();
				}
				else if(opcode == 0x0b)
					packet = new RequestLogin();
				else
					debugOpcode(opcode, state);
Возможно еще придется внести правки в l2.ini (что то там насчет CommandLine бла бла бла = true)
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 17.07.2014, 17:52   #6
Аватар для WoWan-SM
Герой

По умолчанию Re: Автоматическая авторизация

Протестировано только что на клиенте Lindvior.
withoutLogin.bat
Код:
l2.exe account= password=
l2.ini сменить с
Код:
ExternalLogin=false
CmdLineLogin=false
на
Код:
ExternalLogin=true
CmdLineLogin=true
И да реализовать на стороне LS обработку этого пакета с опкодом 0x0B, а то сервак будет молчать и дальше с места не сдвинется.

Добавлено через 33 минуты
Цитата:
Сообщение от ANZO Посмотреть сообщение
http://www.l2diary.ru/blog/40.html

+ пакет на стороне сервера полностью копирующий RequestLogin. Точно не помню -

Код:
if(opcode == 0x00)
				{
					if(Config.USE_ONLY_CMD_AUTH)
						packet = new RequestLogin();
					else
						packet = new RequestAuthLogin();
				}
				else if(opcode == 0x0b)
					packet = new RequestLogin();
				else
					debugOpcode(opcode, state);
Возможно еще придется внести правки в l2.ini (что то там насчет CommandLine бла бла бла = true)
Не совсем идентичный. Не знаю как на других хрониках, но в Lindvior он на 16 байт короче.

Добавлено через 3 часа 10 минут
Реализовал пакет для захода:
Код:
package l2next.loginserver.clientpackets;

import l2next.loginserver.Config;
import l2next.loginserver.GameServerManager;
import l2next.loginserver.IpBanManager;
import l2next.loginserver.L2LoginClient;
import l2next.loginserver.accounts.Account;
import l2next.loginserver.accounts.SessionManager;
import l2next.loginserver.crypt.PasswordHash;
import l2next.loginserver.gameservercon.GameServer;
import l2next.loginserver.gameservercon.lspackets.GetAccountInfo;
import l2next.loginserver.serverpackets.LoginFail;
import l2next.loginserver.serverpackets.LoginOk;
import l2next.loginserver.utils.Log;

import javax.crypto.Cipher;

/**
 * Новый пакет авторизации для захода без ввода логина и пароля
 * Created by WoWan-SM on 17.07.2014.
 * L2Dev.su
 */
public class RequestLogin extends L2LoginClientPacket {
    private byte[] _raw = new byte[128];

    @Override
    protected void readImpl()
    {
        readD();
        readB(_raw);
        readD();
        readH();
        readC();
    }

    @Override
    protected void runImpl() throws Exception
    {
        L2LoginClient client = getClient();

        byte[] decrypted;
        try
        {
            Cipher rsaCipher = Cipher.getInstance("RSA/ECB/nopadding");
            rsaCipher.init(Cipher.DECRYPT_MODE, client.getRSAPrivateKey());
            decrypted = rsaCipher.doFinal(_raw, 0x00, 0x80);
        }
        catch(Exception e)
        {
            client.closeNow();
            return;
        }

        String user = new String(decrypted, 0x40, 14).trim();
        user = user.toLowerCase();
        String password = new String(decrypted, 0x60, 16).trim();

        int currentTime = (int) (System.currentTimeMillis() / 1000L);

        Account account = new Account(user);
        account.restore();

        String passwordHash = Config.DEFAULT_CRYPT.encrypt(password);

        if(account.getPasswordHash() == null)
        {
            if(Config.AUTO_CREATE_ACCOUNTS && user.matches(Config.ANAME_TEMPLATE) && password.matches(Config.APASSWD_TEMPLATE))
            {
                account.setAllowedIP("");
                account.setPasswordHash(passwordHash);
                account.save();
            }
            else
            {
                client.close(LoginFail.LoginFailReason.REASON_USER_OR_PASS_WRONG);
                return;
            }
        }

        boolean passwordCorrect = account.getPasswordHash().equals(passwordHash);

        if(!passwordCorrect)
        // проверяем не зашифрован ли пароль одним из устаревших но
        // поддерживаемых алгоритмов
        {
            for(PasswordHash c : Config.LEGACY_CRYPT)
            {
                if(c.compare(password, account.getPasswordHash()))
                {
                    passwordCorrect = true;
                    account.setPasswordHash(passwordHash);
                    break;
                }
            }
        }

        if(!IpBanManager.getInstance().tryLogin(client.getIpAddress(), passwordCorrect))
        {
            client.closeNow();
            return;
        }

        if(!passwordCorrect)
        {
            client.close(LoginFail.LoginFailReason.REASON_USER_OR_PASS_WRONG);
            return;
        }

        if(account.getAccessLevel() < 0)
        {
            client.close(LoginFail.LoginFailReason.REASON_ACCESS_FAILED);
            return;
        }

        if(account.getBanExpire() > currentTime)
        {
            client.close(LoginFail.LoginFailReason.REASON_ACCESS_FAILED);
            return;
        }

        if(!account.isAllowedIP(client.getIpAddress()))
        {
            client.close(LoginFail.LoginFailReason.REASON_ATTEMPTED_RESTRICTED_IP);
            return;
        }

        for(GameServer gs : GameServerManager.getInstance().getGameServers())
        {
            if(gs.getProtocol() >= 2 && gs.isAuthed())
            {
                gs.sendPacket(new GetAccountInfo(user));
            }
        }

        account.setLastAccess(currentTime);
        account.setLastIP(client.getIpAddress());

        Log.LogAccount(account);

        SessionManager.Session session = SessionManager.getInstance().openSession(account);

        client.setAuthed(true);
        client.setLogin(user);
        client.setAccount(account);
        client.setSessionKey(session.getSessionKey());
        client.setState(L2LoginClient.LoginClientState.AUTHED);

        client.sendPacket(new LoginOk(client.getSessionKey()));
    }

}
По структуре почти идентичен с RequestAuthLogin, только в начале какая-то приблуда intовая затесалась 0x08
и смещение чтение логина и пароля.
Было:
Код:
	String user = new String(decrypted, 0x5E, 14).trim();
	user = user.toLowerCase();
	String password = new String(decrypted, 0x6C, 16).trim();
Стало:
Код:
        String user = new String(decrypted, 0x40, 14).trim();
        user = user.toLowerCase();
        String password = new String(decrypted, 0x60, 16).trim();
__________________
Студия L2dev.su. Сборки Lindvior, Epilogue. ICQ 1817070. Skype wowan.sm

Последний раз редактировалось WoWan-SM; 07.09.2016 в 12:51. Причина: Добавлено сообщение
WoWan-SM вне форума Отправить сообщение для WoWan-SM с помощью ICQ Отправить сообщение для WoWan-SM с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 18.09.2014, 16:15   #7
Аватар для Snowball1
Пользователь

По умолчанию Re: Автоматическая авторизация

Реализуемо я так понимаю под любые хроники?
Snowball1 вне форума Ответить с цитированием
Непрочитано 18.09.2014, 18:10   #8
Аватар для demort
Пользователь

По умолчанию Re: Автоматическая авторизация

под il нет работает?
demort вне форума Ответить с цитированием
Непрочитано 27.02.2015, 19:32   #9
Аватар для ElefanD
Пользователь

По умолчанию Re: Автоматическая авторизация

Если вводить так, то работает
Код:
l2.exe account=test password=testpwd
Если так, то нет
Код:
l2.exe account=test password=test,pwd
Т.е если в пароли есть запятая, то пароль не принимается и не пускает на аккаунт, как решить проблему ?
ElefanD вне форума Отправить сообщение для ElefanD с помощью ICQ Ответить с цитированием
Непрочитано 17.09.2020, 13:47   #10
Пользователь

По умолчанию Re: Автоматическая авторизация

Дополню некропост.

В гайде выше не указано что ключи в l2.ini должны быть в блоке [Auth]
PHP код:
[Auth]
CmdLineLogin=True
ExternalLogin
=True 
По умолчанию во многих l2.ini они находятся в блоке [URL] и не работают. Сам с таким столкнулся и решил поделиться.

И актуален вопрос, а как такое же провернуть в клиенте для Interlude?
flopix вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическая замена данных в форме linliss PHP 8 13.01.2014 12:46
Вторичная авторизация Scream Lineage II 11 10.08.2013 20:19
Автоматическая Система Доната. Joker Работа со скриптами 51 15.12.2012 10:07
[Бесплатно!] Автоматическая Раскрутка Вашего Сервера В Соц. Сетях И Блогах DarkGod Рынок / Marketplace 0 15.05.2011 13:52
[Share] Автоматическая подготовка клиента для CPW BioSchok Клиентская часть 0 08.05.2011 21:12


© 2007–2020 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 02:35. Часовой пояс GMT +3.

Вверх