Показать сообщение отдельно
Старый 13.11.2014, 11:44   #1
Новичок
 
Регистрация: 13.11.2014
Сообщений: 20
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
i_am_kisly пока неопределено
По умолчанию Проблема с L2 Init Blowfish

День добрый, начал писать свой чат-клиент под android на Csharp/xamarin.
Столкнулся с проблемой дешифрования блоуфишем.

Набросал самый простой минимальный код без излишеств, скриншот output'а прилагаю.

Код:
using System;
using System.Text;

namespace l2packet
{
    unsafe class MainClass
    {
        public static byte[] StringToByteArray(String hex)
        {
            int NumberChars = hex.Length;

            byte[] bytes = new byte[NumberChars / 2];

            for (int i = 0; i < NumberChars; i += 2)
                bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);

            return bytes;
        }

        public static void Main (string[] args)
        {
            byte[] STATIC_BLOWFISH_KEY = new byte[32];
            string key = "6B60CB5B82CE90B1CC2B6C556C6C6C6C";
//or
            STATIC_BLOWFISH_KEY[0]  = 0x6B;
            STATIC_BLOWFISH_KEY[1]  = 0x60;
            STATIC_BLOWFISH_KEY[2]  = 0xCB;
            STATIC_BLOWFISH_KEY[3]  = 0x5B;
            STATIC_BLOWFISH_KEY[4]  = 0x82;
            STATIC_BLOWFISH_KEY[5]  = 0xCE;
            STATIC_BLOWFISH_KEY[6]  = 0x90;
            STATIC_BLOWFISH_KEY[7]  = 0xB1;
            STATIC_BLOWFISH_KEY[8]  = 0xCC;
            STATIC_BLOWFISH_KEY[9]  = 0x2B;
            STATIC_BLOWFISH_KEY[10] = 0x6C;
            STATIC_BLOWFISH_KEY[11] = 0x55;
            STATIC_BLOWFISH_KEY[12] = 0x6C;
            STATIC_BLOWFISH_KEY[13] = 0x6C;
            STATIC_BLOWFISH_KEY[14] = 0x6C;
            STATIC_BLOWFISH_KEY[15] = 0x6C;

            //C200 вырезал заголовок с размером из пакета
            string str = "9B09F43C6A02BE5DD3D485782B8F54B46F15D32B602D6D9330A3A40519291A8C193BC97F0F05CD004DADD2B01C3B494195DFAE760E00C576690E141826583405CF573B374E2ED2DC0270D8DADB7294F03CDF5757E4CC7D4BD45F73CDABA5C3D53D3A46B8E4E1A5FCB5E1695E05EBD8FF2702FFE6E5FF5B5367FB926F5DFED57A84E5BAD3901EB97E788804F6F03625B82637C2C5E0170FDFECA65FEDA0D5177899AB73432E83182547B870D923554C03A0AB2F50375D0631A27D68707A147A37";
            byte[] bytes_ = StringToByteArray (str);

            additionals ad = new additionals();

            fixed (byte *pbuf = &bytes_[0]){ //TODO: add overload view_raw_data( <- byte of array) later
                ad.view_raw_data(pbuf,true,192);
                    }

            L2_login.NewCrypt newc = new L2_login.NewCrypt (STATIC_BLOWFISH_KEY);
            byte[] res = newc.decrypt (bytes_);

            fixed (byte *ppbuf = &res[0]){
                ad.view_raw_data(ppbuf,true,192);

            }

            }
        }
    }
На выводе получаю явно что-то не то (

Использовал исходники L2.net (он же L2_Login)
Что я делаю не так ?
Миниатюры
Нажмите на изображение для увеличения
Название: init.png
Просмотров: 863
Размер:	54.8 Кб
ID:	2920  
Вложения
Тип файла: zip Crypting.zip (4.1 Кб, 117 просмотров)
i_am_kisly вне форума   Ответить с цитированием