Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Игровой клиент (https://forum.zone-game.info/forumdisplay.php?f=54)
-   -   Самостоятельное декодирование dat без l2encdec (https://forum.zone-game.info/showthread.php?t=16178)

Hint 04.10.2011 01:20

Самостоятельное декодирование dat без l2encdec
 
Скрипт, который декодирует файлы клиента (RSA и gzip). Аналог l2encdec.
В интернете описания алгоритма не нашел, поэтому пришлось разбираться самому (плюс искать ключи). Ставил хуки на gmpz_powm и gmpz_export в libgmp-3, смотрел что передает и получает l2encdec.

PHP код:

<?php

/**
 * L2 file decoder (4 october 2011).
 * @author Hint aka Ilya
 */

function decode($filename$original true)
{
  
$file = @file_get_contents($filename);
  if (!
$file) return false;
  if (
strlen($file) < 28 128) return false;
  
$head mb_convert_encoding(substr($file028), 'UTF-8''UTF-16LE');
  if (
$head != 'Lineage2Ver413') return false;
  
  
$blocks intval((strlen($file) - 28) / 128);
  if (
$blocks 1) return false;
  
  
$size $blocks 128;

  
$file substr($file28$size);
  
  if (
$original)
  {
    
$s base64_decode('l985hHLd9zfvCgzRfo0XLw/vFmGjiorh1ugpvBxuTDz8GSkt2p75AXXkbnOUoYhQtkF9A75u6idNPtHd5bXXvecswKC3HQNghlVjOIF5OgLJpn2e8rRet8CNS+MpCDzkUOaPeGe2dJMU1AUR0JvFdEVRuqhqidw4Ej3BZo/XLYM=');
    
$key gmp_init('0x' bin2hex($s));
    
$exp gmp_init('0x35');
  }
  else
  {
    
$s base64_decode('dbTW3lwBZUQGihrPElhp9D0uCfxVuLHiiVVtr5uHV2NVk0RiiLNlPaHOkch7saXBjxYyNJXFXX1ywIkKg/ab/R/ZQ06xwC8+Rnnt+kMwkxkHASnCZ8hWBNh7tluuIF3jcHrx0hCIgau1Z8Oz0GmuZ8OkxqOqk9JkE9TGYJSuIDk=');
    
$key gmp_init('0x' bin2hex($s));
    
$exp gmp_init('0x1d');
  }
  
  
$data '';
  for (
$i 0$i $blocks; ++$i)
  {
    
$block substr($file$i 128128);
    
$res gmp_powm('0x' bin2hex($block), $exp$key);
    if (!
is_resource($res)) return false;
    
$hex gmp_strval($res16);
    if (
strlen($hex) != 250) return false;
    
$s pack('H*' $hex);
    
    
$size ord($s[0]);
    if (
$size strlen($s) - 1) return false;
    
    if (
$size != 0x7c)
    {
      
$p strlen($s) - $size;
      while (
$p && $s[$p 1] != "\0") --$p;
      
$s substr($s$p$size);
    }
    else
    {
      
$s substr($s, -$size);
    }    
    
$data .= $s;
  }

  
$a unpack('L'$data);
  if (!
is_array($a) || !isset($a[1])) return false;
  
  
$size intval($a[1]);
  
$data substr($data4);
  
$result gzuncompress($data);
  if (
strlen($result) != $size) return false;
  
  return 
$result;
}

// Example
$s decode('l2.ini'true);
if (
$s === false) die('Error!');
file_put_contents('dec-l2.ini'$s);
?>


Deazer 04.10.2011 01:46

Re: Самостоятельное декодирование dat без l2encdec
 
Не ужели тот самый хинт ? )

valsha 04.10.2011 02:36

Re: Самостоятельное декодирование dat без l2encdec
 
да, тот самый

hex1r0 04.10.2011 09:46

Re: Самостоятельное декодирование dat без l2encdec
 
Цитата:

Сообщение от john (Сообщение 141769)
да, тот самый

тот хинт с АЧ?

Hint 04.10.2011 10:32

Re: Самостоятельное декодирование dat без l2encdec
 
Цитата:

Сообщение от hex1r0 (Сообщение 141778)
тот хинт с АЧ?

Сто лет там не появлялся. Тогда уж тот хинт с cheaters.com.ru, если кто еще помнит :)

Добавлено через 55 минут
Если бы люди не зажимали информацию (тогда, когда это не бьет по карману), то все бы мы тратили намного меньше времени впустую.

О чем я говорю:
http://www.l2wh.com/forum/showthread.php?t=1903
Нельзя было просто скопировать ключи?) Теперь мы должны искать бинарник за 24-01-2008. И речь ведь не о исходниках l2encdec.

BITru 01.12.2020 23:03

Re: Самостоятельное декодирование dat без l2encdec
 
Постоянно bool(true) Error! на всех хрониках


Текущее время: 23:05. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot