Перейти до

Кодирование пакета inetaccess


Рекомендованные сообщения

ну тогда я вообще ничерта не пойму , вспомнил про bloc2byte посмотрел в тесте он в обратном порядке , разозлился , заменил у старгайзера порядок (ведь с тесом сошлось кодирование слова) скомпилировал старгайзер заново , сделал make uninstall для пущей точности, создал чистый пакет в 96 байт (чтоб исключить разницу в структурах C и C#) вписываю в первые 6 байтов "00100", 6-7 > 0 и 8 соответсвенно , с 9 байта вписываю логин остальные до оставляю нулевыми , кодирую байты с 8по 40-ой ... и посылаю inetaccess.cpp > 17:06:40 > User '▒}▒▒ǁ▒▒▒ad▒▒▒▒▒ad▒▒▒▒▒ad▒▒' NOT found! реальный "ад ад ад " :)

Ссылка на сообщение
Поделиться на других сайтах
  • Відповіді 67
  • Створено
  • Остання відповідь

Top Posters In This Topic

ну тогда я вообще ничерта не пойму , вспомнил про bloc2byte посмотрел в тесте он в обратном порядке , разозлился , заменил у старгайзера порядок (ведь с тесом сошлось кодирование слова) скомпилировал старгайзер заново , сделал make uninstall для пущей точности, создал чистый пакет в 96 байт (чтоб исключить разницу в структурах C и C#) вписываю в первые 6 байтов "00100", 6-7 > 0 и 8 соответсвенно , с 9 байта вписываю логин остальные до оставляю нулевыми , кодирую байты с 8по 40-ой ... и посылаю inetaccess.cpp > 17:06:40 > User '▒}▒▒ǁ▒▒▒ad▒▒▒▒▒ad▒▒▒▒▒ad▒▒' NOT found! реальный "ад ад ад " :)

Злость - плохой помощник :)

Не надо ничего в Stargazer'е менять, там все правильно. А тест (по крайней мере первый) делался специально для BE-платформы. Потому и порядок там обратный.

Вообще, если честно, я уже и сам не помню что там в том тесте. Я ним просто хотел продемонстрировать принцип отладки: берем шифруем последовательность на сервере, шифруем на клиенте и сравниваем. Не нужно считать тест эталоном, эталон - stargazer.

Ссылка на сообщение
Поделиться на других сайтах

взял blowgish.c старгайзера , закодировал им строку в 16 байт , закодировал своим криптером в 16 байт совпадают :) тем же кодирую пакет передаю по сети . User '▒▒▒▒▒da▒▒▒▒▒da▒▒▒▒▒da▒▒▒▒▒da' NOT found!

Ссылка на сообщение
Поделиться на других сайтах
 private void button1_Click(object sender, EventArgs e)
       {
           string original = "1234567812345678";
           byte[] encrypted;
           byte[] decrypted;
           string password = "pr7Hhen";
           int length = 16;
           int i;
           BlowFish bf = new BlowFish(Encoding.UTF8.GetBytes(password));

           richTextBox1.Text += String.Format("Original string: {0}", original);
           encrypted=bf.Encrypt_ECB(Encoding.UTF8.GetBytes(original));

           string encstr="";
           for (i = 0; i < 16; ++i)
           {
               encstr+=String.Format(" {0:X}", encrypted[i] & 0x000000FF);
           }
           richTextBox1.Text += "\n Encrypted " + encstr;



       }
   }

Ссылка на сообщение
Поделиться на других сайтах
cat test.c
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "stg/blowfish.h"

uint32_t n2l(const unsigned char * c)
{
   uint32_t t = *c++ ;
   t += *c++ << 8;
   t += *c++ << 16;
   t += *c<<24;
   return t;
}

void l2n(uint32_t t, unsigned char * c)
{
   *c++ = t  & 0x000000FF;
   *c++ = t >> 8 & 0x000000FF;
   *c++ = t >> 16 & 0x000000FF;
   *c = t >> 24 & 0x000000FF;
}

void Encrypt(BLOWFISH_CTX * ctx, const char * src, char * dst, int length)
{
   uint32_t a;
   uint32_t b;
   int i;

   for (i = 0; i < length / 8; ++i) {
       a = n2l(src + i * 8);
       b = n2l(src + i * 8 + 4);
       Blowfish_Encrypt(ctx, &a, &;
       l2n(a, dst + i * 8);
       l2n(b, dst + i * 8 + 4);
   }
}

void Decrypt(BLOWFISH_CTX * ctx, const char * src, char * dst, int length)
{
   uint32_t a;
   uint32_t b;
   int i;

   for (i = 0; i < length / 8; ++i) {
       a = n2l(src + i * 8);
       b = n2l(src + i * 8 + 4);
       Blowfish_Decrypt(ctx, &a, &;
       l2n(a, dst + i * 8);
       l2n(b, dst + i * 8 + 4);
   }
}

int main()
{
   char * original = "1234567812345678";
   char * encrypted;
   char * decrypted;
   char * password = "pr7Hhen";
   int length = 16;
   int i;
   BLOWFISH_CTX ctx;

   Blowfish_Init(&ctx, password, strlen(password));
   encrypted = (char *) malloc(17);
   decrypted = (char *) malloc(17);

   *(encrypted + 16) = 0;
   *(decrypted + 16) = 0;

//    printf("Original string: '%s'\n", *original);


   for (i = 0; i < 16; ++i) {
       printf("%.2x ", *(original + i) & 0x000000FF);
   }

   Encrypt(&ctx, original, encrypted, 16);

   printf("Encrypted string: ");

   for (i = 0; i < 16; ++i) {
       printf("%.2x ", *(encrypted + i) & 0x000000FF);
   }

   printf("\n");

   Decrypt(&ctx, encrypted, decrypted, 16);

   printf("Decrypted string: '%s'\n", decrypted);

   free(encrypted);
   free(decrypted);

   return EXIT_SUCCESS;
}

Ссылка на сообщение
Поделиться на других сайтах

test out Encrypted string: e7 b0 9e e4 16 21 62 ca e7 b0 9e e4 16 21 62 ca

Decrypted string: '1234567812345678'

программа Original string: 1234567812345678

Encrypted E7 B0 9E E4 16 21 62 CA E7 B0 9E E4 16 21 62 CA

Ссылка на сообщение
Поделиться на других сайтах

кодирование C# отсюда http://www.schneier.com/code/blowfish.cs только

/ /ToUInt32 requires the bytes in reverse order

закоментировал

// Array.Reverse(block1);

// Array.Reverse(block2);

Ссылка на сообщение
Поделиться на других сайтах

Первые 32 байта шифровать бессмысленно. Сперва идут 8 байт заголовка, который не шифруется. А уже за ним следует зашифрованный пароль.

Ссылка на сообщение
Поделиться на других сайтах

уверен что не там рою .. дабавил в inetaccess.cpp кусок кода для вывода закодированной части LoginS на логин "roman" получил вот что " 5d 4d 95 b9 10 c7 d7 c0 cd 2a 2f 49 b1 e4 0a 91 cd 2a 2f 49 b1 e4 0a 91 cd 2a 2f 49 b1 e4 0a 91" (если пользоватся стандартным авторизатором)

 

ну да я про те 8 не говорю :)

Ссылка на сообщение
Поделиться на других сайтах

когда осылаю своим получаю 3c 0a 17 05 0e a2 b7 e0 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43

 

test тоже дает 3c 0a 17 05 0e a2 b7 e0 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43 80 b8 73 7c 1c a0 87 43

Ссылка на сообщение
Поделиться на других сайтах

Попробуй получить результат с помощью EncodeString/DecodeString - именно эти функции используются в авторизаторе и в плагине. Только обрати внимание на то что они хоть и называются *String, но шифруют только 8 байт.

По этому должны использоваться примерно так:

//-----------------------------------------------------------------------------
inline																		 
void Decrypt(BLOWFISH_CTX * ctx, char * dst, const char * src, int len8)	   
{																			  
for (int i = 0; i < len8; i++)												 
   DecodeString(dst + i * 8, src + i * 8, ctx);							   
}																			  
//-----------------------------------------------------------------------------
inline																		 
void Encrypt(BLOWFISH_CTX * ctx, char * dst, const char * src, int len8)	   
{																			  
for (int i = 0; i < len8; i++)												 
   EncodeString(dst + i * 8, src + i * 8, ctx);							   
}

Ссылка на сообщение
Поделиться на других сайтах

без разницы ..

тут дело в другом если original из 8 байт то коды совпадают иначе рознятся

это в test.c а в старгайзере при посилке того же через клиент (заводской) совсем иное

Ссылка на сообщение
Поделиться на других сайтах

Блин .. это полный писец ... столько мучений и переделок в коде .. опухания и нервов и все из за тупо незамеченной инициализации ... а я все думал почему же у меня ctx разнится .. а оказывается что там не Blowfish_init а InitEncrypt который добавляет pr7Hhen еще много нулевых байтов :)) все .. закодировал на конец :)

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.


×
×
  • Створити нове...