Продолжаю развлекаться с различными способами кодирования. Одна из распространенных антивирусных техник - анализ энтропии семпла, если она высокая, то это говорит о том, что контент сжат или зашифрован, после чего антивирус включает эмкляцию, и ждет пока вирус сам не покажет свое розовенькое беззащитное тельце. Тривиальный способ снизить энтропию - закодировать все в base-64, а алфавит перемешать, и она гарантированно снизится с 8 до 6 бит на символ. Скука.
Другая идея, которая давно уже бродила в злонамеренных вирмейкерских головах - сделать компрессию наоборот, разсжать, то что не сжималось. Если надрессировать модель на текст, то и результат будет похож на текст (в той степени как текст видит модель первого порядка). Никто так ничего и не сделал, наверное потому, что саму таблицу частот нужно где-то хранить, а если модель статична, то и результат будет одинаковым, а вирусы любят разнообразие. Значит нужно сгенерировать вектор с вероятностями, с заданной энтропией - \sum p_i * \log p_i
К счастью, в интернетах нашлись люди, которые заинтересовались бесноватой задачей и написали статью "Generating probabilities with a specified entropy", за что господам Свазеку и Вали большое спасибо. Они решают уравнение E = E + p * \log2 p + (1 - p) * (\log(1 - p))) / (1 - p) шаг за шагом, и полученные корни дают диапазон вероятностей. В конце полученные значения масштабируем, чтобы они суммировались в единицу. Используем получившийся симплекс, как таблицу частот для алгоритма Хаффмана, и готово. Чтобы декодировать, получившийся текст нужно сжать. Сама таблица частот (а ее еще можно перемешать) полностью случайна и никакой информации в себе не несет
Post #1725
21.2K

- 🤔 124
- 👍 57
- 🔥 28
- 🥱 3