Реферат: Арифметика на службе защиты

add al,30h

stosb ; Формирует как раз "594971900000..."

pop cx

loop ...

Честно говоря, я выдрал ее ;) Я выдрал ее из экзешника, выдрал и отладил, научился подавать на вход по 8-мь байт в ds:si и получать вот такие вот "числа". Вот какие данные получает эта процедура, и вот что она выдает всякий раз, когда рассчитывает пароль (всего ~32 раза):

ds:si -> 0,0,0, 0,86,58,31,41 result="1136774000..."

ds:si -> 0,0,0,80,DF,67,40,41 result="2150335000..."

ds:si -> 0,0,0,80,9F,45,4D,41 result="3836735000..."

...

ds:si -> 0,0,0,C0,41,55,52,41 result="4805895000..."

ds:si -> 0,0,0,C0,45,B2,56,41 result="5949719000..."

Я думал, что нашел ключевой код, который итерациями формирует пароль! Когда имеешь дело с криптографией, привыкаешь, что сдвиги да and-ы в огромных количествах просто так не встречаются. Первое число как-то получается из INN и Код'а - слепляется по-хитрому или что-то вроде того, думал я.

Ищу уже ссылки на парметр, передаваемый этой процедуре (в ds:si). Искал сначала внимательно, потом не очень, потом просто тупо переписывал адреса буферов (опять очень много копирований). Но все же я не прошел мимо вот этих двух процедур:

fld real8 ptr [bp+6]

fmul real8 ptr [bp+0E]

fstp real8 ptr ds:[...]

и:

fld real8 ptr [bp+6]

fadd real8 ptr [bp+0E]

fstp real8 ptr ds:[...]

Причем эти процедуры вызываются кратное число раз коду, формирующему эти длинные числа. Уже теплее. Смотрю, что делают эти парни. И вижу, что при очередном вызове, после fadd, сопроцессор выгружает те самые входные байты, которые подаются на вход процедуре создания длинных чисел... Это была просто процедура форматирования real-чисел!

Мда... Вот что значит быть избалованным сопроцессором. Если бы не эта прога, то так бы и не узнал, как выглядят числа в формате с плавающей точкой.

Теперь уже внимательнее смотрю, что же мы там умножаем и делим. Оказывается, циклически вызывается по два умножения, затем - сложение. А вот что умножается и складывается:

Шаг

1. 1x1 = 1 1x2401 = 2401 1+2401 = 2402

2. 2x2 = 4 4x2500 = 10000 2402+10000 = 12402

3. 3x3 = 9 9x2601 = 23409 23409+15986 = 35811

4. 4x4 = 16 16x2704 = 43264 43264+35811 = 79075

...

К-во Просмотров: 1893
Бесплатно скачать Реферат: Арифметика на службе защиты