tgoop.com/codeby_sec/9188
Last Update:
Инструмент, позволяющий уменьшить энтропию полезной нагрузки и зашифровать ее с помощью сериализованных связанных списков.
Алгоритм EntropyReducer определяется значениями BUFF_SIZE и NULL_BYTES
Инструмент проверяет, имеет ли входная необработанная полезная нагрузка размер, кратный BUFF_SIZE, и, если нет, дополняет её до нужного размера. Затем он берёт каждый фрагмент BUFF_SIZE из полезной нагрузки и создаёт для него узел связанного списка, используя функцию InitializePayloadList, которая инициализирует полезную нагрузку как связанный список. Созданный узел будет иметь пустой буфер размером NULL_BYTES, который будет использоваться для снижения энтропии. Затем он продолжает рандомизировать порядок каждого узла в связанном списке, нарушая исходный порядок полезной нагрузки. Этот шаг выполняется с помощью алгоритма сортировки слиянием, реализованного в функции MergeSort.
Сортированный связанный список находится в случайном порядке, потому что значение, в котором сортируется связанный список, представляет собой значение XOR первых трёх байтов необработанной полезной нагрузки. Это значение определяет его позицию в реорганизованном связанном списке. Поскольку сохранение связанного списка в файл невозможно из-за того, что он связан указателями, он проходит сериализацию с помощью Obfuscate.
Поскольку последним шагом в Obfuscation Algorithm была сериализация связанного списка, первое, что нужно сделать теперь, это десериализовать зашифрованную полезную нагрузку, создав на её основе связанный список. Этот шаг выполняется в функции Deobfuscate. Следующий шаг — сортировка связанного списка по идентификатору узла, которая выполняется с помощью того же алгоритма сортировки слиянием. Теперь связанный список находится в правильном порядке, чтобы восстановить исходные байты полезной нагрузки. Далее из него удаляются исходные байты полезной нагрузки из каждого узла и освобождаются выделенные узлы.
Использование
EntropyReducer считывает исходный файл полезной нагрузки из командной строки и записывает зашифрованную версию в тот же файл с префиксом «.ER». Размер конечной зашифрованной полезной нагрузки варьируется в зависимости от значений BUFF_SIZE и NULL_BYTES.
Инструмент можно включать в свои проекты, для этого необходимо добавить файлы EntropyReducer.c и EntropyReducer.h в проект и вызвать функцию Deobfuscate.