Анализ L2.ini для подключения через KR-клиент

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

duke88

Путник
Пользователь
Сообщения
25
Розыгрыши
0
Репутация
0
Реакции
2
Баллы
13

📌 Анализ L2.ini (RSA 413) в KR-клиенте Lineage II и проблема с кодированием​


Здравствуйте.
Я разработчик из Кореи и недавно начал анализ клиента Lineage II.
Занимаюсь этим около 3 дней, поэтому пока нахожусь на начальном уровне.


Хочу поделиться текущими результатами анализа L2.ini и попросить помощи.




1. Подтверждённая структура​


(1) RSA (версия 413)​


  • L2.ini / User.ini используют RSA (версия 413)
  • Декодирование выполняется через FL2RSACodec::Decode
  • Основные функции:
    • sub_15001000 → encode (ядро)
    • sub_15001130 → decode (ядро)



(2) Различия NA и KR при декодировании​


Обнаружено важное отличие:


NA-клиент​


  • Перед RSA-декодированием исключаются последние
  • Структура:


    [ RSA-данные ] + [ хвост 20 байт ]

KR-клиент​


  • Использует
  • Хвост не отделяется

→ Вероятно, это связано с внутренним флагом или форматом.




(3) Анализ DES (311)​


Рассматривалась возможность использования DES (311), но:


  • GL2DESCodec используется только для .l2r
  • L2.ini / User.ini его не используют

Вывод:


  • И NA, и KR используют RSA (413)
  • DES здесь не участвует



2. Текущая проблема​


Декодирование​


  • KR L2.ini успешно расшифровывается в plaintext

Кодирование​


NA​


  • Использование v413_encdec → работает корректно

KR​


  • Та же схема → клиент не запускается

Дополнительно:


  • Оригинальный KR файл ≈ 5KB
  • После перекодирования ≈ 6KB

→ Это указывает на проблему структуры




3. Анализ RSA-ключей​


Используемый ключ:


  • modulus: 75B4...
  • private exponent: 30b4c2...

Это соответствует v413_encdec (поддерживает encode/decode)


Однако:


  • Оригинал KR определяется как v413_original
  • Судя по всему, поддерживает только decode
  • Private exponent отсутствует

Вывод:


  • Используемый ключ, вероятно, относится к NA или универсальному варианту
  • KR может использовать:
    • другой ключ
    • или другой процесс кодирования



4. Возможные причины​


(A) Отдельный RSA-ключ для KR​


  • Отличающийся modulus или exponent

(B) Отличия в процессе кодирования​


Возможные различия:


  • упаковка блоков (124 → 128)
  • наличие сжатия (zlib?)
  • схема padding
  • обработка длины или хвоста



5. Текущий тупик​


  • FL2RSACodec::Encode выглядит как заглушка (не используется)
  • Реальное кодирование происходит через sub_15001000
  • Не удалось найти путь encode при сохранении INI
  • Не найдено:
    • encode-пути для KR
    • private exponent для KR
    • точного формата v413_original



6. Вопросы​


Буду благодарен за любую информацию:


  1. Существует ли encode-путь для v413_original в KR-клиенте?
  2. Используется ли отдельный RSA-ключ для KR?
  3. Есть ли различия в обработке RSA-блоков между NA и KR?
  4. Как корректно воспроизвести формат v413_original?



7. Цель​


Моя цель — добиться корректного запуска KR-клиента после изменения L2.ini, а также глубже понять внутреннюю структуру клиента (L2.bin, core.dll, engine.dll и другие модули).




8. Контакт​


Буду рад общению и обмену опытом.


Telegram: @superduke1390r
 

📌 Анализ L2.ini (RSA 413) в KR-клиенте Lineage II и проблема с кодированием​


Здравствуйте.
Я разработчик из Кореи и недавно начал анализ клиента Lineage II.
Занимаюсь этим около 3 дней, поэтому пока нахожусь на начальном уровне.


Хочу поделиться текущими результатами анализа L2.ini и попросить помощи.




1. Подтверждённая структура​


(1) RSA (версия 413)​


  • L2.ini / User.ini используют RSA (версия 413)
  • Декодирование выполняется через FL2RSACodec::Decode
  • Основные функции:
    • sub_15001000 → encode (ядро)
    • sub_15001130 → decode (ядро)



(2) Различия NA и KR при декодировании​


Обнаружено важное отличие:


NA-клиент​


  • Перед RSA-декодированием исключаются последние
  • Структура:


    [ RSA-данные ] + [ хвост 20 байт ]

KR-клиент​


  • Использует
  • Хвост не отделяется

→ Вероятно, это связано с внутренним флагом или форматом.




(3) Анализ DES (311)​


Рассматривалась возможность использования DES (311), но:


  • GL2DESCodec используется только для .l2r
  • L2.ini / User.ini его не используют

Вывод:


  • И NA, и KR используют RSA (413)
  • DES здесь не участвует



2. Текущая проблема​


Декодирование​


  • KR L2.ini успешно расшифровывается в plaintext

Кодирование​


NA​


  • Использование v413_encdec → работает корректно

KR​


  • Та же схема → клиент не запускается

Дополнительно:


  • Оригинальный KR файл ≈ 5KB
  • После перекодирования ≈ 6KB

→ Это указывает на проблему структуры




3. Анализ RSA-ключей​


Используемый ключ:


  • modulus: 75B4...
  • private exponent: 30b4c2...

Это соответствует v413_encdec (поддерживает encode/decode)


Однако:


  • Оригинал KR определяется как v413_original
  • Судя по всему, поддерживает только decode
  • Private exponent отсутствует

Вывод:


  • Используемый ключ, вероятно, относится к NA или универсальному варианту
  • KR может использовать:
    • другой ключ
    • или другой процесс кодирования



4. Возможные причины​


(A) Отдельный RSA-ключ для KR​


  • Отличающийся modulus или exponent

(B) Отличия в процессе кодирования​


Возможные различия:


  • упаковка блоков (124 → 128)
  • наличие сжатия (zlib?)
  • схема padding
  • обработка длины или хвоста



5. Текущий тупик​


  • FL2RSACodec::Encode выглядит как заглушка (не используется)
  • Реальное кодирование происходит через sub_15001000
  • Не удалось найти путь encode при сохранении INI
  • Не найдено:
    • encode-пути для KR
    • private exponent для KR
    • точного формата v413_original



6. Вопросы​


Буду благодарен за любую информацию:


  1. Существует ли encode-путь для v413_original в KR-клиенте?
  2. Используется ли отдельный RSA-ключ для KR?
  3. Есть ли различия в обработке RSA-блоков между NA и KR?
  4. Как корректно воспроизвести формат v413_original?



7. Цель​


Моя цель — добиться корректного запуска KR-клиента после изменения L2.ini, а также глубже понять внутреннюю структуру клиента (L2.bin, core.dll, engine.dll и другие модули).




8. Контакт​


Буду рад общению и обмену опытом.


Telegram: @superduke1390r
6. Да там отдельный приватный ключ , которым корейцы зашифровали файлы клиента( в том числе и l2.ini ) , и его нету в l2.exe .Так что использовать оригинальный шифр , увы не получится.
 
6. 네, 한국 측에서 클라이언트 파일(l2.ini 포함)을 암호화하는 데 사용한 별도의 개인 키가 있으며, 이 키는 l2.exe 파일에 없습니다. 따라서 원래 암호화 키를 사용해도 작동하지 않습니다.
내 예상대로였어! 내 직감이 맞았군! l2.exe를 분석해 봐야겠어. 관련 함수나 특정 문자열을 검색해서 분석할 수 있는 방법이 있을까? 있다면 텔레그램에서 친구 추가해 줘.
Сообщение объединено:
Как я и предполагал! Значит, моя догадка была верной! Я попробую проанализировать l2.exe. Можно ли подойти к этому через поиск связанных функций или определённых строк? Если возможно, добавьте меня в друзья в Telegram.
 
Последнее редактирование:
В настоящее время я анализирую KR-клиент. Не могли бы вы подсказать, какие имена файлов могут предположительно содержать RSA-ключи?
 
You can use modified dsetup.dll from here for using v413_encdec for dat and ini files
 
rsa которым корейцы шифровали файлы нету в файлах,
Да, похоже, что самого важного приватного экспонента (private exponent key) действительно нет.
Сообщение объединено:
You can use modified dsetup.dll from here for using v413_encdec for dat and ini files
Мне удалось определить значения модульного ключа, необходимые для шифрования, спасибо.
Теперь мне нужно найти значение приватного ключа.
 

Вложения

  • 2026-04-21 164148.webp
    2026-04-21 164148.webp
    76 КБ · Просмотры: 48
Последнее редактирование:
let I explain a bit more
You don`t need to find keys, just replace original dsetup.dll with modified.
Then you got next things:
1. GameGuard killed
2. Replaced keys in l2.exe with NA version
After replacing dsetup.dll you need to do some additional things:
Decode original dat and ini files and ecncode it again with v413_encdec
 
let I explain a bit more
You don`t need to find keys, just replace original dsetup.dll with modified.
Then you got next things:
1. GameGuard killed
2. Replaced keys in l2.exe with NA version
After replacing dsetup.dll you need to do some additional things:
Decode original dat and ini files and ecncode it again with v413_encdec
Я распаковал system KR-версии с помощью Lineage2 Patch Maker, затем поместил dsetup.dll обратно в оригинальную папку system KR-клиента.
После этого я изменил l2.ini по NA-схеме, закодировал его и поместил обратно в папку system.

Однако при запуске l2.exe клиент не запускается.
Я что-то упустил?
 
Я распаковал system KR-версии с помощью Lineage2 Patch Maker, затем поместил dsetup.dll обратно в оригинальную папку system KR-клиента.
После этого я изменил l2.ini по NA-схеме, закодировал его и поместил обратно в папку system.

Однако при запуске l2.exe клиент не запускается.
Я что-то упустил?
Well probably they changed the addr of the original rsa key, or added additional functions where the key is actually used, so old method with dsetup.dll is no use anymore , but that's just a suggestion , maybe u are just missing something .
 
Well probably they changed the addr of the original rsa key, or added additional functions where the key is actually used, so old method with dsetup.dll is no use anymore , but that's just a suggestion , maybe u are just missing something .
Полностью согласен.
Я начал изучать структуру клиента только 3 дня назад.
В первый день я пытался распаковать DLL, на второй день у меня это получилось.
После этого в течение двух дней я занимался только анализом core.dll.

Также я делаю свой собственный Editor и разрабатываю инструмент кодирования с поддержкой KR. В итоге именно благодаря вам я смог подтвердить, что в dsetup.dll действительно находится модульный RSA-ключ для кодирования,
и теперь моей целью стало найти RsaPrivateExponent413Enc.
Сообщение объединено:
Well probably they changed the addr of the original rsa key, or added additional functions where the key is actually used, so old method with dsetup.dll is no use anymore , but that's just a suggestion , maybe u are just missing something .
Но когда я попытался найти значение приватной экспоненты —
private const string RsaPrivateExponent413Enc = "30b4c2d798d47086145c75063c8e841e71" —
мне, что ещё больше запутало ситуацию, сказали, что оно вообще не нужно.
Поэтому сейчас у меня уже полная путаница в голове.
 
method that I explained work well (tested on proto 166 live).
Ok, lets go step by step
1. Just copy dsetup.dll from patchmaker (it in includes folder)
2. Make backup of original system folder
3. Copy all dat files in temporary folder
4. Decode all dat files with l2encdec
5. Encode all dat files back with l2encdec
6. Decode and change l2.ini
7. Ecndode it back with l2encdec
8. Copy new dat and ini files back into system folder
9. Replace original dsetup.dll
10. enjoy!
P.S. If it still not work you do something wrong
 
method that I explained work well (tested on proto 166 live).
Ok, lets go step by step
1. Just copy dsetup.dll from patchmaker (it in includes folder)
2. Make backup of original system folder
3. Copy all dat files in temporary folder
4. Decode all dat files with l2encdec
5. Encode all dat files back with l2encdec
6. Decode and change l2.ini
7. Ecndode it back with l2encdec
8. Copy new dat and ini files back into system folder
9. Replace original dsetup.dll
10. enjoy!
P.S. If it still not work you do something wrong
Для меня это слишком сложно...
Существует ли отдельный инструмент вроде l2encdec?

При декодировании и кодировании действительно ли требуется файл dsetup.dll из папки system\includes?
Я немного запутался.

Почему вообще приходится проходить через такой сложный процесс?
Разве нельзя просто отредактировать l2.ini для RU или KR клиента и всё?

Или, возможно, есть другой подход — например, патч памяти (ip/port) без изменения ini?
Интересно, пробовал ли кто-нибудь такой способ.
Сообщение объединено:
Ключевая мысль, к которой я сейчас пришёл, такая:
если удастся определить значения, аналогичные RsaPrivateExponent413Enc из NA-версии
(например:
30b4c2d798d47086145c75063c8e841e719776e400291d7838d3e6c4405b504c6a07f8fca27f32b86643d2649d1d5f124cdd0bf272f0909dd7352fe10a77b34d831043d9ae541f8263c6fe3d1c14c2f04e43a7253a6dda9a8c1562cbd493c1b631a1957618ad5dfe5ca28553f746e2fc6f2db816c7db223ec91e955081c1de65),
для каждого региона — например RU / EU / KR и т.д.,
то, возможно, тогда больше не понадобится проходить через весь этот сложный процесс декодирования и повторного кодирования.

Именно так я это сейчас понимаю.
method that I explained work well (tested on proto 166 live).
Ok, lets go step by step
1. Just copy dsetup.dll from patchmaker (it in includes folder)
2. Make backup of original system folder
3. Copy all dat files in temporary folder
4. Decode all dat files with l2encdec
5. Encode all dat files back with l2encdec
6. Decode and change l2.ini
7. Ecndode it back with l2encdec
8. Copy new dat and ini files back into system folder
9. Replace original dsetup.dll
10. enjoy!
P.S. If it still not work you do something wrong
 
Последнее редактирование:
Полностью согласен.
Я начал изучать структуру клиента только 3 дня назад.
В первый день я пытался распаковать DLL, на второй день у меня это получилось.
После этого в течение двух дней я занимался только анализом core.dll.

Также я делаю свой собственный Editor и разрабатываю инструмент кодирования с поддержкой KR. В итоге именно благодаря вам я смог подтвердить, что в dsetup.dll действительно находится модульный RSA-ключ для кодирования,
и теперь моей целью стало найти RsaPrivateExponent413Enc.
Сообщение объединено:
Но когда я попытался найти значение приватной экспоненты —
private const string RsaPrivateExponent413Enc = "30b4c2d798d47086145c75063c8e841e71" —
мне, что ещё больше запутало ситуацию, сказали, что оно вообще не нужно.
Поэтому сейчас у меня уже полная путаница в голове.
Еще раз повторяю вам не найти парного приватного ключа которым закриптовали файлы, его не нужно включать в файлы клиента для дешифрования, достаточно ключа для расшифрования по алгоритму Diffie-Hellman( как я вам и говорил в пм ) .
Вы не сможете ключом для расшифровки зашифровать повторно файлы.
Вам уже предложили вариант который давно работает и работал , через L2encdec.exe( Дешифрует .dat .ini из оригинального шифра , в шифр который в дальнейшем может быть использован ), patcher.exe( записывает новый ключ в L2.exe , возможно могут быть проблемы с другими версиями клиента игры(изначально это для Gracia + ) ), в плане нахождения адресса ключа, по этому и предлагали dsetup.dll, где скорее всего должно быть универсально )
 
Еще раз повторяю вам не найти парного приватного ключа которым закриптовали файлы, его не нужно включать в файлы клиента для дешифрования, достаточно ключа для расшифрования по алгоритму Diffie-Hellman( как я вам и говорил в пм ) .
Вы не сможете ключом для расшифровки зашифровать повторно файлы.
Вам уже предложили вариант который давно работает и работал , через L2encdec.exe( Дешифрует .dat .ini из оригинального шифра , в шифр который в дальнейшем может быть использован ), patcher.exe( записывает новый ключ в L2.exe , возможно могут быть проблемы с другими версиями клиента игры(изначально это для Gracia + ) ), в плане нахождения адресса ключа, по этому и предлагали dsetup.dll, где скорее всего должно быть универсально )
Теперь я понял.

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

Теперь мне понятно, почему невозможно воспроизвести оригинальное кодирование.
Также стало ясно, почему подход с encdec + patch стал стандартным.

И я признаю, что вы разработчик высочайшего уровня — это действительно впечатляет.
 
Назад
Сверху Снизу