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

Разработка Раздел для совместной разработки/доработки программы

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 13.02.2012, 01:22   #31
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Сообщение от Tin-moon Посмотреть сообщение
Спасибо, все-таки с С# переписывать удобнее

Падает на этой функции:
Код:
        private long S(long x, byte i)
        {
            byte[] bts = new byte[4];

            bts = BitConverter.GetBytes(x);
            return SBoxes[i, bts[3-i]];
        }
Проблема в чем: С# выдает {3, 169, 95, 79, 0, 0, 0, 0}, а ява {3, -87, 95, 79, 0,0,0,0}. Понятное дело что нет в массиве такого числа. Кто знает как эту проблему решить?
число 169 и -87 в двоичном представлении (и в шестнадцатеричном) в первом байте одно и тоже (169 = 0x000000A9; -87 = 0xFFFFFFA9), отличается только знаком. Скорее всего вся проблема в том что элементы твоего массива размером больше чем 1 байт, поэтому при чтении пакета и работы с однобайтовыми элементами, добавляются FF. И если я не ошибаюсь, особо это не влияет на работу с пакетами. И мой тебе совет, просматривай числа в шестнадцатеричном режиме =)
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 01:43   #32
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
число 169 и -87 в двоичном представлении (и в шестнадцатеричном) в первом байте одно и тоже (169 = 0x000000A9; -87 = 0xFFFFFFA9), отличается только знаком. Скорее всего вся проблема в том что элементы твоего массива размером больше чем 1 байт, поэтому при чтении пакета и работы с однобайтовыми элементами, добавляются FF. И если я не ошибаюсь, особо это не влияет на работу с пакетами. И мой тебе совет, просматривай числа в шестнадцатеричном режиме =)
Проблема в том что реализация немного разная. Байт в C# 0..255, а в java -128..127. И еще один здоровенный гемор, то что порядок следования байт в C# {3, 169, 95, 79, 0, 0, 0, 0}, а в java {0,0,0,0, 79, 95, -87, 3}. И помоему это значительно портит мне жизнь). Походу в делфи тоже порядок {3, 169, 95, 79, 0, 0, 0, 0} и байт 0..255.
Tin-moon вне форума   Ответить с цитированием
Старый 13.02.2012, 02:08   #33
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

что касается последовательности байт, это где такая у тебя последовательность, я что то не понял? А что касается разных реализаций типа байт, я же говорю - смысл для байта в двоичном и шестнадцатеричном представлении от этого не меняется
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 11:12   #34
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
что касается последовательности байт, это где такая у тебя последовательность, я что то не понял? А что касается разных реализаций типа байт, я же говорю - смысл для байта в двоичном и шестнадцатеричном представлении от этого не меняется
Код:
        private long S(long x, byte i)
        {
            byte[] bts = new byte[4];

            bts = BitConverter.GetBytes(x);
            return SBoxes[i, bts[3-i]];
        }
Вот тут такая последовательность. Понимаешь тут смысл в чем, оно выбирает из bts числа (которые там получились) bts[3-i] - это число {3, 169, 95, 79, 0, 0, 0, 0}. И в массиве SBoxes выбирает число. Понятное дело что оно не может быть отрицательным. Ща попробую запилить в яве не в байт а в short и глянуть какие данные будут.
Кстати, чисто для сверки, выкинь полученные Parray и SBoxes из BlowFish.Init(key), ключ тоже подсунь.
Tin-moon вне форума   Ответить с цитированием
Старый 13.02.2012, 13:59   #35
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Сообщение от Tin-moon Посмотреть сообщение
Код:
        private long S(long x, byte i)
        {
            byte[] bts = new byte[4];

            bts = BitConverter.GetBytes(x);
            return SBoxes[i, bts[3-i]];
        }
Вот тут такая последовательность. Понимаешь тут смысл в чем, оно выбирает из bts числа (которые там получились) bts[3-i] - это число {3, 169, 95, 79, 0, 0, 0, 0}. И в массиве SBoxes выбирает число. Понятное дело что оно не может быть отрицательным. Ща попробую запилить в яве не в байт а в short и глянуть какие данные будут.
Кстати, чисто для сверки, выкинь полученные Parray и SBoxes из BlowFish.Init(key), ключ тоже подсунь.
для bts[3-i], 3-i - никогда и не будет отрицательным, потому что в моем классе значение i > 3 нигде не используется.

Что касается записи числа в массив.
Вообще, в процессорах Intel используется обратная запись числа, поэтому в пакетах тебе приходит массив с числами, которые записаны задом наперед. И видимо поэтому C# и Delphi переводит число в массив именно задом наперед. И то что ява переводит так число в массив действительно беда, но это уже врятли исправишь. Хотя.. Я яву не знаю, так что может просто есть другая функция для этого)
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 14:05   #36
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
для bts[3-i], 3-i - никогда и не будет отрицательным, потому что в моем классе значение i > 3 нигде не используется.
так верно i проходит от 0 до 3. Тут просто берется значение которые попало под этот индекс (3-i), а вот там уже с -)). В общем с блоу фишем вроде разобрался. сравнил с Делфой).

Проблема теперь в другом... пакет который приходит 186, но данные другие от делфи).

P.S. У меня еще столько IDE никогда не стояло)) QT, Java-ские, C#, Delphi 7
Tin-moon вне форума   Ответить с цитированием
Старый 13.02.2012, 14:44   #37
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Проблема теперь в другом... пакет который приходит 186, но данные другие от делфи).
Так он и будет приходить разный) Он будет приходить всегда разный, потому что каждый раз в нем приходят разные RSA-key, SessionID и BlowFishKey )
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 16:13   #38
Новичок
 
Регистрация: 12.02.2012
Сообщений: 27
Сказал Спасибо: 8
Имеет 0 спасибок в 0 сообщенях
ErgoZ пока неопределено
По умолчанию

У меня другая проблема)) я запутался немного.
Тоже пишу на яве чат-клиент. Так как я запутался, скажите правильно ли я думаю:

Подключаюсь к серверу и получаю примерно такой пакет:

02-13 10:34:04.991: I/System.out(472): BA00D139D82F2A4002CCFF622488E4B92F4D8C9FD87DFFA459 92F106EEE2E80ECB58A8545471CE687B6CDA41D9245B611BB0 2A17E29CC8FFE881B2921E48685738E3E933CD655849B8FCED 69150E4612BB2061BBB5C6C2E8DC2E406F714F6E5EEFD3B99C 66A6D72492A61832D4B574F8120156AE8175A46C14274B78F8 7AECB50C8FFD2CF4AEE6E63BE19F8C0F6F2E34907CAEC62768 AAB6D45DDF13D2DBC90B877D48CE68610756087308564ECDC5 1124174228D4EC14701414

Далее отсекаю у него размер пакета (ba00) и получившийся пакет без первых 2 байт я должен декодить по блоуфишу с начальным ключём, правильно?
Тогда я получаю:

02-13 10:34:05.021: I/System.out(472): 4580A1F93794E8BC6B523C3B95239FD1530F626B0574949395 E97080C912DBB2F872AE1847A8717CB6D5D882FFC7856363FB 8ECC3014FF634B639CE48622886AE51F15DF43DB777542FEA3 BBA1869AA055DEEFF1798BA6277B73F0D39F6894E02B474CDA 22436B8CA29D43218CF5AA6F34EC28497854E0E1D12601FAFA A01B328308722E1B10570299F03C51727BCDC451B69A894B99 1C8B0C145E9DD8D62B49F82B2D62EAD85F0CE4F6B78188BB45 44C5B149F46A39D21423EF


Дальше я по идее должен получить ключ для XOR, т.е. взять 178-181 байты (из оставшихся 184, т.к. отрезал 2 байта размера), или другие, если допустим не считать уже отрезанные 2 байта размера? Вот тут я не понимаю, запутался. Просто xkor тут такие значения писал http://coderx.ru/showpost.php?p=30849&postcount=53

Какие всё таки байты брать для ключа ксора?
Правильно ли я понимаю что ксорить надо будет по 4 байта начиная с первого и заканчивая размером пакета минус размер ксор ключа (т.е. 4 байта).

Ещё загвоздка в том, что не могу найти описание того как ксорить на яве, я так понял через символ ^, но он ругается на то что его нельзя использовать с типом byte, в котором у меня пакет и ключ. Где можно найти инфу по этому поводу? в исходниках серва не смог более менее путное найти.


Сильно не пинайти, кодить на яве начал неделю назад.
ErgoZ вне форума   Ответить с цитированием
Старый 13.02.2012, 16:44   #39
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

ErgoZ, что бы долго не писать, сразу пришлю код =) (C#)

Код:
        public static byte[] AntiXor(byte[] s)
        {
            long key, b;
            int i;
            byte[] b_temp;

            b_temp = new byte[4];

            i = s.Length - 8;

            key = BitConverter.ToInt32(s, i);
            while (i >= 7)
            {
                i = i - 4;
                b = BitConverter.ToInt32(s, i);
                b = b ^ key;
                key = key - b;

                Array.Copy(BitConverter.GetBytes((Int32)b), 0, b_temp, 0, 4); 
                Array.Copy(b_temp, 0, s, i, 4);
            }

            return s;
        }
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 17:02   #40
Новичок
 
Регистрация: 12.02.2012
Сообщений: 27
Сказал Спасибо: 8
Имеет 0 спасибок в 0 сообщенях
ErgoZ пока неопределено
По умолчанию

в эту ф-цию подставляем пакет с размером или без него? с типом пакета или без него?
ErgoZ вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Lineage II > L2PacketHack > Разработка



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

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


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

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

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