Показать сообщение отдельно
Непрочитано 08.08.2016, 20:09   #1
Аватар для BSmith
Пользователь

Автор темы (Топик Стартер) А давайте напишем свой L2FileEdit :-)

Вдохновившись темой https://forum.zone-game.info/showthread.php?t=40993 захотелось мне написать на коленке что-то вроде простенького редактора dat файлов, полноценного редактора конечно не получилось, но все же возможно найдутся люди кто подхватит идею

Итак, первым делом пришлось вытащить ключ из l2encdec, тут пришла на помощь IDA, открываю файл l2encdec.exe, декомпил в С код, долгий анализ и ничего не вышло, нету его там, но где то же он есть )) Открываю gg-bps.dll и вот она заветная строка

PHP код:
      v3 "75b4d6de5c016544068a1acf125869f43d2e09fc55b8b1e289556daf9b8757635593446288b3653da1ce91c87bb1a5c18f16323495c55"
           "d7d72c0890a83f69bfd1fd9434eb1c02f3e4679edfa43309319070129c267c85604d87bb65bae205de3707af1d2108881abb567c3b3d0"
           "69ae67c3a4c6a3aa93d26413d4c66094ae20390000001d"

Этих данных нам с головой хватит для дешифрации (Примечание, способ работает после прогона папки system утилитой patcher.exe)

Первые 256 байт это так называемый modulus, оставшиеся 8 байт это publicExponent (то что нужно для инициализации RSAPublicKeySpec)

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

Код:
Свернуть ↑Развернуть ↓


И конечно же результат, точнее вырезки из лога

Результат:
Свернуть ↑Развернуть ↓


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

PHP код:
int count Integer.reverseBytes(byteBuffer.getInt());
for(
int i 0counti++)
{
    
System.out.println(readUtfString(byteBuffer));

BSmith вне форума Ответить с цитированием
Сказали спасибо: