Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Не могу зареверсировать цикл


Автор: shwshww 2.4.2018, 05:29
Доброго времени суток. Помогите решить одну проблему
у меня есть программа следующего вида:

Код

#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <stdio.h>
#define k "jf1ay9238x0ax0"
char f1(char a);
int a1(int a);

int main()
{
    srand(time(0));

    printf("Enter path:");
    fflush(stdout);
    char p[64];
    scanf("%s", p);
    char c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);

    FILE* f = fopen(p, "rb");
    if (f == NULL) {
        printf("Error opening file");
        getch();
        exit(-3);
    }
    char m[64];
    fread(&m, sizeof(char), 64, f);
    fclose(f);

    printf("%s\n", p);
    printf("Cipher?(Y/n):");
    fflush(stdout);
    char r;
    scanf("%c", &r);
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
    char ot = r;

    if (ot == 'Y') {
        char s = 0;
        for (int i = 0; i < 64; ++i) {
            s ^= m[i];
        }

        for (int i = 0; i < 63; ++i) {
            m[i] ^= (m[i + 1] ^ s^r^i ^ ((0xf) << 4) ^ ((i % 2) << 7));
            m[i] = f1(m[i]);
        }
        m[63] ^= s;

        FILE* f = fopen("out.txt", "wb");
        fputc(s, f);
        fwrite(m, sizeof(char), 64, f);
        fclose(f);    
    }

    return 0;
}
char f1(char a)
{
    char ss = 0xd;
    static int t = 0;
    int b = a1(rand()) % 0xffff;

    b <<= 4;
    b ^= (k[(t++) % ss] >> 4);
    b <<= 4;
    b ^= (k[(t++) % ss]);

    a ^= (char)b;
    return a;
}

int a1(int a) {
    if (a < 0)
        return (-a);
    else
        return a;
}


Её суть в том, что она читает побайтно файл с текстом, а затем хорит его по определенному алгоритму и записывает в другой файл.
В общем суть моего вопроса:
помогите написать реверсирующую процедуру, т.е. чтобы подавая на вход зашифрованное сообщение получался исходный читаемый текст.
Всю голову себе уже исколупал, 10 раз прошел по алгоритму, но все равно где-то я что-то упускаю (может сдвиг может еще что)
И да, я знаю, что 2х xor дает исходный результат.

Спасибо большое заранее тем, кто откликнется

Автор: Romikgy 2.4.2018, 09:12
Цитата(shwshww @  2.4.2018,  04:29 Найти цитируемый пост)
помогите написать реверсирующую процедуру, т.е. чтобы подавая на вход зашифрованное сообщение получался исходный читаемый текст.

как вы собираетесь получать значение 
Цитата(shwshww @  2.4.2018,  04:29 Найти цитируемый пост)
int b = a1(rand()) % 0xffff;

???
особенно при 
Цитата(shwshww @  2.4.2018,  04:29 Найти цитируемый пост)
 srand(time(0));


Автор: _zorn_ 2.4.2018, 15:57
Помогите пожалуйста получить файл из хеша 5770aeabb6b8b412bd271d4ff774064d9982e3c7
У меня там четкая видюха была, теперь не знаю как востановить. Остался только хеш smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)