Вернуться   CoderX :: Forums > Lineage II > L2PacketHack
Войти через OpenID

L2PacketHack Форум программы L2PacketHack, всё что с ней связано находится тут.
Правила раздела! Обсуждение багов Lineage ЗАПРЕЩЕНО!

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 18.01.2008, 20:02   #1
Новичок
 
Регистрация: 06.11.2007
Сообщений: 7
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
PRO
По умолчанию l2phx & kamael

Будет ли совместимость? Там видимо поменялся алгоритм шифрования пакетов.. Может кто уже сделал newxor.dll для камаэль?) Поделитесь пожалуйста)
PRO вне форума   Ответить с цитированием
Старый 21.01.2008, 19:11   #2
Новичок
 
Регистрация: 06.11.2007
Сообщений: 7
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
PRO
По умолчанию

Сравнение сырцов интерлюд и камаэль ява-серверов показал что ключ и алгоритм шифрования не менялись)

http://www.l2jserver.com/svn/branches/L ... eygen.java
http://www.l2jserver.com/svn/trunk/L2_G ... eygen.java

Может, баг в самом пакетхаке?
PRO вне форума   Ответить с цитированием
Старый 21.01.2008, 23:51   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

Цитата:
Сообщение от PRO
Сравнение сырцов интерлюд и камаэль ява-серверов показал что ключ и алгоритм шифрования не менялись)

http://www.l2jserver.com/svn/branches/L ... eygen.java
http://www.l2jserver.com/svn/trunk/L2_G ... eygen.java

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

Добавлено спустя 13 минут 51 секунду:
такс, глянул счас лог камаэля, шифровачка том собсно старая, НО похоже что ID пакетов изменены %)

Добавлено спустя 14 минут 14 секунд:
сорци явы подтвердили изменение Id некоторых пакетов
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 22.01.2008, 00:56   #4
Гость
 
Сообщений: n/a
По умолчанию

А CryptInit в шифруется чем то?
т.к. у меня в камаэлях крипт инит приходит
Код:
            00 01 02 03 04 05 06 07
15 00 2E 01 03 AB 8E 12 05 13 B6 18 01 00 00 00 09 00 00 00 00 
15 00 2E 01 84 89 E9 35 21 9E 92 4E 01 00 00 00 09 00 00 00 00
15 00 2E 01 56 F0 6B FC DC 40 07 B9 01 00 00 00 09 00 00 00 00
00 01 02 03 04 05 06 07 08 09 0a 0b
т.е. судя по виду не зашифровано и ключ с 5го по 12й байт?
  Ответить с цитированием
Старый 22.01.2008, 02:38   #5
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

вобщем выложел пакетхак с поддержкой камаеля), тестируйте...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
За это сообщение xkor нажился спасибкой от:
Старый 15.02.2008, 23:14   #6
Гость
 
Сообщений: n/a
По умолчанию

2 xkor
вот кусок декомпиленого кода из l2j kamael

пакет RequestBuyItem
private static final String m_C__1F_REQUESTBUYITEM = "[C] 1F RequestBuyItem";

в каком месте тут ИД изменен?
  Ответить с цитированием
Старый 16.02.2008, 04:42   #7
Гость
 
Сообщений: n/a
По умолчанию

А в каком месте тут вообще ИД? Это строка для отображения в лог, можно написать:
private static final String m_C__1F_REQUESTBUYITEM ='Васек купил картошку', и ИДшник от этого не изменицца :D
  Ответить с цитированием
Старый 16.02.2008, 12:29   #8
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

во во, ид смотри в начале функции writeImpl, например вот
Код:
	protected final void writeImpl()
	{
		writeC(0x01);
		
		writeD(_objectId);
...
тут ИД - 01
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 16.02.2008, 23:42   #9
Гость
 
Сообщений: n/a
По умолчанию

чуваки, я походу совсем ниче не вижу, ткните меня носом где тут ИД пакета записан?
кстати l2phx, присваивает этому пакету ИД= 40.

Код:
package net.sf.l2j.gameserver.clientpackets;

import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Logger;
import net.sf.l2j.Config;
import net.sf.l2j.gameserver.TradeController;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.ItemTable;
import net.sf.l2j.gameserver.datatables.MerchantPriceConfigTable;
import net.sf.l2j.gameserver.model.L2TradeList;
import net.sf.l2j.gameserver.model.PcInventory;
import net.sf.l2j.gameserver.model.actor.instance.*;
import net.sf.l2j.gameserver.model.entity.Castle;
import net.sf.l2j.gameserver.network.L2GameClient;
import net.sf.l2j.gameserver.network.SystemMessageId;
import net.sf.l2j.gameserver.serverpackets.*;
import net.sf.l2j.gameserver.templates.L2Item;
import net.sf.l2j.gameserver.util.Util;

// Referenced classes of package net.sf.l2j.gameserver.clientpackets:
//            L2GameClientPacket

public final class RequestBuyItem extends L2GameClientPacket
{

    private static final String m_C__1F_REQUESTBUYITEM = "[C] 1F RequestBuyItem";
    private static Logger m_log = Logger._getLoggerStringLogger(net/sf/l2j/gameserver/clientpackets/RequestBuyItem.getName());
    private int m_listId;
    private int m_count;
    private int m_items[];

    public RequestBuyItem()
    {
    }

    protected void _readImplvV()
    {
        m_listId = _readDvI();
        m_count = _readDvI();
        if(m_count * 2 < 0 || m_count * 8 > m_buf._remainingvI() || m_count > Config.m_MAX_ITEM_IN_PACKETI)
            m_count = 0;
        m_items = new int[m_count * 2];
        for(int i = 0; i < m_count; i++)
        {
            int itemId = _readDvI();
            m_items[i * 2 + 0] = itemId;
            long cnt = _readDvI();
            if(cnt > 0x7fffffffL || cnt < 0L)
            {
                m_count = 0;
                m_items = null;
                return;
            }
            m_items[i * 2 + 1] = (int)cnt;
        }

    }

    protected void _runImplvV()
    {
        L2PcInstance player = ((L2GameClient)_getClientvMMOClient())._getActiveCharvL2PcInstance();
        if(player == null)
            return;
        if(!Config.m_ALT_GAME_KARMA_PLAYER_CAN_SHOPZ && player._getKarmavI() > 0)
            return;
        net.sf.l2j.gameserver.model.L2Object target = player._getTargetvL2Object();
        if(!player._isGMvZ() && (target == null || !(target instanceof L2MerchantInstance) && !(target instanceof L2FishermanInstance) && !(target instanceof L2MercManagerInstance) && !(target instanceof L2ClanHallManagerInstance) && !(target instanceof L2CastleChamberlainInstance) || !player._isInsideRadiusL2ObjectZZZ(target, 150, false, false)))
            return;
        boolean ok = true;
        String htmlFolder = "";
        if(target != null)
        {
            if(target instanceof L2FishermanInstance)
                htmlFolder = "fisherman";
            else
            if(target instanceof L2MerchantInstance)
                htmlFolder = "merchant";
            else
                ok = false;
        } else
        {
            ok = false;
        }
        L2MerchantInstance merchant = null;
        if(ok)
            merchant = (L2MerchantInstance)target;
        else
        if(!ok && !player._isGMvZ())
        {
            player._sendMessageStringV("Invalid Target: Seller must be targetted");
            return;
        }
        L2TradeList list = null;
        if(merchant != null)
        {
            List lists = TradeController.getInstance()._getBuyListByNpcIdIList(merchant._getNpcIdvI());
            if(!player._isGMvZ())
            {
                if(lists == null)
                {
                    Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                    return;
                }
                Iterator i$ = lists._iteratorvIterator();
                do
                {
                    if(!i$._hasNextvZ())
                        break;
                    L2TradeList tradeList = (L2TradeList)i$._nextvObject();
                    if(tradeList._getListIdvI() == m_listId)
                        list = tradeList;
                } while(true);
            } else
            {
                list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
            }
        } else
        {
            list = TradeController.getInstance()._getBuyListIL2TradeList(m_listId);
        }
        if(list == null)
        {
            Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
            return;
        }
        m_listId = list._getListIdvI();
        if(m_count < 1)
        {
            _sendPacketL2GameServerPacketV(new ActionFailed());
            return;
        }
        double castleTaxRate = 0.0D;
        double baseTaxRate = 0.0D;
        if(merchant != null)
        {
            castleTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getCastleTaxRatevD();
            baseTaxRate = merchant._getMpcvMerchantPriceConfigTable$MerchantPriceConfig()._getBaseTaxRatevD();
        }
        long subTotal = 0L;
        int castleTax = 0;
        int baseTax = 0;
        long slots = 0L;
        long weight = 0L;
        for(int i = 0; i < m_count; i++)
        {
            int itemId = m_items[i * 2 + 0];
            int count = m_items[i * 2 + 1];
            int price = -1;
            net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
            if(tradeItem == null)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            L2Item template = ItemTable.getInstance()._getTemplateIL2Item(itemId);
            if(template == null)
                continue;
            if(count > 0x7fffffff || !template._isStackablevZ() && count > 1)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase invalid quantity of items at the same time.").toString(), Config.m_DEFAULT_PUNISHI);
                SystemMessage sm = new SystemMessage(SystemMessageId.m_YOU_HAVE_EXCEEDED_QUANTITY_THAT_CAN_BE_INPUTTEDSystemMessageId);
                _sendPacketL2GameServerPacketV(sm);
                sm = null;
                return;
            }
            price = list._getPriceForItemIdII(itemId);
            if(itemId >= 3960 && itemId <= 4026)
                price = (int)((float)price * Config.m_RATE_SIEGE_GUARDS_PRICEF);
            if(price < 0)
            {
                m_log._warningStringV("ERROR, no price found .. wrong buylist ??");
                _sendPacketL2GameServerPacketV(new ActionFailed());
                return;
            }
            if(price == 0 && !player._isGMvZ() && Config.m_ONLY_GM_ITEMS_FREEZ)
            {
                player._sendMessageStringV("Ohh Cheat dont work? You have a problem now!");
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried buy item for 0 adena.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            if(tradeItem._hasLimitedStockvZ() && count > tradeItem._getCurrentCountvI())
                return;
            subTotal += (long)count * (long)price;
            castleTax = (int)((double)subTotal * castleTaxRate);
            baseTax = (int)((double)subTotal * baseTaxRate);
            if(subTotal + (long)castleTax + (long)baseTax > 0x7fffffffL)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" tried to purchase over ").append(0x7fffffff).append(" adena worth of goods.").toString(), Config.m_DEFAULT_PUNISHI);
                return;
            }
            weight += (long)count * (long)template._getWeightvI();
            if(!template._isStackablevZ())
            {
                slots += count;
                continue;
            }
            if(player._getInventoryvPcInventory()._getItemByItemIdIL2ItemInstance(itemId) == null)
                slots++;
        }

        if(weight > 0x7fffffffL || weight < 0L || !player._getInventoryvPcInventory()._validateWeightIZ((int)weight))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_WEIGHT_LIMIT_EXCEEDEDSystemMessageId));
            return;
        }
        if(slots > 0x7fffffffL || slots < 0L || !player._getInventoryvPcInventory()._validateCapacityIZ((int)slots))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_SLOTS_FULLSystemMessageId));
            return;
        }
        if(subTotal < 0L || !player._reduceAdenaStringL2ObjectvZ("Buy", (int)(subTotal + (long)baseTax + (long)castleTax), player._getLastFolkNPCvL2FolkInstance(), false))
        {
            _sendPacketL2GameServerPacketV(new SystemMessage(SystemMessageId.m_YOU_NOT_ENOUGH_ADENASystemMessageId));
            return;
        }
        for(int i = 0; i < m_count; i++)
        {
            int itemId = m_items[i * 2 + 0];
            int count = m_items[i * 2 + 1];
            if(count < 0)
                count = 0;
            net.sf.l2j.gameserver.model.L2TradeList.L2TradeItem tradeItem = list._getItemByIdIL2TradeList$L2TradeItem(itemId);
            if(tradeItem == null)
            {
                Util._handleIllegalPlayerActionL2PcInstanceV(player, (new StringBuilder()).append("Warning!! Character ").append(player.getName()).append(" of account ").append(player._getAccountNamevString()).append(" sent a false BuyList list_id.").toString(), Config.m_DEFAULT_PUNISHI);
                continue;
            }
            if(tradeItem._hasLimitedStockvZ())
            {
                if(tradeItem._decreaseCountIZ(count))
                    player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
            } else
            {
                player._getInventoryvPcInventory()._addItemStringIL2PcInstanceL2ItemInstance("Buy", itemId, count, player, merchant);
            }
        }

        if(merchant != null)
        {
            merchant._getCastlevCastle()._addToTreasuryIV(castleTax);
            String html = HtmCache.getInstance()._getHtmStringString((new StringBuilder()).append("data/html/").append(htmlFolder).append("/").append(merchant._getNpcIdvI()).append("-bought.htm").toString());
            if(html != null)
            {
                NpcHtmlMessage boughtMsg = new NpcHtmlMessage(merchant._getObjectIdvI());
                boughtMsg._setHtmlStringV(html._replaceAllStringString("%objectId%", String.valueOf(merchant._getObjectIdvI())));
                player._sendPacketL2GameServerPacketV(boughtMsg);
            }
        }
        StatusUpdate su = new StatusUpdate(player._getObjectIdvI());
        su._addAttributeIIV(14, player._getCurrentLoadvI());
        player._sendPacketL2GameServerPacketV(su);
        player._sendPacketL2GameServerPacketV(new ItemList(player, true));
    }

    public String getType()
    {
        return "[C] 1F RequestBuyItem";
    }

}
  Ответить с цитированием
Старый 16.02.2008, 23:59   #10
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

с пакетами от клиента сложнее.., надо искать файл в котором они принимаются, дешифруются и уже по ИД распределяются между такими модулями...
я его чтот ненашел)
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack



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

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


Часовой пояс GMT +4, время: 03:58.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!