Сейчас на форуме: -Sanchez- (+9 невидимых) |
eXeL@B —› Основной форум —› Реверсинг. Как обратить алгоритм. |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 07 января 2019 01:09 · Личное сообщение · #1 |
|
Создано: 24 января 2019 11:17 · Личное сообщение · #2 |
|
Создано: 24 января 2019 11:38 · Поправил: Kindly · Личное сообщение · #3 SReg пишет: Какой "тот случай"? Для не особо одаренных, можете написать алго для примера выше? в своих "тех случаях" я тупо рипнул неисполняемый код, который был оставлен для вычисления magic и к чему контекст Kindly пишет: непредусмотрительным авторам софта мой пост о том, что стоит поискать в коде недостающий кусок для "обращения" необратимого алгоритма. такие случае хоть и редкость, но имеют место быть, может даже стоит проверить ранние билды. ----- Array[Login..Logout] of Life |
|
Создано: 24 января 2019 12:36 · Личное сообщение · #4 Kindly пишет: к чему контекст Для не особо одаренных непонятно Потому что это не тот случай. И то, что алго необратим, было доказано в А то что bartolomeo увлекается нумерологией, и за это отхватил два лукаса, это не показатель что это именно тот случай |
|
Создано: 24 января 2019 13:00 · Личное сообщение · #5 Блин, алго обратим, если рассматриват его как отображение пары (EAX,EDX) в пару (EAX,EDX). Другое дело, что EDX мы теряем. Поэтому появляется перебор. Если бы алго был хорошим блочным шифром, то можно было бы говорить, что лучше перебора мы ничего не сделаем. Но, алго скорее всего дерьмовый блочный шифр. И сеть фейстеля в нем дерьмомая. Например, (0,0) он отображает в (0,0). Так что наверняка есть варианты. Просто, мы их не знаем. |
|
Создано: 24 января 2019 16:40 · Личное сообщение · #6 |
|
Создано: 24 января 2019 20:13 · Личное сообщение · #7 kunix, подскажите, почему функцию ТС вы рассматриваете как алго шифрования на сети Фейстеля? Разве там биекция не благодаря ксору возможна? Ведь симметричный алго биективен (обратное отображение) возможно именно из-за ксора исходных данных с ключём (в частном случае это результат функции расширения ключа) только в обратной последовательности. В функции ТС нету ксора, а остальные операции сжимают исходные данные в цикле, как в хеш-функциях. Развёртка цикла даёт типичную конструкцию |
|
Создано: 24 января 2019 22:24 · Поправил: kunix · Личное сообщение · #8 |
|
Создано: 25 января 2019 00:34 · Личное сообщение · #9 |
|
Создано: 25 января 2019 05:26 · Поправил: bizkitlimp · Личное сообщение · #10 От 0 до 305419896 полмиллиарда раз. У меня при COUNT = 100 одно ядро ищет 12.5 секунд именно это число (начиная с 0). Итого для 536870912 раундов необходимо 777 дней. Хотя в реале это лишь 1/13 от всего диапазона unsigned int. 27 лет иначе для известного и такого количества раундов. В Decode var Number стартовое число и одновременно туда будет результат если функция вернет true. Code:
Code:
|
|
Создано: 25 января 2019 06:40 · Личное сообщение · #11 kunix, в случае расшифровки на каждой итерации цикла нужно применять одно и то же значение (ключ). В случае функции ТС на каждой итерации происходит сжатие, т.е. обе складываемые величины переменные. Такая операция не может быть обращена иначе, чем брут. Например есть у вас число 10. На какую однозначную сумму двух чисел вы его разложите? В сети Фейстеля что шифрование, что расшифрование идут на одних и тех же ключах. В функции ТС такого нету. Code:
В данной функции эта константа своеобразный вектор инициализации, клоторый распределяет более-менее равномерно выходные значения. |
|
Создано: 25 января 2019 10:51 · Личное сообщение · #12 |
|
Создано: 25 января 2019 11:25 · Поправил: Jonny · Личное сообщение · #13 |
|
Создано: 25 января 2019 11:48 · Личное сообщение · #14 Отображение не равно шифрование. Хеш тоже отображение. Code:
Результат функции по сути значение seed (ebx) на предыдущем шаге. ----- старый пень |
|
Создано: 25 января 2019 12:02 · Поправил: kunix · Личное сообщение · #15 Грубо говоря, один раунд функции ТС умножает строку (AX,AX',BX,BX') на некую матрицу по модулю 2^16 (где AX' и BX' - старшие WORD EAX и EBX). (AX,AX',BX,BX') = (AX,AX',BX,BX') * M Соотвенственно, COUNT итераций сработает как (AX,AX',BX,BX') = (AX,AX',BX,BX') * M1 где M1 = M*....*M выполненное COUNT раз. То есть, можно заранее вычислить M1 = M^COUNT, а потом очень быстро вычислять функцию ТС. Тогда весь перебор серийника будет ~2^32 операций умножения (AX,AX',BX,BX') * M1, что быстро. Но это все грубо говоря, ибо там есть еще блядские переносы разрядов из младшего WORD в старший, которые не понятно как эмулировать умножением матриц по модулю 2^16. Если решить эту проблему, все будет заебись. |
|
Создано: 25 января 2019 19:39 · Личное сообщение · #16 bartolomeo пишет: Между прочим число 0xF1A05693 простое, подозреваю что нужно почитать про классы (или кольца) вычетов из курса алгебры. кроме того это число является суммой трёх квадратов: n = a² + b² + c² a = 55 489 b = 22 077 c = 22 077 Совпадение ? - не думаю. (ц) https://en.wikipedia.org/wiki/Nothing_up_my_sleeve_number |
|
Создано: 25 января 2019 20:04 · Личное сообщение · #17 |
|
Создано: 25 января 2019 21:52 · Поправил: kunix · Личное сообщение · #18 mushr00m, А кто вам сказал, что EBX это ключ шифра? Разве он хоть чем-то похож на ключ? Может тогда можете указать ключ для обратной операции шифрования при данном числе итераций? Тут нифига не асимметрия, значит, обратный ключ найти не проблема. Но вы не можете. Потому что EBX это нифига не ключ, а salt или seed или nonce, называй как хочешь. А вот количество итераций более-менее похоже на ключ. |
|
Создано: 26 января 2019 03:21 · Личное сообщение · #19 |
|
Создано: 26 января 2019 11:19 · Личное сообщение · #20 kunix пишет: Может тогда можете указать ключ для обратной операции шифрования при данном числе итераций? его тут нет. kunix пишет: Потому что EBX это нифига не ключ, а salt или seed или nonce, называй как хочешь. так я об этом несколькими сообщения ранее и написал. kunix пишет: А вот количество итераций более-менее похоже на ключ. нет. Это обычная итеративная конструкция для типичных хэш-фунок с сжатием 2х входных блоков (по 32 бита) в 1 выходной (32 бита). В общем интересно будет узнать обращение функи ТС. Понаблюдаю со стороны. |
|
Создано: 26 января 2019 11:25 · Поправил: kunix · Личное сообщение · #21 mushr00m, У меня подозрение, что мы с вами засрали пару килобайт в базе данных форума впустую. Фокус в том, что скорее всего функция ТС моделируется какими-то алгебраическими операциями в каком-то удачно подобранном кольце, поэтому ее можно здорово ускорить. Тогда обращение будет делаться тупо перебором. |
|
Создано: 26 января 2019 16:28 · Личное сообщение · #22 mushr00m пишет: В общем интересно будет узнать обращение функи ТС. Какое ? С учетом двух выходов ? Если я знаю EBX, то функи туда-сюда выглядят вот так: Code:
Format('%0.8x %0.8x',[calcDword($12345678,100500),globEBX]); >> Выхлоп: 4AB8A527 62C45666 Теперь обратка: Code:
dw:=reCalcDwordOptimized($4AB8A527,100500); Writeln(Format('%0.8x',[dw])); Выхлоп: 12345678 Но мне кажется что это здесь не актуально ) так как в проге судя по коду (выше я приводил) выхлоп должен быть одинаковый на разном кол-ве итераций !!! ----- ds |
|
Создано: 26 января 2019 16:55 · Поправил: dosprog · Личное сообщение · #23 |
|
Создано: 26 января 2019 18:51 · Поправил: kunix · Личное сообщение · #24 С учетом переносов один раунд выглядит как X{i+1} = X{i}*M + B(X{i}) (mod 2^16), где X{i} - это строки (AX,AX',BX,BX'); B(X{i}) - строка переносов разрядов (она зависит входного значения X{i}); M = матрица. Если бы B(...) = B0 была константой, то рекуррентное уравнение X{i+1} = X{i}*M + B0 (mod 2^16) можно была бы решать, найдя фиксированную точку отображения, иначе говоря, найдя такой X0, что X0 = X0 * M + B0. Тогда (X{i+1} - X0) = (X{i} - X0) * M. И все, тут можно ускорять, посчитав M^COUNT заранее. Однако, B(...) - не константа. Чтобы разрулить ситуацию, надо как-то красиво алгебраически совершать операцию B = A / 2^16 (деление с остатком), тем самым доставать переносы. "Красиво алгебраически" - означает сложение и умножение на элементы какого-то кольца. В этом проблема. У кого какие мысли? |
|
Создано: 15 марта 2019 16:26 · Личное сообщение · #25 Доброго времени суток. У вас тут тема подходящая, как мне показалось. Может сможете помочь найти алгоритм, не могу подобрать. Возможно это какой-то алгоритм подсчета кс, наверно что-то типа CRC-24. Имеем последовательность из пяти байт и ключ из трех байт. У меня есть несколько вариантов с подобранными Pin кодами: 3C 77 46 00 23 03 Pin: C0 05 B1 3C 77 46 00 23 04 Pin: C0 05 B6 3C 76 46 00 23 03 Pin: C0 04 B1 3C 97 65 33 02 92 Pin: AD 98 66 3C 22 18 10 73 30 Pin: EA 0C AC 3C 76 45 00 23 03 Pin: 93 89 5C 3C 76 45 00 22 03 Pin: 92 89 5C 3C 21 92 50 81 54 Pin: A0 66 29 3D 21 92 50 81 54 Pin: C3 0D DB Как видите первый байт всегда = 3C. В последнем случае первый байт = 3D,это я сам поменял значение и пин естественно поменялся. В первых трех вариантах я так же игрался с байтами, менял по одному байту и пин соответственно тоже менялся. В общем это область прошивки микроконтроллера, точнее не прошивки, а данных в так называемой области Data (что-то вроде еепром). Шесть байт сидят в самом начале. Пин код подбирается спец оборудованием, он нужен для чтения/записи через бутлоадер. Процедура подбора занимает 8-12 часов, поэтому проще снять блок управления и прочитать контроллер программатором. Я подумал сделать генератор чтобы упростить себе работу, сниму блок, прочитаю через программатор, сгенерирую пин код и потом буду спокойно работать через загрузчик. Но вот никак не могу найти алгоритм, мозгов не хватает. Может кто-нибудь что-то подскажет, направит так сказать, в нужном направлении? Спасибо. |
|
Создано: 15 марта 2019 16:36 · Поправил: f13nd · Личное сообщение · #26 Gipopotam пишет: Но вот никак не могу найти алгоритм, мозгов не хватает. Найти алгоритм куда проще, чем эти 9 записей интерполировать во что-то работающее. По крайней мере пар должно быть гораздо больше, чтоб хотя бы имело смысл пытаться. ЗЫ: это оборудование скорей всего подбирает ключ к алгоритму, а не сами 3 байта. Подбирает, потому что не знает. Функция, которую ты можешь получить из этих зависимостей, тогда будет соответствовать всего одному ключу и на другом устройстве это работать не будет. ----- 2 оттенка серого |
|
Создано: 15 марта 2019 19:20 · Поправил: hash87szf · Личное сообщение · #27 Gipopotam пишет: В первых трех вариантах я так же игрался с байтами, менял по одному байту и пин соответственно тоже менялся. играйтесь битами начиная с 48 нулей если в алго есь встроеная константа >= 6 байт то без матрицы линеарных уравнений в 48х48 оно не решается теоретически а если у вас нет промежуточных решений до/после вкалываня константы, без здвигов битов, то не решается вообще 3C 77 46 00 23 03 Pin: C005B1 11000000 00000101 10110001 3C 77 46 00 23 04 Pin: C005B6 11000000 00000101 10110110 vs 3C 77 46 00 23 03 Pin: C005B1 11000000 00000101 10110001 3C 76 46 00 23 03 Pin: C004B1 11000000 00000100 10110001 это на водит на мысль о константе в 1 байт поетому есь надежда и хороший шанс Добавлено спустя 4 минуты вот вам хороший тутик про дифф криптоанализ http://theamazingking.com/crypto-diff.php он не поможет но принципы ясней | Сообщение посчитали полезным: Orlyonok, Gipopotam |
<< . 1 . 2 . 3 . |
eXeL@B —› Основной форум —› Реверсинг. Как обратить алгоритм. |