7.2. “QR9”: ЛЮБИТЕЛЬСКАЯ КРИПТОСИСТЕМА ВДОХНОВЛЕННАЯ КУБИКОМ РУБИКА ГЛАВА 7. ЕЩЕ ПРИМЕРЫ
.text:00541265
.text:00541266
.text:00541267
.text:00541268
.text:0054126A
.text:0054126A loc_54126A:
push
push
push
xor
ebp
esi
edi
ebp, ebp
Этот фрагмент кода копирует часть входного буфера во внутренний буфер, который я поже назвал
“cube64”. Длина в регистре ECX. MOVSD означает скопировать 32-битное слово, так что, 16 32-битных слов
это как раз 64 байта.
.text:0054126A
.text:0054126E
.text:00541273
.text:00541275
.text:0054127A
.text:0054127C
.text:0054127D
Если EBP не больше чем длина во входном аргументе, тогда переходим к следующему блоку.
.text:005412A1
.text:005412A3
.text:005412A4
.text:005412A5
.text:005412A6
.text:005412A7
.text:005412A7 crypt
jl
pop
pop
pop
pop
retn
endp
short loc_54126A
edi
esi
ebp
ebx
Реконструированная функция crypt():
void crypt (BYTE *buf, int sz, char *pw)
{
int i=0;
do
{
memcpy (cube, buf+i, 8*8);
rotate_all (pw, 1);
memcpy (buf+i, cube, 8*8);
i+=64;
}
while (i=’a’ && c24)
q-=24;
int quotient=q/3;
int remainder=q % 3;
switch (remainder)
250
7.2. “QR9”: ЛЮБИТЕЛЬСКАЯ КРИПТОСИСТЕМА ВДОХНОВЛЕННАЯ КУБИКОМ РУБИКА ГЛАВА 7. ЕЩЕ ПРИМЕРЫ
{
case 0: for (int i=0; i
Последние комментарии
5 часов 7 минут назад
5 часов 15 минут назад
5 часов 25 минут назад
5 часов 30 минут назад
6 часов 59 минут назад
7 часов 2 минут назад