То есть никто не заметил, что посаны массив iv[] - обнуляют, а на sec[] - забили ...
+ __u32 sec[MD5_MESSAGE_BYTES / sizeof(__u32)];
+ __be32 iv[MD5_DIGEST_WORDS] = { 0 };
... а меж тем после его заполнения ...
for (i = 0; i < MD5_DIGEST_WORDS; i++)
iv[i] = le32_to_cpu(iv[i]);
for (i = 0; i < MD5_MESSAGE_BYTES / sizeof(__le32); i++)
sec[i] = le32_to_cpu(((__le32 *)tp->stealth.secret)[i]);
... и работы функции
md5_transform(iv, sec);
Ну а это любимое занятие всех чайников (либо косящих под чайников) - добавить
свою супер-криптохрень после известных алгоритмов, и обязательно с XOR.
md5_transform() им мало, он верят в свою чистую карму и чувствуют что постигли Харикришну :)
isn = cpu_to_be32(iv[0]) ^ cpu_to_be32(iv[1]) ^
cpu_to_be32(iv[2]) ^ cpu_to_be32(iv[3]); if (tp->stealth.mode & TCP_STEALTH_MODE_INTEGRITY)
be32_isn_to_be16_ih(isn) =
cpu_to_be16(tp->stealth.integrity_hash);
return be32_to_cpu(isn);
}
массив sec[] остаётся в памяти, с некриптованным кодом tp->stealth.secret[]
...
Ну децкий сад - посаны упорно верят в XOR.
((__be16 *)iv)[6] ^= dport;
И эта, массив iv[MD5_DIGEST_WORDS] (см. выше) состоит из 4 элементов!!!
Где они 7-ой накопали???? Вроде от преобразования BIG-ENDIAN<->LITTLE-ENDIAN
размеры массива не изменяются :)
#define MD5_DIGEST_WORDS 4
http://lxr.free-electrons.com/source/include/linux/cryptohas...
---
Вся функция - иммитация бурной деятельности, тупа заменяется на:
u32 tcp_stealth_sequence_number(void) { return be32_to_cpu(get_random_int());
}
Какой-то троян от АНБ, ну в жопу...