Сейчас на форуме: -Sanchez- (+9 невидимых)

 eXeL@B —› Основной форум —› Реверсинг. Как обратить алгоритм.
<< . 1 . 2 . 3 .
Посл.ответ Сообщение


Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 07 января 2019 01:09
· Личное сообщение · #1

Приветствую.
Буду благодарен за помощь в реверсе алго:
Code:
  1. MOV EBX,0xF1A05693
  2. MOV EAX, MYNUMBER  
  3. MOV ECX,COUNT
  4.  
  5. @L_4_00000001:
  6.   ADD EAX,EBX
  7.   MOV EDX,EBX
  8.   MOV DX,AX
  9.   ROL EDX,0x10
  10.   ADD EAX,EDX
  11.   XCHG EAX,EBX
  12.   DEC ECX
  13.   JNZ SHORT @L_4_00000001


В eax результат, задача - восстановить MYNUMBER

-----
ds




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 24 января 2019 11:17
· Личное сообщение · #2

Kindly пишет:
именно тот случай, когда непредусмотрительным авторам софта нужно говорить спасибо

Какой "тот случай"? Для не особо одаренных, можете написать алго для примера выше?




Ранг: 275.9 (наставник), 340thx
Активность: 0.22=0.22
Статус: Участник
RBC

Создано: 24 января 2019 11:38 · Поправил: Kindly
· Личное сообщение · #3

SReg пишет:
Какой "тот случай"? Для не особо одаренных, можете написать алго для примера выше?

в своих "тех случаях" я тупо рипнул неисполняемый код, который был оставлен для вычисления magic
и к чему контекст Для не особо одаренных непонятно
Kindly пишет:
непредусмотрительным авторам софта

мой пост о том, что стоит поискать в коде недостающий кусок для "обращения" необратимого алгоритма.
такие случае хоть и редкость, но имеют место быть, может даже стоит проверить ранние билды.

-----
Array[Login..Logout] of Life




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 24 января 2019 12:36
· Личное сообщение · #4

Kindly пишет:
к чему контекст Для не особо одаренных непонятно

Потому что это не тот случай. И то, что алго необратим, было доказано в #12
А то что bartolomeo увлекается нумерологией, и за это отхватил два лукаса, это не показатель что это именно тот случай



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 января 2019 13:00
· Личное сообщение · #5

Блин, алго обратим, если рассматриват его как отображение пары (EAX,EDX) в пару (EAX,EDX).
Другое дело, что EDX мы теряем.
Поэтому появляется перебор.
Если бы алго был хорошим блочным шифром, то можно было бы говорить, что лучше перебора мы ничего не сделаем.
Но, алго скорее всего дерьмовый блочный шифр. И сеть фейстеля в нем дерьмомая.
Например, (0,0) он отображает в (0,0).
Так что наверняка есть варианты. Просто, мы их не знаем.




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 24 января 2019 16:40
· Личное сообщение · #6

kunix пишет:
Блин, алго обратим, если рассматриват его как отображение пары (EAX,EDX) в пару (EAX,EDX).

В пару EAX, EBX, да так я тоже обратил толку от этого нету...

-----
ds




Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 24 января 2019 20:13
· Личное сообщение · #7

kunix, подскажите, почему функцию ТС вы рассматриваете как алго шифрования на сети Фейстеля?
Разве там биекция не благодаря ксору возможна? Ведь симметричный алго биективен (обратное отображение) возможно именно из-за ксора исходных данных с ключём (в частном случае это результат функции расширения ключа) только в обратной последовательности.
В функции ТС нету ксора, а остальные операции сжимают исходные данные в цикле, как в хеш-функциях. Развёртка цикла даёт типичную конструкциюСтруктура Меркла — Дамгора, которая необратима.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 24 января 2019 22:24 · Поправил: kunix
· Личное сообщение · #8

mushr00m,
Просто вглядитесь в алгоритм и увидьте, что он обратим.
Там что-то типа B1 = A + F(B); A1 = B; Это и есть сеть Фейстеля.
Только в алго ТС их два или три за цикл.

XOR заменяется на сложение.
Обратное к сложению - вычитание.
Соответственно, A = B1 - F(A1); B = A1; - обратная операция.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 25 января 2019 00:34
· Личное сообщение · #9

kunix пишет:
XOR заменяется на сложение.

там ROL

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 15.8 (новичок), 3thx
Активность: 0.030.01
Статус: Участник

Создано: 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:
  1. function Encode(const Number, Rounds: UINT): UINT;
  2. asm
  3.   push      rbx
  4.   mov       ebx,$F1A05693
  5.   mov       eax,ecx //Number
  6.   mov       ecx,edx //Rounds
  7.  
  8. @@round:
  9.   add       eax,ebx
  10.   mov       edx,ebx
  11.   mov       dx,ax
  12.   rol       edx,16
  13.   add       eax,edx
  14.   xchg      eax,ebx
  15.   sub       ecx,1
  16.   ja        @@round
  17.   pop       rbx
  18. end;
  19.  
  20. function Decode(const Unknown, Rounds: UINT; var Number: UINT): Boolean;
  21. asm
  22.   sub       rsp,$48
  23.   movdqa    [rsp+$20],xmm6
  24.   movdqa    [rsp+$30],xmm7
  25.   mov       r10d,edx      //Save rounds
  26.   mov       r11d,[r8]     //Start number
  27.   mov       r9,4294967296 //Total numbers
  28.   sub       r9,r11        //Total numbers left
  29.   movd      xmm4,r11d     //Start number
  30.   movd      xmm5,ecx      //Unknown
  31.   pshufd    xmm4,xmm4,0   //Replicate number
  32.   pshufd    xmm5,xmm5,0   //Replicate unknown
  33.   paddd     xmm4,dqword ptr [@@fix]
  34.   movdqa    xmm6,dqword ptr [@@add]
  35.   movdqa    xmm7,dqword ptr [@@ebx]
  36.  
  37. @@number:
  38.   mov       edx,r10d      //rounds
  39.   paddd     xmm4,xmm6     //add 4 to numbers
  40.   movdqa    xmm3,xmm7     //mov ebx,$F1A05693
  41.   movdqa    xmm2,xmm4     //mov eax,numbers
  42.  
  43.   .ALIGN 16
  44. @@round:
  45.   paddd     xmm2,xmm3     //add eax,ebx
  46.   movdqa    xmm1,xmm3     //mov edx,ebx
  47.   pblendw   xmm1,xmm2,$55 //mov dx,ax
  48.   pshuflw   xmm1,xmm1,$B1 //rol edx,16 (p1)
  49.   pshufhw   xmm1,xmm1,$B1 //rol edx,16 (p2)
  50.   paddd     xmm2,xmm1     //add eax,edx
  51.   movdqa    xmm1,xmm2     //mov temp,eax (xchg eax,ebx)
  52.   movdqa    xmm2,xmm3     //mov eax,ebx  (xchg eax,ebx)
  53.   movdqa    xmm3,xmm1     //mov ebx,temp (xchg eax,ebx)
  54.   sub       edx,1         //rounds
  55.   ja        @@round
  56.   movdqa    xmm0,xmm2     //cmp eax,Unknown (p1)
  57.   pcmpeqd   xmm0,xmm5     //cmp eax,Unknown (p2)
  58.   ptest     xmm0,xmm0     //cmp eax,Unknown (p3)
  59.   jnz       @@found
  60.   sub       r9,4          //subtract 4 from total numbers left
  61.   jg        @@number
  62.   movdqa    xmm6,[rsp+$20]
  63.   movdqa    xmm7,[rsp+$30]
  64.   add       rsp,$48
  65.   xor       al,al
  66.   ret
  67.  
  68. @@found:
  69.   movdqa    xmm6,[rsp+$20]
  70.   movdqa    xmm7,[rsp+$30]
  71.   add       rsp,$48
  72.   movmskps  ecx,xmm0      //ie: 00000000 FFFFFFFF 00000000 00000000
  73.   bsf       ecx,ecx       //get position of that dword
  74.   mov       al,1
  75.   cmp       ecx,1
  76.   jl        @@0
  77.   je        @@1
  78.   cmp       ecx,2
  79.   je        @@2
  80.   pextrd    [r8],xmm4,3
  81.   ret
  82.  
  83. @@0:
  84.   pextrd    [r8],xmm4,0
  85.   ret
  86.  
  87. @@1:
  88.   pextrd    [r8],xmm4,1
  89.   ret
  90.  
  91. @@2:
  92.   pextrd    [r8],xmm4,2
  93.   ret
  94.  
  95. @@exit:
  96.   ret
  97.  
  98.   .ALIGN 16
  99. @@fix: dd -4, -3, -2, -1
  100. @@add: dd +4, +4, +4, +4
  101. @@ebx: dd $F1A05693, $F1A05693, $F1A05693, $F1A05693
  102. end;
Сразу по 4 числа вуух. В rad studio так проверял:
Code:
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3. I          : UINT;
  4. Num        : UINT;
  5. Unk        : UINT;
  6. t1, t2, fq : Int64;
  7. begin
  8. Unk := Encode($12345678,100);
  9.  
  10. QueryPerformanceFrequency(fq);
  11. QueryPerformanceCounter(t1);
  12.  
  13. := 0;
  14. Num := 0;
  15. while Decode(Unk,100,Num) do
  16. begin
  17.   //Inc(Num);
  18.   //Inc(I);
  19.   Break;
  20. end;
  21.  
  22. QueryPerformanceCounter(t2);
  23. ShowMessage(FloatToStr((t2-t1)/fq));
  24. ShowMessage(UIntToStr(Num));
  25. end;
Процы такие несчастные... Тут только видюхой.



Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 25 января 2019 06:40
· Личное сообщение · #11

kunix, в случае расшифровки на каждой итерации цикла нужно применять одно и то же значение (ключ).
В случае функции ТС на каждой итерации происходит сжатие, т.е. обе складываемые величины переменные. Такая операция не может быть обращена иначе, чем брут.
Например есть у вас число 10. На какую однозначную сумму двух чисел вы его разложите?
В сети Фейстеля что шифрование, что расшифрование идут на одних и тех же ключах. В функции ТС такого нету.
Code:
  1. XCHG EAX,EBX
затирает изначальное значение псевдо-ключа (ту самую магическую константу).
В данной функции эта константа своеобразный вектор инициализации, клоторый распределяет более-менее равномерно выходные значения.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 25 января 2019 10:51
· Личное сообщение · #12

ClockMan,
Тот ROL- это лишь два WORD местами поменять.
mushr00m
Еще раз, смотрите на эту функцию, как на блочный шифр с фиксированным ключем, который отображает пару (EAX,EBX) в пару (EAX,EBX).
Люди, не только я, пишут, что тогда все обратимо.



Ранг: 36.1 (посетитель), 11thx
Активность: 0.020
Статус: Участник

Создано: 25 января 2019 11:25 · Поправил: Jonny
· Личное сообщение · #13

Code:
  1. = 0xF1A05693
  2. = MYNUMBER  
  3. for(uint i=1;i<=COUNT; i++)
  4. {
  5.   C = B + A + (LOWWORD(+ A) << 16 | HIGHWORD(A))
  6.   // update loop variables
  7.   B = A
  8.   A = C
  9. }




Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 25 января 2019 11:48
· Личное сообщение · #14

Отображение не равно шифрование. Хеш тоже отображение.
Code:
  1.   push      rbx
  2.   mov       ebx,$F1A05693
  3.   mov       eax,ecx //Number
  4.   mov       ecx,edx //Rounds
  5.  
  6. @@round:
  7.   add       eax,ebx        ; x += seed
  8.  
  9.   mov       edx,ebx        ; x += (x << 0x10) | (seed >> 0x10)
  10.   mov       dx,ax
  11.   rol       edx,16
  12.   add       eax,edx
  13.  
  14.   xchg      eax,ebx        ; seed <=> x
  15.   sub       ecx,1
  16.   ja        @@round
  17.   pop       rbx

Результат функции по сути значение seed (ebx) на предыдущем шаге.

-----
старый пень




Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 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.
Если решить эту проблему, все будет заебись.



Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 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



Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 25 января 2019 20:04
· Личное сообщение · #17

kunix пишет:
как на блочный шифр с фиксированным ключем

неужели? изначальный ebx меняется на каждой итерации. Ткните носом, где он фиксированный?



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 25 января 2019 21:52 · Поправил: kunix
· Личное сообщение · #18

mushr00m,
А кто вам сказал, что EBX это ключ шифра?
Разве он хоть чем-то похож на ключ?
Может тогда можете указать ключ для обратной операции шифрования при данном числе итераций?
Тут нифига не асимметрия, значит, обратный ключ найти не проблема.
Но вы не можете.
Потому что EBX это нифига не ключ, а salt или seed или nonce, называй как хочешь.
А вот количество итераций более-менее похоже на ключ.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 26 января 2019 03:21
· Личное сообщение · #19

Здесь поможет умный брут
обратите внимание на
Code:
  1. MOV DX,AX
  2. ROL EDX,0x10
  3. ADD EAX,EDX


где ADD EAX,EDX
эта сумма чисел в виде 3456 1111 + 1111 7890 = выхлоп

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 26 января 2019 11:19
· Личное сообщение · #20

kunix пишет:
Может тогда можете указать ключ для обратной операции шифрования при данном числе итераций?

его тут нет.
kunix пишет:
Потому что EBX это нифига не ключ, а salt или seed или nonce, называй как хочешь.

так я об этом несколькими сообщения ранее и написал.
kunix пишет:
А вот количество итераций более-менее похоже на ключ.

нет. Это обычная итеративная конструкция для типичных хэш-фунок с сжатием 2х входных блоков (по 32 бита) в 1 выходной (32 бита).
В общем интересно будет узнать обращение функи ТС. Понаблюдаю со стороны.



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 26 января 2019 11:25 · Поправил: kunix
· Личное сообщение · #21

mushr00m,
У меня подозрение, что мы с вами засрали пару килобайт в базе данных форума впустую.
Фокус в том, что скорее всего функция ТС моделируется какими-то алгебраическими операциями в каком-то удачно подобранном кольце, поэтому ее можно здорово ускорить.
Тогда обращение будет делаться тупо перебором.




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 26 января 2019 16:28
· Личное сообщение · #22

mushr00m пишет:
В общем интересно будет узнать обращение функи ТС.

Какое ? С учетом двух выходов ? Если я знаю EBX, то функи туда-сюда выглядят вот так:

Code:
  1. function calcDword(dwIn: Dword; count: Dword): Dword; assembler;
  2. asm
  3.         pushad
  4.         MOV     EBX, $F1A05693
  5.         MOV     ECX, EDX       // loop counter
  6.  
  7. @L_1_00000001:
  8.         ADD     EAX, EBX
  9.         MOV     EDX, EBX
  10.         MOV     DX, AX
  11.         ROL     EDX, $10
  12.         ADD     EAX, EDX
  13.         XCHG    EAX, EBX
  14.         DEC     ECX
  15.         JNZ     @L_1_00000001
  16.         mov     result, eax
  17.         mov     globEBX,ebx
  18.         popad
  19. end;


Format('%0.8x %0.8x',[calcDword($12345678,100500),globEBX]);
>>
Выхлоп: 4AB8A527 62C45666

Теперь обратка:

Code:
  1. function reCalcDwordOptimized(inDw,count:Dword):DWord;
  2. asm
  3. pushad
  4.          MOV ECX,EAX
  5.          MOV EAX,$62C45666
  6.          MOV ESI,EDX
  7. @L_6_00000001:
  8.          MOV EBX,ECX
  9.          SHR EBX,$10
  10.          MOV EDX,EAX
  11.          AND EDX,$FFFF
  12.          SUB EDX,EBX
  13.          SHL EDX,$10
  14.          OR EBX,EDX
  15.          MOV EDX,EBX
  16.          SUB EAX,EDX
  17.          SUB EAX,ECX
  18.          XCHG EAX,ECX
  19.          DEC ESI
  20.          JNZ @L_6_00000001
  21.   mov result, ecx
  22.   popad
  23. end;


dw:=reCalcDwordOptimized($4AB8A527,100500);
Writeln(Format('%0.8x',[dw]));

Выхлоп: 12345678

Но мне кажется что это здесь не актуально ) так как в проге судя по коду (выше я приводил) выхлоп должен быть одинаковый на разном кол-ве итераций !!!

-----
ds




Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 26 января 2019 16:55 · Поправил: dosprog
· Личное сообщение · #23

) Весь топик может служить хорошей иллюстрацией того тезиса, что исчерпывающая формулировка задачи уже содержит основную часть ответа



Ранг: 71.2 (постоянный), 33thx
Активность: 0.050.12
Статус: Участник

Создано: 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 (деление с остатком), тем самым доставать переносы.
"Красиво алгебраически" - означает сложение и умножение на элементы какого-то кольца.
В этом проблема.

У кого какие мысли?



Ранг: 1.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 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 часов, поэтому проще снять блок управления и прочитать контроллер программатором. Я подумал сделать генератор чтобы упростить себе работу, сниму блок, прочитаю через программатор, сгенерирую пин код и потом буду спокойно работать через загрузчик. Но вот никак не могу найти алгоритм, мозгов не хватает. Может кто-нибудь что-то подскажет, направит так сказать, в нужном направлении? Спасибо.




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 15 марта 2019 16:36 · Поправил: f13nd
· Личное сообщение · #26

Gipopotam пишет:
Но вот никак не могу найти алгоритм, мозгов не хватает.

Найти алгоритм куда проще, чем эти 9 записей интерполировать во что-то работающее. По крайней мере пар должно быть гораздо больше, чтоб хотя бы имело смысл пытаться.

ЗЫ: это оборудование скорей всего подбирает ключ к алгоритму, а не сами 3 байта. Подбирает, потому что не знает. Функция, которую ты можешь получить из этих зависимостей, тогда будет соответствовать всего одному ключу и на другом устройстве это работать не будет.

-----
2 оттенка серого




Ранг: 64.9 (постоянный), 47thx
Активность: 0.120.02
Статус: Участник

Создано: 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 —› Основной форум —› Реверсинг. Как обратить алгоритм.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати