![]() |
eXeL@B —› Вопросы новичков —› Обратная операция для imul |
Посл.ответ | Сообщение |
|
Создано: 07 июля 2016 21:57 · Личное сообщение · #1 Всем привет. Анализирую крекми и столкнулся с неизвестностью. Что для моего уровня норма, только учусь. Hash = 7DCEE8D7 Code:
Code:
Понятное дело, imul знаковое умножение и обратная операция idiv. Но не взлетает. Перелопатил интернеты, но не нашел как представить обратную операцию. Подозреваю, что-то со сдвигами при знаковом делении, но я не осилил. Как найти делитель? Что почитать? ![]() |
|
Создано: 07 июля 2016 22:37 · Поправил: vden · Личное сообщение · #2 Почитать можно про idiv в мануалах интела. TMP_XP ← SRC1 ∗ SRC2 (* Signed multiplication; TMP_XP is a signed integer at twice the width of the SRC1 *) DEST ← TruncateToOperandSize(TMP_XP); т.е. из 64 бит произведения остаются младшие 32 бит (по размеру операнда), которые и равны 7DCEE8D7 Например, 0x14F7613F * 0x7A69 = 0xA067DCEE8D7 ![]() |
|
Создано: 07 июля 2016 23:43 · Поправил: dzirtt · Личное сообщение · #3 |
|
Создано: 07 июля 2016 23:48 · Личное сообщение · #4 Умножение в ассемблере и умножение в обычном понимании различаются. imul x, y, z это умножение y * z по модулю 2^32. Так что, очевидно, деление не всегда сможет найти сомножитель. В данном случае нужно воспользоваться методом решений сравнений первой степени. Так как нод(2^32, 0x7A69) = 1, то сравнение всегда имеет единственное решение равное 0xC72CB5D9 * x где 0xC72CB5D9 это обратное по умножению к 0x7A69 по модулю 2^32 (находится расширенным алгоритмом Евклида) Например, hash = 7DCEC813 7DCEC813 * C72CB5D9 = 1071B Начальным значением было 1071B Если что, вот тут можно почитать подробнее https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E ![]() |
|
Создано: 08 июля 2016 00:55 · Личное сообщение · #5 |
|
Создано: 08 июля 2016 02:01 · Поправил: dosprog · Личное сообщение · #6 |
|
Создано: 09 июля 2016 17:25 · Личное сообщение · #7 |
|
Создано: 09 июля 2016 17:52 · Личное сообщение · #8 |
|
Создано: 10 июля 2016 01:24 · Поправил: srm60171 · Личное сообщение · #9 dzirtt, сами инструкции процессора никакой серьезной математики за собой не имеют. Это в основном относительно примитивные операции. Мануала intel, предложенного выше, более чем достаточно. Так как разбор программ это все же изучение алгоритма, а не отдельных инструкции, то тут пригодится именно опыт программирования, как не странно. Лучше читать классику - Д. Кнута. (там и алгоритмы и математика) Потом можно посмотреть литературу по криптографии (базовая есть в Кнуте). Могу порекомендовать "Прикладная криптография" Брюса Шнайера. ![]() |
|
Создано: 10 июля 2016 16:24 · Личное сообщение · #10 |
![]() |
eXeL@B —› Вопросы новичков —› Обратная операция для imul |