Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: XXE на Visual Basic Добавлено: 04.03.08 18:39  

Автор вопроса:  Ellic | Web-сайт: persound.vip.su
Вот нашёл алгоритм шифрования XXE на с++. Но в с++ я ещё пока не силён :( Может кто-нибудь сможет этот код перенести на VB? Думаю этим заинтиресуюсь не не только я :)


//////////////////////////////////САМ КОД

#include "comprlib.h"

/* Encode a character */
#define ENC(c) (set[(c) & 077])

/* Set of characters is used */
static char set[] =
    "+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

/* Output one group of 3 bytes, pointed to by 'p' */
static void outenc(char* p)
{
    int c1, c2, c3, c4;

    c1 = *p >> 2;
    c2 = (*p << 4) & 060 | (p[1] >> 4) & 017;
    c3 = (p[1] << 2) & 074 | (p[2] >> 6) & 03;
    c4 = p[2] & 077;
    write_byte(ENC(c1));
    write_byte(ENC(c2));
    write_byte(ENC(c3));
    write_byte(ENC(c4));
}

/* 'fr' is like 'read' */
static int fr(char* buf, int cnt)
{

    register int i, c;

    for (i = 0; i < cnt; ++i)
    {
        c = read_byte();
        if (end_of_data())
            return i;
        buf = c;
    }

    return cnt;
}


/* XXEncode a file */
int encode_xxe()
{
    char buf[80];
    int i, n;


    while (true)
    {
        /* Read a 1 to 45 character line */
        n = fr(buf, 45);
        write_byte(ENC(n));

        for (i = 0; i < n; i += 3)
            outenc(&buf);

        write_byte('\n');

        if (n <= 0)
            break;
    }
    return 0;
}

#define DEC(c) (table[(c) & 0117])
static char table[128];
static int replace;

static void outdec(char* p, int n)
{
    int c1, c2, c3;

    c1 = DEC(*p) << 2 | DEC(p[1]) >> 4;
    c2 = DEC(p[1]) << 4 | DEC(p[2]) >> 2;
    c3 = DEC(p[2]) << 6 | DEC(p[3]);
    if (n >= 1)
        write_byte(c1);
    if (n >= 2)
        write_byte(c2);
    if (n >= 3)
        write_byte(c3);
}

int decode_xxe()
{
    char buf[80];
    char* bp;
    int n, i;

    bp = table;
    for (n = 128; n; n--)
        *(bp++) = 0;

    bp = set;

    for (n = 64; n; n--)
        table[*(bp++) & 0117] = 64 - n;

    while (true)
    {
        /* Read an input line */
        for (i = 0; i < (signed)sizeof(buf); i++)
        {
            buf = read_byte();
            if (end_of_data())
                break;
        }

        n = DEC(buf[0]);
        if (n <= 0)
            break;

        bp = &buf[1];

        while (n > 0)
        {
            if (replace) /* never initialized? */
                outdec(bp, n);
            bp += 4;
            n -= 3;
        }
    }
    return 0;
}



//////////////////////////////////////////COMPRLIB.H





extern int (*end_of_data)(); /* True if no more data left */
extern int (*read_byte)(); /* Read a byte from input */
extern int (*write_byte)(int byte); /* Write a byte to output */
extern int (*beginning_of_data)(); /* Move to beginning of data source */
extern int (*write_array)(void* a, int);/* Write stream of data */
extern int (*write_block)(char c, int); /* Write one byte many times */
extern long (*stream_size)(); /* Retreive length of data source */

/* All encoding/decoding method prototypes */
int fastcopy(); int slowcopy();
int encode_xxe(); int decode_xxe();
int encode_arith(); int decode_arith();
int encode_lzss(); int decode_lzss();
int encode_dmc(); int decode_dmc();
int encode_lzari(); int decode_lzari();
int encode_rle1(); int decode_rle1();
int encode_rle2(); int decode_rle2();
int encode_lzhuf(); int decode_lzhuf();
int encode_collapse(); int decode_collapse();
int encode_lzw(); int decode_lzw();
int encode_splay(); int decode_splay();
int encode_huffman(); int decode_huffman();
int encode_spread(); int decode_spread();
int encode_xor(); int decode_xor();
int encode_addsub(); int decode_addsub();
int encode_uue(); int decode_uue();
int encode_lzo(); int decode_lzo();

typedef struct PAIR {
    char* name;
    char* value;
} PAIR;
typedef PAIR* PPAIR;

typedef struct METHOD_TO_NAME {
    char* name;
    int (*encode)();
    int (*decode)();
} METHOD_TO_NAME;

extern METHOD_TO_NAME methods[]; /* in comprlib.c */

/* ComprLib properties */
int comprlib_set_prop(char* tag, char* value);
char* comprlib_get_prop(char* tag);

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 04.03.08 22:08
Это не алгоритм шифрования, а алгоритм кодирования. И он прост, как бублик. Разбиваешь входной поток на куски по 6 бит и записываешь в выходной поток символ строки +-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz с соответствующим номером.

Ответить

Номер ответа: 2
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #2
Добавлено: 04.03.08 22:45
и файл становится на 25% длинее (из сборника собственных мыслей=)

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 05.03.08 09:46
Нифига подобного, больше чем на треть. Во-первых, из 6 битов получается 8, во-вторых, там, как правило, добавляется разбитие на строки и заголовок.

Ответить

Номер ответа: 4
Автор ответа:
 Ellic



Вопросов: 17
Ответов: 26
 Web-сайт: persound.vip.su
 Профиль | | #4
Добавлено: 05.03.08 15:41
Хе, я как-то всё-таки решил что Base64 немного удобней, вот и сделал прогу на нём :)

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 06.03.08 06:36
Они практически идентичны.

Ответить

Номер ответа: 6
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 06.03.08 17:00
ну видимо base64 удобней тем, что с ним был готовой код=))

Ответить

Номер ответа: 7
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #7 Добавлено: 07.03.08 21:33
http://www.google.com/codesearch?q=lang%3Abasic+file%3AXXE&hl=ru

Ответить

Номер ответа: 8
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #8
Добавлено: 11.03.08 09:12
Я писал декодирование xxe на ассемблере (и постил исходник на этом форуме). В общем, как правильно заметил Sharp, алгоритм простой, только вот один раз с переносом строк ничего не напутать. Есть реализации, которые вставляют в начале строки контрольные суммы строк, что-ли. Так поступает встроенный в Total Commander кодировщик.

Ответить

Номер ответа: 9
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #9
Добавлено: 11.03.08 20:04
Кстати я помню тема была, о том, что картинка не декодировалась обратно. Еле догадались, что там переносы виноваты)) глупо конечно))

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам