Jump to content

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


Recommended Posts

ну тогда я вообще ничерта не пойму , вспомнил про 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! реальный "ад ад ад " :)

Link to post
Share on other sites
  • Replies 67
  • Created
  • Last Reply

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.

Link to post
Share on other sites

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

Link to post
Share on other sites
 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;



       }
   }

Link to post
Share on other sites
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;
}

Link to post
Share on other sites

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

Link to post
Share on other sites

уверен что не там рою .. дабавил в 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 не говорю :)

Link to post
Share on other sites

Попробуй получить результат с помощью 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);							   
}

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.


×
×
  • Create New...