LaPrizmo ClientMod

  • Автор темы Автор темы Prizmo
  • Дата начала Дата начала

Prizmo

Путник
Участник
Сообщения
19
Розыгрыши
0
Репутация
55
Реакции
19
Баллы
13
Для понимания принципов работы и дополнительных аспектов в вашей сфере, взял трупы утилит для анализа. И на основе L2crypt (acmi) пробую немного ковыряться.
Некоторые функции делались по наитию и находятся в тестовом режиме.
Для анализа были взяты L2ph/L2clientdat/
l2endec
В процессе l2emu netpro

🔹 LaPrizmo - современный инструмент для шифрования/дешифрования и анализа файлов игры Lineage 2. Проект представляет собой полностью переработанную версию утилиты L2Crypt с улучшенной структурой кода, расширенной функциональностью и поддержкой всех версий протоколов.

🔸 Основные возможности:

  • Поддержка всех версий от C1 (111) до Eternal (912)
  • Шифрование/дешифрование с авто-определением версии
  • Пакетная обработка файлов и директорий
  • Анализ сетевых пакетов и структуры DAT-файлов
  • Встроенный HEX-редактор
  • Расширяемость через систему плагинов
  • GUI и консольный режим
💻 Системные требования:

  • Java 11 или выше
  • 4 ГБ RAM (рек. 8 ГБ)
  • Windows/Linux/macOS
🛠 Компоненты:

  • Графический интерфейс
  • Консольный режим для автоматизации
  • Поддержка всех алгоритмов шифрования L2 (XOR, Blowfish, RSA, AES)
  • Инструменты анализа и отладки
📦 Поддерживаемые форматы:

  • Все типы DAT-файлов
  • Сетевые пакеты всех версий
  • Системные файлы игры
  • Конфигурационные файлы
🔧 Функции:

  • Автоопределение версии протокола
  • Пакетная обработка файлов
  • Анализ структуры DAT-файлов
  • Извлечение текстур и моделей
  • Анализ сетевых пакетов
  • Встроенный HEX-редактор
  • Поддержка плагинов



В репозитории присутствует подробнейшая документация по проекту.

P.S. Тестирование проводил бегло, могут быть ошибки и неточности. Буду рад вашим замечаниям, советам и предложениям. Если есть примеры op.src. проектов в подобном направлении был бы благодарен за наводку (язык не важен)
 

Просьба к модерам.
Сменить ссылку на git
 
ии кодинг захватывает форум? на гите какое то месиво всего и сразу.
 
Я бы всем пользователям рекомендовал максимально внимательно изучить исходный код и код сопутствующих либ ДО того, как пытаться запускать что-то из тулз этого автора на своем компьютере.
 
ии кодинг захватывает форум? на гите какое то месиво всего и сразу.
:Spitt: поделись пожалуйста употребляемым веществом
Я бы всем пользователям рекомендовал максимально внимательно изучить исходный код и код сопутствующих либ ДО того, как пытаться запускать что-то из тулз этого автора на своем компьютере.
:Huh:должно быть вроде обидно, но по факту согласен. Я вообще всегда проверяю любой ****** код который беру с сети.
 
расскажите что это за магия и от куда она. По коду видно что там ии ибо разумный человек такое не делает. Даже если взять кто не шарит комментарии на каждую строку в большинстве без нужды ( явный признак использования ии который дает такие комментарии на каждый чих ).
1png.webp
 
Последнее редактирование:
расскажите что это за магия и от куда она
AES используется в UE4/5 делал подобное под другую игру на UE4. А так как умельцев хватает и ремастер для LineAge 2 UE4 уже в работе, данный функционал будет совсем кстати.
 
серьезно? вопрос был в другом напиши от куда такие данные взял ( или все же нейросеть глюк поймала? )
 
Оффтоп:


расскажите что это за магия и от куда она. По коду видно что там ии ибо разумный человек такое не делает. Даже если взять кто не шарит комментарии на каждую строку в большинстве без нужды ( явный признак использования ии который дает такие комментарии на каждый чих ).
Посмотреть вложение 85526

Я всегда знал - что я ИИ :blush

Java:
        // нужна ли здесь потоко-защищенность? // is required concurrent?
        final List<ExDropHolder> dropList = new ArrayList<>(dropCategory.getDropItems());
        Collections.shuffle(dropList);
        // Вдруг сделают значение с минусом // in case if in file will be value lowest than zero
        final long minItemFromGroup = Math.max(dropCategory.getMin(), 0);
        // На случай если мин значение будет больше чем макс // in case if min value being higher than max
        final long maxItemFromGroup = Math.max(minItemFromGroup, dropCategory.getMax());
        // не будем делать интерации @maxItemFromGroup у нас 0. Теоритически может быть в случае если minItemFromGroup <= 0
        // no reason to do iterations if @maxItemFromGroup will 0. May be in case if minItemFromGroup <= 0
        final double totalChance = calculateTotalGroupChance(_type, killer, victim, dropCategory, dropList);
        for (long iterator = minItemFromGroup; iterator <= (maxItemFromGroup == 0 ? -1 : maxItemFromGroup); iterator++)
        {
            final double randomValueForRoll = Rnd.nextDouble() * totalChance;
            double currentChance = 0.d;
            ITEMS : for (ExDropHolder item : dropList)
            {
                ItemTemplate normalTemplate = ItemHolder.getInstance().getTemplate(item.getItemId());
                SpecialItemsHolder specialTemplate = normalTemplate == null ? SpecialItemsHolder.getSpecialItemById(item.getItemId()) : null;
                if (normalTemplate == null && specialTemplate == null)
                {
                    _logger.warn(getClass().getSimpleName() + ": Item with id " + item.getItemId() + " has null template;");
                    continue ITEMS;
                }
                // нельзя допустить чтоб шанс уменьшался! // required to increase chance, check on case if cant be decreased
                // смешно что мобиус конфиг придумал, но он несовместим :)
                // funny thing - mobius created config for increasing chance for selected items, but it will not work there :)
                // из-за этого и приходится делать вот такие финты, считать полный шанс и тд
                // and I need to calculate all chances before guiding the chance
                double itemChanceForPlayer = getPlayerItemDropChance(_type, killer, victim, dropCategory, item, true);
 

Вложения

  • 1742532180378.webp
    1742532180378.webp
    67,7 КБ · Просмотры: 40
серьезно? вопрос был в другом напиши от куда такие данные взял ( или все же нейросеть глюк поймала? )
Некоторые функции делались по наитию и находятся в тестовом режиме.
Буду рад вашим замечаниям, советам и предложениям.

:Huh:для таких писал. Надо было ВОТ ТАК
 
[offtop]


Я всегда знал - что я ИИ :blush

Java:
        // нужна ли здесь потоко-защищенность? // is required concurrent?
        final List<ExDropHolder> dropList = new ArrayList<>(dropCategory.getDropItems());
        Collections.shuffle(dropList);
        // Вдруг сделают значение с минусом // in case if in file will be value lowest than zero
        final long minItemFromGroup = Math.max(dropCategory.getMin(), 0);
        // На случай если мин значение будет больше чем макс // in case if min value being higher than max
        final long maxItemFromGroup = Math.max(minItemFromGroup, dropCategory.getMax());
        // не будем делать интерации @maxItemFromGroup у нас 0. Теоритически может быть в случае если minItemFromGroup <= 0
        // no reason to do iterations if @maxItemFromGroup will 0. May be in case if minItemFromGroup <= 0
        final double totalChance = calculateTotalGroupChance(_type, killer, victim, dropCategory, dropList);
        for (long iterator = minItemFromGroup; iterator <= (maxItemFromGroup == 0 ? -1 : maxItemFromGroup); iterator++)
        {
            final double randomValueForRoll = Rnd.nextDouble() * totalChance;
            double currentChance = 0.d;
            ITEMS : for (ExDropHolder item : dropList)
            {
                ItemTemplate normalTemplate = ItemHolder.getInstance().getTemplate(item.getItemId());
                SpecialItemsHolder specialTemplate = normalTemplate == null ? SpecialItemsHolder.getSpecialItemById(item.getItemId()) : null;
                if (normalTemplate == null && specialTemplate == null)
                {
                    _logger.warn(getClass().getSimpleName() + ": Item with id " + item.getItemId() + " has null template;");
                    continue ITEMS;
                }
                // нельзя допустить чтоб шанс уменьшался! // required to increase chance, check on case if cant be decreased
                // смешно что мобиус конфиг придумал, но он несовместим :)
                // funny thing - mobius created config for increasing chance for selected items, but it will not work there :)
                // из-за этого и приходится делать вот такие финты, считать полный шанс и тд
                // and I need to calculate all chances before guiding the chance
                double itemChanceForPlayer = getPlayerItemDropChance(_type, killer, victim, dropCategory, item, true);
[/offtop]
у тебя в этом смысл есть для функций которые не дают информацию там же иное.


11111.webp
 
:Huh:для таких писал. Надо было ВОТ ТАК
Тут скорее вопрос не к том, что есть поддержка крипта выше 414 (чего? в л2 выше 414 нету), а то, что он поддерживается для разных протоколов? + цифры то не совпадают :\
Так вот вопрос - откуда взялось
Код:
     /**
     * Реализация алгоритма шифрования Lineage 2 версии 5.1.x.
 * Использует AES-128 в режиме CBC с PKCS5Padding.
     */
и как были высчитаны "протоколы" для заголовков, если такого шифрования в л2 никогда не было
 
Тут скорее вопрос не к том, что есть поддержка крипта выше 414 (чего? в л2 выше 414 нету), а то, что он поддерживается для разных протоколов? + цифры то не совпадают :\
Так вот вопрос - откуда взялось
Код:
     /**
     * Реализация алгоритма шифрования Lineage 2 версии 5.1.x.
 * Использует AES-128 в режиме CBC с PKCS5Padding.
     */
и как были высчитаны "протоколы" для заголовков, если такого шифрования в л2 никогда не было
В Unreal Engine 4 были реализованы алгоритмы AES-128, AES-192 и AES-256
Я непосредственно сталкивался с AES_128_GCM2

Назвал Ver 5.1.x для удобства и не более того.

Некоторые функции делались по наитию и находятся в тестовом режиме.
 
В Unreal Engine 4 были реализованы алгоритмы AES-128, AES-192 и AES-256
Я непосредственно сталкивался с AES_128_GCM2

Назвал Ver 5.1.x для удобства и не более того.
Называйте как душе угодно :)
Вопрос второй остается открытый - откуда взялась таблица протоколов если игра на Unreal 2.5 написана?
Java:
         /**
     * Создает информацию о протоколе AES 51x.
         *
         * @param header начало файла для анализа
     * @return информация о протоколе
         */
        private static ProtocolInfo createAes51xInfo(byte[] header) {
            boolean compressed = false;
            int version = 516;
           
            // Проверяем флаг сжатия в заголовке
            if (header.length >= 7) {
                if (header[4] == 0x01) {
                    compressed = true;
                }
               
                // Определяем точную версию
                if (header.length >= 8) {
                    version = header[7] & 0xFF;
                    if (version == 0) {
                        version = 516; // По умолчанию для Hellbound
                    } else if (version == 1) {
                        version = 517; // GoD
                    } else if (version == 2) {
                        version = 530; // Harmony
                    } else if (version == 3) {
                        version = 531; // Tauti
                    } else if (version == 4) {
                        version = 532; // Glory Days
                    } else if (version == 5) {
                        version = 534; // Infinite Odyssey
                    } else if (version == 6) {
                        version = 559; // Helios
                    } else if (version == 7) {
                        version = 578; // Eternal
                    } else if (version == 8) {
                        version = 581; // Prelude of War
                    } else if (version == 9) {
                        version = 600; // Fafurion
                    } else if (version > 9) {
                        version = 600 + version - 9; // Более новые версии
                    } else {
                        version = 516; // По умолчанию
                    }
                }
            }
           
            ProtocolInfo info = new ProtocolInfo(version, CryptoOperations.CryptoType.AES, compressed);
            info.setParam("subversion", version);
            return info;
        }
Ну и что за версии тут указаны?
Логически - Prelude Of War - 225/235/245, когда Fafurion - 166/196
И версии Eternal вроде не существует, ну официально точно :(
 
почему нет протоколов c1, c2, c3, c4, c5, interlude, kamael, gracia final, gracia epilogue, high five? :)
 
:Hot: какие же вы вредные ей богу. Сделал от своей головы - захотелось. Посмотреть заполнение данными для удобоваримости личной и не более.
И если говорить о протоколах то о великие мудрецы:
C3 557/560 C4 65x
Имело место быть.
почему нет протоколов c1, c2, c3, c4, c5, interlude, kamael, gracia final, gracia epilogue, high five? :)
могут быть ошибки и неточности. Буду рад вашим замечаниям, советам и предложениям
 
What are some unique encryption methods?
 
Пробовал кто? Есть скриншоты?
 
Назад
Сверху