Сейчас на форуме: Rio, johnniewalker, vsv1, Magister Yoda, Kybyx (+6 невидимых)

 eXeL@B —› Крэки, обсуждения —› Реверс алго
<< . 1 . 2 .
Посл.ответ Сообщение


Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 25 августа 2011 09:42
· Личное сообщение · #1

Нужна помощь в реверсе алго. Есть выражение
v18 := 5257 * ((67108865 * v17) mod $3FFFC);
Как получить V17? Чем-то мне напомнило рса, но пока не проверял эту мысль.



Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 26 августа 2011 12:27
· Личное сообщение · #2

если я понял всю логику, то в упрощенном варианте решение задачи такое:
x = A*y mod n
y = x*A^(-1) mod n
что по сути и есть rsa



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

Создано: 26 августа 2011 14:25 · Поправил: tundra37
· Личное сообщение · #3

Nightshade Формулу сегодня проверял с доказательством. Для v17 из 0..3FFFB работает
Обратное преобразование тоже верное. Лень его переписывать и ввязываться в спор : можно ли делить
на 0х1489 или обязательно обратное искать. Делить можно, а можно обратное найти. По условию там все помещается в 32 бита(и даже чуть меньше).
Промикс скорее всего расширил мою чуть дальше 0..3FFFB. Я тоже могу посмотреть, но ты так и не ответил : v17 полное слово или ?

Av0id Лень смотреть RSA, но тут необратимый алгоритм, т.к. при первом умножении сначала делают mod 2^32 , а потом mod 0x3FFFC Да и 0x3FFFC число составное. А в РСА вроде простые используют.
++++++++++++++++++
Глянул в вики. В РСА берут по модулю p*q - где p, q - простые.




Ранг: 241.9 (наставник), 107thx
Активность: 0.140.01
Статус: Участник

Создано: 26 августа 2011 14:40 · Поправил: Nightshade
· Личное сообщение · #4

Code:
  1.  call    _rand_0
  2. movzx   eax, ax                      eax:=word(eax) 
  3.  mov     [ebp+var_14], eax     v17 = eax

Code:
  1. 02F7EC46    8B45 EC         MOV EAX,DWORD PTR SS:[EBP-14]     v18=v17
  2. 02F7EC49    69C0 01000004   IMUL EAX,EAX,4000001
  3. 02F7EC4F    33D2            XOR EDX,EDX
  4. 02F7EC51    B9 FCFF0300     MOV ECX,3FFFC
  5. 02F7EC56    F7F1            DIV ECX
  6. 02F7EC58    8A06            MOV AL,BYTE PTR DS:[ESI]
  7. 02F7EC5A    0FB64E 01       MOVZX ECX,BYTE PTR DS:[ESI+1]
  8. 02F7EC5E    34 9D           XOR AL,9D
  9. 02F7EC60    0FB6C0          MOVZX EAX,AL
  10. 02F7EC63    69D2 89140000   IMUL EDX,EDX,1489
  11. 02F7EC69    8955 EC         MOV DWORD PTR SS:[EBP-14],EDX


v17 - изначально word
v18 - dword



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

Создано: 26 августа 2011 17:02
· Личное сообщение · #5

Странно, что спор возник на ровном месте
Все очень просто ! Все правильно сказал Archer и Wyfinger, а Promix_17 все реализовал в правильной формуле.
Но можно еще понятнее :
Если v18 = 5257 * ((67108865 * v17) % 0x3FFFC) и v17 - word v18 - dword , то v17 = ((v18 / 5257) * 49001) % 0xCCCC



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

Создано: 26 августа 2011 17:58
· Личное сообщение · #6

LazyCat Я не спорю, а говорю все погрязли в формулах и не думают.
Вот ты написал %0xСССC - отсюда следует, что v17 не может быть больше 0xCCCB
Это почему? Оно же word .
А я свою формулу проверил и в теории и на практике, прогнав на десятке образцов.
Могу и чужую теперь исправить... позжее. Вчера и так до часу не спал.



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

Создано: 26 августа 2011 18:29
· Личное сообщение · #7

tundra37 пишет:
Вот ты написал %0xСССC - отсюда следует, что v17 не может быть больше 0xCCCB
Это почему? Оно же word .

Про это хорошо написал Promix_17, при значениях >0xcccb начинаются повторы (т.е. коллизии) и разные v17 дают одинаковые v18, т.е. расшифровка неоднозначна Это всегда так бывает при работе по модулю !



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

Создано: 27 августа 2011 00:57
· Личное сообщение · #8

LazyCat Увы должен разочаровать. Для v17 в диапазоне 0..FFFF нет коллизий. И даже в диапазоне 0..3FFFB их очень мало - всего 0xF00 Все выкладки наверно портит начальное усечение до 32 бит, хотя на словах все вроде верно.



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

Создано: 27 августа 2011 01:32
· Личное сообщение · #9

tundra37 пишет:
Увы должен разочаровать. Для v17 в диапазоне 0..FFFF нет коллизий

Ндааа... Вот уж не думал, что до этого дойдет
(67108865 * 1) % 0x3FFFC = (67108865 * 0xCCCD) % 0x3FFFC
(67108865 * 2) % 0x3FFFC = (67108865 * 0xCCCE) % 0x3FFFC
и т.д.



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

Создано: 27 августа 2011 10:52 · Поправил: tundra37
· Личное сообщение · #10

LazyCat Я про это и говорю. Вы забыли про усечение до 32 бит
(67108865 * 0xCCCD) % 0x3FFFC != ((67108865 * 0xCCCD) % 2^32) % 0x3FFFC
((67108865 * 0xCCCD) % 2^32) % 0x3FFFC = 0x100СD !!!

Я понимаю, что программу тяжко писать, но есть калькулятор - в инженерном виде он до 16 байт держит.
Ну и олли можно запустить.

Ну и раз вы так любите формулы :

0x4000001*v17=v17+0x4000000*((v17-v17%0x40)+v17%0x40)
(v17-v17%0x40) =0x40*nnn поэтому при умножении на 0x4000000 по модулю 2^32 дает 0 !!!
Поэтому получаем мою формулу
(0x4000001*v17) % 2^32 = v17+0x4000000*(v17%0x40)
Теперь мы в пределах 32 бит и можно все брать по модулю 0x3FFFC
0x4000000 % 0x3FFFC = 0x400
((0x4000001*v17) % 2^32) % 0x3FFFC = v17+0x400*(v17%0x40)

Подчеркну, что формула возможно перестанет работать только когда в V17 будут старшие биты(26 и т.д)
Но по условию v17 всего 16 бит.



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

Создано: 27 августа 2011 13:20
· Личное сообщение · #11

tundra37
Вы абсолютно правы ! Я и не глянул на ассемлерный листинг, а только на формулу ТС А там действительно усечение до 32 бит. Так что Ваша формула правильная !!!



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

Создано: 30 августа 2011 09:37
· Личное сообщение · #12

решил не создавать новый топик, ибо задача очень похожая. ну не учили меня в институте такой математике
имеем crypted^3 mod key=Result
работаю с большими числами, по формуле РСА, но задача найти key если известен crypted и часть Result. другими словами. Как (и возможно ли это) выполняеца операция обратная mod. Тут писали про Расширенный Алгоритм Евклида, со ссылкой на РСА, пытался вникнуть ниче не получилось

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 30 августа 2011 10:36 · Поправил: Av0id
· Личное сообщение · #13

m - msg
c - cipher
d - prvkey
e,n - pubkey

c = m^e (mod n)
m = c^d (mod n)

result = crypted ^ 3 (mod n)
crypted = result ^ d (mon n)

n = (p-1)(q-1) - функция Эйлера
d можно найти зная p и q (которые являются простыми)

ps: расширенный алгоритм Евклида используют для нахождения НОД / GCD и обратного значения e по модулю n
d = e ^ (-1) mod n
d = 3 ^ (-1) mod n

ps. к примеру в miracl достаточно просто все это сделать
powmod(m,e,n,c) - encrypt msg
powmod(c,d,n,m) - decrypt msg
xgcd(e,n,e,e,e) - e = 1 / e mod n



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

Создано: 30 августа 2011 10:59
· Личное сообщение · #14

Av0id ушел курить этот материал, спасибо, к слову
Av0id пишет:
n = (p-1)(q-1) - функция Эйлера
d можно найти зная p и q (которые являются простыми)

Не факт. ибо эти числа на практике псевдо простые. ибо тест на простоту числа в 180 знаков это задачка еще та. читал както что разные проги при генерации этих простых чисел прогоняют их тестами быстрыми на делимость гдето до 1000 причем разные проги по разному. я это про то что опираца на абсолютную простоту числа нельзя

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 30 августа 2011 13:38
· Личное сообщение · #15

простыми в смысле, делятся на себя и на 1 (P, primes)



Ранг: 10.1 (новичок), 5thx
Активность: 0.010
Статус: Участник

Создано: 30 августа 2011 14:43 · Поправил: Runner
· Личное сообщение · #16

VodoleY пишет:
ибо тест на простоту числа в 180 знаков это задачка еще та. читал както что разные проги при генерации этих простых чисел прогоняют их тестами быстрыми на делимость


Неправ.

На данный момень максимально найденное простое число - 45-е простое число Мерсенна,
2^243,112,609-1 , это около 13 милионов знаков.


Не так сложно уж гарантированно проверить простоту 180 значного числа, все уже придумано(и реализовано в коде) до нас:
http://en.wikipedia.org/wiki/Primality_test




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

Создано: 30 августа 2011 21:52
· Личное сообщение · #17

Задача сводится к нахождению множества "баз простых чисел". "Базой простого числа"(назовите правильно - редко читаю литературу по теме...) я называю k1, для которого
m - k * 2^n = p - простое число. Любое множество "баз" однозначно отображается в
множество простых чисел с перестановками. Здесь Crypted^3 - (KnownResult + k1 * 2^k2) = a * (p - 1)(q - 1) = a * key, при этом в данном случае побитовое KnownResult & (k1 * 2^k2) = 0.
Возможно, множеств "баз" подойдёт и для этого случая. Предполагаю - для любого key множество "баз ключа" состоит из (int)sqrt(max(p, q)) элементов.
То есть, в любом случае функция определения ключа, если такая будет найдена, будет возвращать не единичный массив возможных значений, даже если полностью известен результат...

P.S. Не спрашивайте меня - это то, на чём я пока остановился 1.5 - 2 месяца назад и нет пока времени дальше продолжать...
Возможно и не верно...

-----
IZ.RU




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

Создано: 30 августа 2011 22:49 · Поправил: LazyCat
· Личное сообщение · #18

VodoleY пишет:
задача найти key если известен crypted и часть Result

Странная постановка задачи Обычно то что у Вас key является просто модулем, т.е. частью ключа в системе RSA и полностью известна. В Вашем случае при частичном знании Result задача вообще неразрешима ! Напротив, если известно несколько полных пар crypted:Result, то задача просто решается алгебраическими методами.



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

Создано: 31 августа 2011 11:32 · Поправил: VodoleY
· Личное сообщение · #19

LazyCat а на этом форуме вооще НЕ странных постановок мало. задачу решил. правда с другого бока. Люди, кто учился подскажите. Вроде такая аксиома есть
а^3 mod m=(a mod m)^3 mod m=((a mod m)*(a mod m)*(a mod m))mod m
если да, то как называеца это раздел.. матиматики чтоли и где можно почитать по этому поводу книжки, методички и т.д.

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 31 августа 2011 11:50 · Поправил: Av0id
· Личное сообщение · #20

eng
rus

| Сообщение посчитали полезным: VodoleY

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

Создано: 02 сентября 2011 10:06
· Личное сообщение · #21

называеца это раздел.. матиматики
Дискретная математика -> Теория чисел

То что ты написал, это не аксиома, а тождественные преобразования. Типа nop = xchg eax,eax

| Сообщение посчитали полезным: VodoleY
<< . 1 . 2 .
 eXeL@B —› Крэки, обсуждения —› Реверс алго
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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