В общем долго распространяться не буду, перейду сразу к делу. Есть некая защита. Для того чтобы ее сломать необхомо решить слудующее уравнение : K = (x << 4 + D) ^ (x >> 5 - E) ^ (x + H) под "решить" подразумевается найти х Все числа кроме х - константы Есть подозрение граничащее с уверенностью что решений может быть >1 Необходимо хотя бы одно. Переборы.. Ну если быстрые, потому что такая функция гоняется в защите довольно таки часто с разными константами..
Есть подозрение, что решений может быть 2<sup>5</sup>, т.к. первые 5 битов можно взять произвольно, а остаток вычислять побитово. Хотя могу и ошибаться, проверьте кто-нибудь.
И еще: Порядок операций -(x << 4 + D) и (x >> 5 - E) такой как определен в с++ или же другой? (просто уточнение)
констанами являются : K, D, E, H Да, каждый раз они известны реально защита выглядит так x= initial_value; for() { K = (x << 4 + D) ^ (x >> 5 - E) ^ (x + H) x= f(K); }
Тогда по поводу умножения и деления, т.к. сдвиг влево есть умножение, а вправо - деление. Т.е shl eax,2 умножение числа в eax на 4. Налагаются какие либо нуансы, критерии, ограничения на числа?
Блин, непонимаю. Если есть константы, есть формула. по которой тебе можно вычислить икс. То что тебе мешает ее применить?
икс нельзя вычислить. слева стоит К ((x << 4) + D) ^ ((x >> 5) - E) ^ (x + H) ^ K = 0 Если так легче..
Решение существует не для всех наборов (D,E,H,K). Но если оно существует, то, по-видимому, самый быстрый способ найти иллюстрируется следующей программой (на C): 197326281__ttt.c
the_fixer Не понятно зачем нужно K. Всё сводится к Код (Text): x = f( (x << 4 + D) ^ (x >> 5 - E) ^ (x + H) ); Известена ли эта f() ? Или как раз и требуется воссоздать её текст (вместо решения начального уравнения) ?
f() очень просто реверсится, поэтому она неинтересна. Интересен именно момент с XOR. То есть, как имея результат, получить значение х в начале цикла, чтобы потом из него получить предыдущий К и т.д. А f() была указана для того, чтобы подчеркнуть, что однократный подбор 32-хбитного значения не даст нужного результата..
Это не уравнение с XOR, а известный уже 15 лет криптоалгоритм TEA. При повторении цикла более 14 раз при неизвестном ключе признан стойким. И добро пожаловать в раздел "Криптография". Вот и описание нашел (правда код на Паскале) : http://www.citforum.ru/internet/infsecure/its2000_19.shtml
OLS Гм. было такое подозрение.. на самом то деле .. Но делать поиск по "алгоритм шифрования с XOR" особого смысла не имело. Всем ответившим спасибо. Вопрос снимается.