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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 18.06.2010, 13:42   #1
Новичок
 
Аватар для arrjj
 
Регистрация: 27.05.2010
Сообщений: 26
Сказал Спасибо: 1
Имеет 13 спасибок в 11 сообщенях
arrjj пока неопределено
По умолчанию

кеи - глобальные переменные типа char * (или char[16] как удобнее), объявляются со старта и равны
outxorkey[8] = 0xc8;
outxorkey[9] = 0x27;
outxorkey[10] = 0x93;
outxorkey[11] = 0x01;
outxorkey[12] = 0xa1;
outxorkey[13] = 0x6c;
outxorkey[14] = 0x31;
outxorkey[15] = 0x97;

Первые 8 байт считываются из пакета InitCrypt

*(int*)GKeyR+=Size; ==

unsigned int old = outxorkey[8] &0xff;
old |= (outxorkey[9] << 8) &0xff00;
old |= (outxorkey[10] << 16) &0xff0000;
old |= (outxorkey[11] << 24) &0xff000000;
old+=out.buf.length;
outxorkey[8] = old &0xff;
outxorkey[9] = (old >> 8) &0xff;
outxorkey[10] = (old >> 16) &0xff;
outxorkey[11] = (old >> 24) &0xff;

Цитата:
Я так туплю потому что C# по своей природе не работает напрямую с указателями.
Я тебе дал пример без указателей.
__________________
#define true false//счастливой отладки суки

Последний раз редактировалось arrjj, 19.06.2010 в 13:17.
arrjj вне форума   Ответить с цитированием
За это сообщение arrjj нажился спасибкой от:
Старый 18.06.2010, 14:47   #2
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

c4-t0
00=KeyInit:c(01)q(Key)d(d)

T1+
2E=KeyPacket:c(id 0-wrong protocol,1-protocol ok)q(key)d(01)d(ServerID)c(01)d(ObfuscationKey)
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 18.06.2010, 14:48   #3
Admin!
 
Аватар для xkor
 
Регистрация: 04.08.2007
Сообщений: 2,360
Сказал Спасибо: 113
Имеет 1,566 спасибок в 651 сообщенях
xkor на пути к лучшему
По умолчанию

я вот как то тоже начинал писать аналог пакетхака только не для линейки а универсальный на C#, но чтот не пошло.., дальше реализации socks5 сервера дело не сдвинулось(
__________________
Я здесь практически не появляюсь!, Skype - ikskor
xkor вне форума   Ответить с цитированием
Старый 18.06.2010, 14:49   #4
Новичок
 
Аватар для arrjj
 
Регистрация: 27.05.2010
Сообщений: 26
Сказал Спасибо: 1
Имеет 13 спасибок в 11 сообщенях
arrjj пока неопределено
По умолчанию

Сорь, у мну для грации там (финал/эпилог), пакеты отличаются от интерлюдии
__________________
#define true false//счастливой отладки суки
arrjj вне форума   Ответить с цитированием
Старый 18.06.2010, 19:46   #5
Новичок
 
Аватар для ecl
 
Регистрация: 15.06.2010
Адрес: Москва
Сообщений: 11
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
ecl пока неопределено
По умолчанию

Спасибо всем.
Теперь работает крипт\декрипт пакетов.
Приступим к реализации парсера пакетов.
ecl вне форума   Ответить с цитированием
Старый 20.06.2010, 02:01   #6
Новичок
 
Аватар для ecl
 
Регистрация: 15.06.2010
Адрес: Москва
Сообщений: 11
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
ecl пока неопределено
По умолчанию

Провафлил я с шифрацией, на первый взгляд было все заебись да не так уж заебись оказалось=(
Дешифрую вот в такое
2D 43 76 10 48 02 00 00 07
вместо
2D 43 76 10 48 02 00 00 00 (это пакет хак дешифровал)


static public void DecryptPacket(Packet packet)
{
byte PreviousByte = 0, CurrentByte;
for (int k = 0; k < packet.Data.Length; k++)
{
CurrentByte = packet.Data[k];
packet.Data[k] = (byte)(CurrentByte ^ packet.CurrentClient.GKey[k & 15] ^ PreviousByte);
PreviousByte = CurrentByte;
}
if (packet.FromServer)
{
unchecked
{
int old = packet.CurrentClient.GKey[8] & 0xff;
old |= (packet.CurrentClient.GKey[9] << 0x08) & 0xff00;
old |= (packet.CurrentClient.GKey[10] << 0x10) & 0xff0000;
old |= (packet.CurrentClient.GKey[11] << 0x18) & (int)0xff000000;
old += packet.Size;
packet.CurrentClient.GKey[8] = (byte)(old & 0xff);
packet.CurrentClient.GKey[9] = (byte)((old >> 0x08) & 0xff);
packet.CurrentClient.GKey[10] = (byte)((old >> 0x10) & 0xff);
packet.CurrentClient.GKey[11] = (byte)((old >> 0x18) & 0xff);
}

}
}

Размер Пакета определяю из первыйх двух байт пакета.
string SizeHex = data[1].ToString("X2") + data[0].ToString("X2");
Size = int.Parse(SizeHex, NumberStyles.AllowHexSpecifier);

Вынес себе весь мозг уже не могу понять где косячу.
Help me please!

Последний раз редактировалось ecl, 20.06.2010 в 09:43.
ecl вне форума   Ответить с цитированием
Старый 20.06.2010, 11:47   #7
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

у тебя ж ИЛ.. вроде...
а ты юзаеш ксор с т1+..
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 20.06.2010, 15:16   #8
Новичок
 
Аватар для arrjj
 
Регистрация: 27.05.2010
Сообщений: 26
Сказал Спасибо: 1
Имеет 13 спасибок в 11 сообщенях
arrjj пока неопределено
По умолчанию

порпобуй используй не int а unsigned int
вместо этого string SizeHex = data[1].ToString("X2") + data[0].ToString("X2");
Size = int.Parse(SizeHex, NumberStyles.AllowHexSpecifier);
лучше какнить так: Size=data[1]*0x100+data[0]; (data какнить типа unsigned char мона объявить)
Ну и чтоб посмотреть где ты ошибся - подебаж пх и посмотри как там ключ меняется и как у тебя.
alexteam, в интерлюдии также как и в грации
__________________
#define true false//счастливой отладки суки
arrjj вне форума   Ответить с цитированием
За это сообщение arrjj нажился спасибкой от:
Старый 20.06.2010, 16:08   #9
Новичок
 
Аватар для ecl
 
Регистрация: 15.06.2010
Адрес: Москва
Сообщений: 11
Сказал Спасибо: 9
Имеет 1 спасибку в 1 сообщении
ecl пока неопределено
По умолчанию

Оказывается увеличивать надо не на Size который записан в первых 2х байтах а на Size-2, т.е. длина пакета не учитывая длины первых двух байт с данными о размере.
+ ко всему прочему ток щас заметил что у меня некоторые пакеты приходят слипшимися, приеду с дачи буду править.

Спасибо.
ecl вне форума   Ответить с цитированием
Старый 20.06.2010, 16:12   #10
Новичок
 
Аватар для arrjj
 
Регистрация: 27.05.2010
Сообщений: 26
Сказал Спасибо: 1
Имеет 13 спасибок в 11 сообщенях
arrjj пока неопределено
По умолчанию

Слипшиеся/обрезанные пакеты будут приходить всегда, я решил так это:
Код:
void l2m_packets::ondata()
{
    start:

    if((con->bytesAvailable()<2) && (!underflow))
        return;
    if(!underflow)
    {
        l2m_uch sz[2];
        sz[0]=0;
        sz[1]=0;
        size=0;
        con->read((char*)sz,2);
        size=sz[0]+sz[1]*0x100;
        if(size==0)
            return;
        delete [] tmp_buf;
        size-=2;
        tmp_buf=new l2m_uch[size];
        readed=con->read((char*)tmp_buf,size);
        if(readed!=size)
        {
            underflow=true;
            return;
        }
    }
    else
    {
        l2m_uint readed2=0;
        readed2=con->read((char*)tmp_buf+readed,size-readed);
        readed+=readed2;
        if(readed==size)
            underflow=false;
        else
            return;
    }
    in.buffromuch(tmp_buf,size);
    onpacket();
    goto start;
}
__________________
#define true false//счастливой отладки суки
arrjj вне форума   Ответить с цитированием
За это сообщение arrjj нажился спасибкой от:
Ответ

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



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

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


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

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

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