Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 19.11.2014, 17:09   #11
Новичок
 
Регистрация: 12.11.2014
Сообщений: 3
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
r00tk1d пока неопределено
По умолчанию

Люди помогите!!! (( никак не получается с этим пакетом Init... Вроде бы всё верно делаю, но клиент Interlude никак не реагирует на такой пакет... А Ertheia вообще критует..

PHP код:
static void XorInitPacket(unsigned charrawint sizeint key)
{
    
int i 0;
    
int key2 key;
    for(
6size 4i+=4)
    {
        
int temp = (*(raw 3) << 24) & 0xFF000000 | (*(raw 2) << 16) & 0xFF0000 | (*(raw 1) << 8) & 0xFF00 | *(raw i) & 0xFF;
        
key2 += temp;
        
int temp2 key2 temp;
        
raw[i] = temp2 0xFF;
        
raw[1] = temp2 >> 0xFF;
        
raw[2] = temp2 >> 16 0xFF;
        
raw[3] = temp2 >> 24 0xFF;
    }
    
raw[i] = key2 0xFF;
    
raw[1] = key2 >> 0xFF;
    
raw[2] = key2 >> 16 0xFF;
    
raw[3] = key2 >> 24 0xFF;
};

void CUserSocket::OnCreate()
{
    
m_pAuthUser = new CAuthUser;
    
m_pAuthUser->Init();

    
srand(time(NULL));

    *(
int*)(m_bwKey) = rand();
    *(
int*)(m_bwKey 4) = rand();
    *(
int*)(m_bwKey 8) = rand();
    *(
int*)(m_bwKey 0xc) = rand();

    
m_pCrypt = new CBlowFish(g_bfStaticKeysizeof(g_bfStaticKey));

    
CIOBufferpBuffer CIOBuffer::Alloc();

    
int nLen Assemble(pBuffer->m_Buffer 2IOBUFFER_SIZE"cddbddddbc",
        
0,
        
1234567,    // Session ID
        
0x0000c621,    // protocol version
        
sizeof(m_pAuthUser->m_RSA),
        &
m_pAuthUser->m_RSA,    // public key
        
0x29DD954E,
        
0x77C39CFC,
        
0x97ADB620,
        
0x07BDE0F7,
        
sizeof(m_bwKey),
        
m_bwKey,    // new BlowFish Key
        
0
    
);

    
nLen += 8;    // xor key
    
nLen = (nLen 7) & 0xfffffff8;    // aligment for blowfish

    
XorInitPacket(pBuffer->m_BuffernLenrand());

    
m_pCrypt->Encrypt(pBuffer->m_Buffer 2nLen);    // blowfish encrypt
    
nLen+=2;    // packet total size

    
Read(0);    // WSARead() IOCP early call

    
*(short*)(pBuffer->m_Buffer) = nLen;    // set first bytes to length of packet
    
pBuffer->m_dwSize nLen    // for WSASend
    
Write(pBuffer);    // Write!

    
delete m_pCrypt;    // change blowfish key
    
m_pCrypt = new CBlowFish(m_bwKeysizeof(m_bwKey));

Улетает клиенту вот такое
Код:
00000000: ba 00 e7 22 01 4f 2b 42 68 b1 b9 06 e8 a2 ac a4 
00000010: 17 97 94 2f 4b da 02 02 36 bb 65 02 33 77 fb b4 
00000020: c7 64 23 cf eb b1 c2 fb 97 11 d3 85 19 1e 42 5e 
00000030: 46 f8 fc aa 4f 34 eb cc 39 b0 02 98 fd e0 21 9d 
00000040: dc 5c d3 dd e3 b5 4d fa 38 46 6f 02 d4 4c 9d ce 
00000050: e8 46 9b 88 1b 01 4f cc 69 52 7d ae b5 5e e1 92 
00000060: 3a 6e 92 43 7a c3 82 17 06 2e d2 27 53 1c 25 98 
00000070: 53 ca 27 56 60 e3 9f 14 f6 54 9f bf 9f 48 c8 ed 
00000080: d8 28 e9 93 96 d3 16 7a c9 81 b4 52 c2 d9 8b dd 
00000090: 42 3f 59 cf 1a 11 a3 fa 0c 9b 46 94 e3 0f 91 fb 
000000a0: a7 9f 0a f0 42 ec f2 07 66 ae 86 10 6d 62 cf 12 
000000b0: 01 3b e2 0b ec 99 3d 8b 23 b0
оно же до ксора и шифрования (но с ксор ключом в конце пакета)

Код:
00000000: ba 00 00 87 d6 12 00 21 c6 00 00 6e 12 32 ab a3 
00000010: 1a ee 4c eb 97 09 25 f8 e5 25 ad db d7 80 e1 20 
00000020: 4c 72 d7 1d b4 fb fb c0 7e e9 3d d0 b8 87 3f b1 
00000030: 1c fe ad 5d 17 08 2c 18 9b 26 ec 61 6e 32 95 73 
00000040: 95 7e 37 3d 03 d4 14 be 43 b8 92 3b b2 d1 76 e3 
00000050: a3 0e 87 7d a5 ee ed 69 56 59 57 5f ee c6 17 35 
00000060: 81 10 f7 43 74 32 03 c4 46 c9 e3 a5 d6 29 a6 a6 
00000070: a5 3d c8 e6 af dc 35 19 43 21 0a 2e d8 12 a7 6c 
00000080: 11 d1 a5 ab b1 d6 85 44 72 fb 93 4e 95 dd 29 fc 
00000090: 9c c3 77 20 b6 ad 97 f7 e0 bd 07 27 1d 6e 6e e0 
000000a0: 09 a9 14 24 7c a1 10 0f 0b 06 6a 00 cc cc cc cc 
000000b0: cc cc cc cc cc cc d2 ab 71 63
что у меня может быть не так? Нигде не могу найти точного примера ксора инит пакета

Последний раз редактировалось r00tk1d, 19.11.2014 в 17:30.
r00tk1d вне форума   Ответить с цитированием
Старый 23.11.2014, 04:51   #12
Местный
 
Регистрация: 04.11.2009
Адрес: Где-то в жопе европы
Сообщений: 316
Сказал Спасибо: 32
Имеет 42 спасибок в 39 сообщенях
wimax пока неопределено
По умолчанию

void scrambleMod( char *n )
{
typedef unsigned char byte;
int i;

for( i=0; i<4; i++ ) {
byte temp = n[0x00 + i];
n[0x00 + i] = n[0x4d + i];
n[0x4d + i] = temp;
};

// step 2 xor first 0x40 bytes with last 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[i] = (byte)(n[i] ^ n[0x40 + i]);
};

// step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
for( i=0; i<4; i++ ) {
n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
};

// step 4 xor last 0x40 bytes with first 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
};
};


Не ужели так трудно?
wimax вне форума   Ответить с цитированием
Старый 24.11.2014, 15:52   #13
Новичок
 
Регистрация: 12.11.2014
Сообщений: 3
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
r00tk1d пока неопределено
По умолчанию

Шутка в том, что не трудно. в начале функци CUserSocket::OnCreate
PHP код:
    m_pAuthUser = new CAuthUser;
    
m_pAuthUser->Init(); 
где
PHP код:
R_RANDOM_STRUCT *CAuthUser::InitRandomStruct(void)
{
    static 
unsigned char seedByte 0;
    
unsigned int bytesNeeded;
    static 
R_RANDOM_STRUCT randomStruct;

    
R_RandomInit(&randomStruct);
    
srand((unsigned)time(NULL));

    while (
1) {
        
seedByte rand();
        
R_GetRandomBytesNeeded(&bytesNeeded, &randomStruct);
        if(
bytesNeeded == 0)
            break;

        
R_RandomUpdate(&randomStruct, &seedByte1);
    }

    return(&
randomStruct);
}

void CAuthUser::scrambleModulus()
{
    
unsigned char *scrambledMod m_RSAtemp;

    
memcpy(m_RSAm_rsaPubKey.modulus0x80);

    
// step 1 : 0x4d-0x50 <-> 0x00-0x04
    
for (int i 04i++)
    {
        
temp scrambledMod[0x00 i];
        
scrambledMod[0x00 i] = scrambledMod[0x4d i];
        
scrambledMod[0x4d i] = temp;
    }
    
// step 2 : xor first 0x40 bytes with  last 0x40 bytes
    
for (int i 00x40i++)
    {
        
scrambledMod[i] = (scrambledMod[i] ^ scrambledMod[0x40 i]);
    }
    
// step 3 : xor bytes 0x0d-0x10 with bytes 0x34-0x38
    
for (int i 04i++)
    {
        
scrambledMod[0x0d i] = (scrambledMod[0x0d i] ^ scrambledMod[0x34 i]);
    }
    
// step 4 : xor last 0x40 bytes with  first 0x40 bytes
    
for (int i 00x40i++)
    {
        
scrambledMod[0x40 i] = (scrambledMod[0x40 i] ^ scrambledMod[i]);
    }
}

void CAuthUser::Init()
{
    
R_RANDOM_STRUCT *randomStruct;
    
R_RSA_PROTO_KEY protoKey;

    
randomStruct InitRandomStruct();
    
protoKey.bits 1024;
    
protoKey.useFermat4 1;
    if(
R_GeneratePEMKeys(&m_rsaPubKey, &m_rsaPrivKey, &protoKeyrandomStruct)) {
        
MessageBox(NULLL"ERROR"L"Error"MB_OK || MB_ICONSTOP);
        return;
    }
    
scrambleModulus();

r00tk1d вне форума   Ответить с цитированием
Старый 24.11.2014, 17:48   #14
Новичок
 
Регистрация: 13.11.2014
Сообщений: 20
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
i_am_kisly пока неопределено
По умолчанию

Если кто-нибудь "из старших товарищей" заглядывает сюда, то может поделится чейндж-логом, как меняется протокол от хроник к хроникам ? Я хочу сделать мульти хронико-троно-протокольный Android L2Chat ) и данная информация была бы очень полезна.
i_am_kisly вне форума   Ответить с цитированием
Старый 31.12.2014, 11:47   #15
Новичок
 
Регистрация: 13.11.2014
Сообщений: 20
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
i_am_kisly пока неопределено
По умолчанию

Я не могу разобраться с асинхронными сокетами, прошу посильной помощи от вас.
Задача следующая :
1. Есть некий сервер (но мы то знаем.. что это L2), который после подключения клиента может в любой момент прислать данные, и клииент должен успеть их принять.
2. Если пришедший пакет требует ответа, то ответить не медля.
3. В случае некоторого евента ( например нажатия кнопки ) отправляем пакет.

Я позолил себе набросать небольшую схему, как я это вижу.



Архитектура приложения с асинхронными сокетами
Receive - в цикле, Send - c кнопки и\или ответом. Чего не хватает ?

Чего я не понимаю:
1) как определить что в сокет пришли данные ?
2) можно ли не гонять цикл, а ждать некоторого interrupt , который оповестит о готовности некоторого обьема данных ?
3) ???

Очень надеюсь на вашу помощь. С наступающим новым годом и рождеством !!


Последний раз редактировалось i_am_kisly, 31.12.2014 в 14:44. Причина: исправил картинко
i_am_kisly вне форума   Ответить с цитированием
Старый 01.01.2015, 05:37   #16
Пользователь
 
Регистрация: 11.02.2009
Сообщений: 95
Сказал Спасибо: 36
Имеет 6 спасибок в 6 сообщенях
xixi пока неопределено
По умолчанию

Цитата:
Сообщение от i_am_kisly Посмотреть сообщение
Если кто-нибудь "из старших товарищей" заглядывает сюда, то может поделится чейндж-логом, как меняется протокол от хроник к хроникам ? Я хочу сделать мульти хронико-троно-протокольный Android L2Chat ) и данная информация была бы очень полезна.
Большинство пакетов одинаковые. В частности логин сервер и say2.
xixi вне форума   Ответить с цитированием
За это сообщение xixi нажился спасибкой от:
Старый 01.01.2015, 22:09   #17
Новичок
 
Регистрация: 13.11.2014
Сообщений: 20
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
i_am_kisly пока неопределено
По умолчанию

написал тут :
Код:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace l2packet
{
	class SocketAsyncClient
	{
		public Socket client;

		public byte[] in_data = new byte[0xFFFF];
		public byte[] out_data = new byte[0xFFFF];


		public SocketAsyncClient()
		{
			this.connect (ref client);
			while (true) {
				this.s_read ();

			}
			client.Shutdown (SocketShutdown.Both);
			client.Close ();
		}


		public void connect(ref Socket sock)
		{
			sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
			try
			{
				Console.WriteLine("Сокет успешно создан");
				client.Connect("127.0.0.1", 2106);
				Console.WriteLine("Соединение успешно установлено");
			}
			catch (SocketException ex)
			{
				Console.WriteLine("Ошибка при работе с сокетами: " + ex.Message);
			}
		}


		public int s_read()
		{
			byte[] data = new byte[1024];
			// … заполнение массива data опущено
			SocketAsyncEventArgs async_e = new SocketAsyncEventArgs();
			async_e.SetBuffer(data, 0, 1024);
			async_e.Completed += SocketAsyncCompleted;
			client.ReceiveAsync(async_e);
			Console.WriteLine("Нажмите любую клавишу");
			Console.ReadKey();
			Console.WriteLine ("Приняты байты : {0} {1}", data [0], data [1]);
			return 0;
		}

		public int s_send()
		{
			byte[] data = new byte[1024];
			// … заполнение массива data опущено
			SocketAsyncEventArgs async_e = new SocketAsyncEventArgs();
			async_e.SetBuffer(data, 0, 1024);
			async_e.Completed += SocketAsyncCompleted;
			client.SendAsync(async_e);
			return 0;
		}

		void SocketAsyncCompleted(object o, SocketAsyncEventArgs e)
		{
			if(e.LastOperation == SocketAsyncOperation.Send)
			{
				if(e.SocketError == SocketError.Success)
					Console.WriteLine("Передача выполнена успешна");
				else
					Console.WriteLine("При передаче произошла ошибка");
			}
			if(e.LastOperation == SocketAsyncOperation.Receive)
			{
				if(e.SocketError == SocketError.Success)
					Console.WriteLine("Прием выполнен успешно");

				else
					Console.WriteLine("При приеме произошла ошибка");
			}
		}


	}
}
обьясните, почему если нет задержки, обусловленной Console.ReadKey();, то код возвращает пустой массив. как этого избежать ?

Добавлено через 2 часа 46 минут
догнал до подправил до :
Код:
Код:
      public int s_read()
      {
         byte[] data = new byte[1024];
         // … заполнение массива data опущено
         SocketAsyncEventArgs async_e = new SocketAsyncEventArgs();
         async_e.SetBuffer(data, 0, 1024);
         async_e.Completed += SocketAsyncCompleted;
         while (true) {
            if (client.Available > 0) {
               client.ReceiveAsync (async_e);
               Console.WriteLine ("Приняты байты : {0} {1}", data [0], data [1]);
               break;
            }
         }
         return 0;
      }
не слишком убого ?

Последний раз редактировалось i_am_kisly, 01.01.2015 в 22:09. Причина: Добавлено сообщение
i_am_kisly вне форума   Ответить с цитированием
Старый 02.01.2015, 12:47   #18
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

Товарищи объясните, а зачем вы это делаете? Идея ООГ бота для мобильного устройства интересна и меня тоже посещала. Но где это будет работать? Сейчас 100% популярных L2 серверов имеют доп шифрацию и это все там работать не будет.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
Старый 02.01.2015, 17:33   #19
Новичок
 
Регистрация: 13.11.2014
Сообщений: 20
Сказал Спасибо: 2
Имеет 1 спасибку в 1 сообщении
i_am_kisly пока неопределено
По умолчанию

just for fun )))

может кто поможет и поделится сетевым модулем ?
i_am_kisly вне форума   Ответить с цитированием
Старый 06.01.2015, 00:36   #20
Новичок
 
Регистрация: 31.12.2014
Сообщений: 14
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Kolka пока неопределено
По умолчанию

А по L2 Classic есть информация?

У меня от сервера пакет Init приходит размером 194 байта, что с ними делать?
Kolka вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


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

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

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