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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 11.02.2012, 18:00   #1
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
Какие данные?
char[] copyFrom = { '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0' };
char[] copyTo = {'1','1','1','1','1','1','1'};

int len = 186;
И прогнать по тем примерам что ты написал, распечать (формат я думаю важен).
А я сравню с тем что ява выведет.

Возник еще мальнький вопросик, в яве нет unsigned.. а в делфи некоторые данные в unsigned, я вот думаю мне хватит впилить в sign формат? Смотрел в сервере там long почти не используют... предположу, что все в int.


to Kilatif :Видел тему где ты бота начинал писать, поидее были примерно такие же проблемы. Дописал до чего толькового или кинул?

Последний раз редактировалось Tin-moon, 11.02.2012 в 18:06.
Tin-moon вне форума   Ответить с цитированием
Старый 11.02.2012, 22:38   #2
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Цитата:
Сообщение от Tin-moon Посмотреть сообщение
char[] copyFrom = { '0', '0', '0', '0', '0', '0', '0',
'0', '0', '0', '0', '0', '0' };
char[] copyTo = {'1','1','1','1','1','1','1'};

int len = 186;
И прогнать по тем примерам что ты написал, распечать (формат я думаю важен).
А я сравню с тем что ява выведет.
1 Пример
Код:
byte[] copyFrom = new byte[13] { 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0};
byte[] copyTo = new byte[7] {1, 1, 1, 1, 1, 1, 1};

int len = 186; // 0x000000BA

Array.Copy(BitConverter.GetBytes((Int16)len), 0, copyTo, 0, 2);
//Результат:
//copyTo = {0xBA, 0x00, 1, 1, 1, 1, 1}
2 Пример
Код:
byte[] copyFrom = new byte[13] { 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0};
byte[] copyTo = new byte[7] {1, 1, 1, 1, 1, 1, 1};

int len = 3;

Array.Copy(copyFrom, 0, copyTo, 2, len)
//Результат:
//copyTo = {1, 1, 0, 0, 0, 1, 1}
3 Пример
Код:
byte[] copyFrom = new byte[13] { 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0};
byte[] copyTo = new byte[7] {1, 1, 1, 1, 1, 1, 1};

int xld;

xld = BitConvert.ToInt32(copyTo, 0); //Move(copyTo[0],xld,4);
//Результат:
//xld = 0x01010101
4 Пример аналогичен второму
5 Пример так же аналогичен второму

Цитата:
Возник еще мальнький вопросик, в яве нет unsigned.. а в делфи некоторые данные в unsigned, я вот думаю мне хватит впилить в sign формат? Смотрел в сервере там long почти не используют... предположу, что все в int.
signed, unsigned приставка никак не влияет на размер переменной, эта приставка влияет только на то, будет ли у переменной отрицательные значения . Например:
unsigned int x // размер 4 байт, но вмещает в себя от 0 до 4294967295
signed int x // размер 4 байт, но вмещает в себя от -2147483647 до -2147483647


Цитата:
to Kilatif :Видел тему где ты бота начинал писать, поидее были примерно такие же проблемы. Дописал до чего толькового или кинул?
Да, доходил до Enter World и забрасывал Дальше все легко получается. Вот сейчас пишу на C#, тоже дошел до Enter World и теперь парсирую нужные мне пакеты

Примеры напишу позже

Последний раз редактировалось Kilatif, 12.02.2012 в 00:55.
Kilatif вне форума   Ответить с цитированием
За это сообщение Kilatif нажился спасибкой от:
Старый 12.02.2012, 19:54   #3
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

Вот мой класс BlowFish На C#
Вложения
Тип файла: rar BlowFish.rar (7.8 Кб, 60 просмотров)
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 00:53   #4
Пользователь
 
Регистрация: 29.01.2012
Адрес: г. Минск
Сообщений: 64
Сказал Спасибо: 10
Имеет 5 спасибок в 5 сообщенях
Tin-moon пока неопределено
По умолчанию

Цитата:
Сообщение от Kilatif Посмотреть сообщение
Вот мой класс BlowFish На C#
Спасибо, все-таки с С# переписывать удобнее

Падает на этой функции:
Код:
        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}. Понятное дело что нет в массиве такого числа. Кто знает как эту проблему решить?


Вроде решил:
Код:
        int j = 0;
        if(bts[3-i] < 0){
            j = HelpFunctions.UB2I(bts[3-i]);
        }
        else{
            j = bts[3-i];
        }
        return SBoxes[i][j];
подменяю отрицательные.
Проблема теперь в другом:
Массивы Parray и SBoxes после Init содержат только 0. Хотя в отладке вроде заполняются.

Последний раз редактировалось Tin-moon, 13.02.2012 в 01:19.
Tin-moon вне форума   Ответить с цитированием
Старый 13.02.2012, 01:22   #5
Местный
 
Регистрация: 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   #6
Пользователь
 
Регистрация: 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   #7
Местный
 
Регистрация: 23.02.2009
Сообщений: 319
Сказал Спасибо: 72
Имеет 60 спасибок в 45 сообщенях
Kilatif пока неопределено
По умолчанию

что касается последовательности байт, это где такая у тебя последовательность, я что то не понял? А что касается разных реализаций типа байт, я же говорю - смысл для байта в двоичном и шестнадцатеричном представлении от этого не меняется
Kilatif вне форума   Ответить с цитированием
Старый 13.02.2012, 11:12   #8
Пользователь
 
Регистрация: 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   #9
Местный
 
Регистрация: 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   #10
Пользователь
 
Регистрация: 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 вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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