Криптор

Crypto

Crypter derives a MasterPassKey from the MasterPass obtained at setup by using
the PBKDF2 key derivation algorithm (see below for the specification). It
then uses PBKDF2 to derive a number of encryption keys from the MasterPassKey
that can be used for the encryption of files. This method allows for the
generation of very secure encryption keys for data encryption. Moreover, by
publicly storing the credentials used to derive the MasterPassKey and the salts
used to derive the encryption keys, you are able to produce the encryption keys
at will and without needing to store them securely. Your MasterPass is the only
thing that you need to remember.

Crypter never directly encrypts anything with your MasterPass. Instead, it
derives a MasterPassKey from it, which it then uses to derive the
encryption key used to encrypt your file. Every time a file is decrypted,
the encryption key is re-derived from the MasterPassKey. Every time you set the
MasterPass through the setup or reset it through Verify MasterPass, the
MasterPassKey is derived from the MasterPass using a newly generated set of
(random) credentials. These credentials are used to re-derive the MasterPassKey
every time that Crypter is executed (i.e. the app is launched).

Authentication with the AES-256-GCM symmetric block cipher is used by default.
This ensures that data integrity is verified on decryption and allows the app
to detect tampering or data corruption.

The following are the crypto defaults and can be found under :

// Crypto defaults
{
  ITERATIONS: 50000, // file encryption key derivation iterations
  KEYLENGTH: 32, // encryption key length
  IVLENGTH: 12, // initialisation vector length
  ALGORITHM: 'aes-256-gcm', // encryption algorithm
  DIGEST: 'sha256', // digest function
  HASH_ALG: 'sha256', // hashing function
  MPK_ITERATIONS: 100000 // MasterPassKey derivation iterations
}

Encryption process

When encrypting a file, Crypter first creates a temporary hidden directory,
namely ‘.crypting’. It then encrypts the user-selected file with the crypto
defaults and flushes the encrypted data to a file in the directory, namely
‘data’. If it is a directory then it is compressed first (tar). It also writes
the public credentials to a file within the same directory, namely ‘creds’.
Finally, Crypter compresses the directory to a tar archive with the name of the
user-selected file and the ‘.crypto’ extension appended to it.

Decryption process

The decryption process is essentially the inverse of the encryption process.
During decryption, Crypter creates a temporary hidden directory named
‘.decrypting’. It then reads the credentials from the creds file and decrypts
the data file into the original file or directory (after decompressing it) with
its original name and extension, as deduced from the CRYPTO file name (e.g. the
extension for «file.txt.crypto» would be «.txt»).

Public credentials

Certain credentials are required to decrypt the encrypted data. These are
needed to reconstruct the particular encryption key and to verify data integrity.
These can be stored publicly without compromising security since it is fairly
impossible (by current standards) to reconstruct the encryption key without the
MasterPass and its credentials. These credentials are stored in the creds file of
the archive (as delineated above) in the following
format:

v2

Uses JSON

{
  "type": "CRYPTO",
  "iv": "...",
  "authTag": "...",
  "salt": "...",
  "isDir": true || false
}

The part is only included for directories

Development

Crypter is developed in the «dev» branch, which may be unstable at times.
This branch should typically be used for pull requests.

The «master» branch will always be kept stable.

Configurations

All major configurations that you can apply are found under .
This includes changes to certain cryptography settings. Please be advised
that altering these may break functionality and
.

Test

Crypter primarily uses mocha and chai for testing. Since the project uses a
lot of JS ES6 syntax, babel is also used as a transpiler. To run all the tests,
execute:

Crypter uses istanbul for coverage. To run test coverage, execute:

Build

Crypter’s binaries (available under releases) have been built using
Electron. Since Crypter uses electron-builder to build binaries,
you must install it globally:

To build the app for macOS, run:

To build the app for Linux, run:

To build the app for Windows x84 and/or x64, run:

Lost in Time, или Dr. Web, не считающий время

Представь ситуацию: мы располагаем тысячей программ, каждая из которых использует 15-секундный таймер. Суммарное время задержки выполнения кода составит, что несложно подсчитать, 15000 секунд, или около четырех часов. Таким образом, если антивирусный алгоритм в своей работе по-настоящему эмулирует таймер, анализ тысячи подобных файлов займет у него вышеуказанное время. Конечно, реальная эмуляция таймеров – нонсенс, и многие алгоритмы просто-напросто нужным образом изменяют регистры или стек контекста процесса, если встречают одну из API-функций, выполняющих задержку выполнения программы. Но все ли антивирусы настолько хороши? Проверим на практике.

Попробуем использовать таймер в своих целях, чтобы сравнять с землей эмуляцию кода. Итак, наш план – использовать два замера времени, в промежутке между которыми будет «тикать» таймер. Впоследствии мы используем два временных штампа, чтобы вычислить разность между ними. Разность эта в дальнейшем будет нами использоваться для того, чтобы изменить логику работы защитного механизма.

Для того, чтобы засечь время, используем API-функцию GetLocalTime, которая записывает по указанному в стеке адресу следующую 16-байтную структуру:

Условимся, что для хранения двух структур, полученных в результате пары вызовов GetLocalTime, будем использовать области памяти, начинающиеся, соответственно, с адресов 13147D7D и 13147D94. Функция Sleep(), входящая в Kernel32, инициирует «заморозку» выполнения программы, принимая параметр, выраженный в миллисекундах, через стек. Используя эти условия, напишем следующий код:

В результате выполнения получаем две 16-байтных заполненных структуры, каждая из которых записана, начиная с адреса, определенного нами выше:

Обрати внимание: нас интересуют только значения, соответствующие секундам. Мы заставили программу «спать» ровно 1 секунду, а это значит, что разница между двойными словами, записанными в ячейках и , не должна быть больше или меньше единицы (в абсолютном большинстве случаев)

Этот факт должен помочь нам побороть эмуляторы кода, пропускающие таймеры. Но как использовать полученное значение? Мы посчитаем разницу и используем ее для вычисления адреса перехода. Если эта разница будет посчитана неверно (что означает, что код эмулируется, причем неверно), то выполнение программы полетит ко всем чертям, но это нас не волнует :). Итак, получим приблизительно следующий код:

Наверное, ты уже догадался, что адрес, который помещается в EBX, должен быть равен 13147C30. Однако, как показывает практика, не все идеально, особенно если речь идет об эмуляции кода. Благодаря несложным манипуляциям мы получаем великолепный результат: эмуляция Dr. Web разваливается на глазах! :). Вместе с ним отступают и еще два антивиря – это не может не радовать нашу душу. Всего 22 из 43 антивирусов продолжают подозревать нашу программу в чем-то нехорошем.

Выпуск 5. Завершающий

Если собрать кусочки кода вместе, то будет у нас всего 50 строк. Всего лишь 50 — и криптор готов! А теперь прикинь, сколько строк содержала бы программа на С? Конечно, это еще далеко не готовый продукт, над ним нужно работать и работать. Чтобы довести систему до реального криптора, нужно добавить как минимум шифрование ресурсов и импорта, а также антиэмуляцию. О том как теоретически эти проблемы решить, смотри во врезках. Удачи!

Желательный функционал 1. Обход песочниц

В крипторе нужно делать проверки на запуск в виртуальной машине, SandBox’е или анализаторе типа анубиса. Чтобы их зедетектить, нужно провести небольшое исследование и написать программу, которая будет на экран выводить разные внутренние параметры системы, а дальше — проверить этот файл на том же анубисе и в скриншоте посмотреть параметры, которые показала наша прога. Дальше все просто — при запуске на системе с подобными параметрами — просто уходим в цикл.

Обязательный функционал 2. Шифрование ресурсов и импорта

Для шифрования ресурсов мы должны пройтись по секции ресурсов и сохранить оттуда важные для запуска файла — иконки и манифест. Дальше создаем новые ресурсы с важными ресурсами, а остальное шифруем. После запуска криптора восстанавливаем все обратно.

Несколько сложнее получается с импортом, ведь его также нужно сначала зашифровать, потом сгенерировать липовый импорт, но после восстановления импорт еще нужно вручную проинициализировать, то есть — загрузить DLL’ки и сохранить в таблицу импорта реальные указатели на функции.

Обязательный функционал 1. АнтиЭмуляция

Кроме избавления от внешних сигнатур, очень важно, чтобы антивирус в своем эмуляторе не добрался до исходного файла. Для этого нужна антиэмуляция

Раньше были очень популярны приемы, основанные на предположении, что эмулятор не понимает все инструкции процессора. Сейчас же ситуация изменилась, и самые эффективные приемы основаны на использовании Windows API. Согласись, что антивирус вряд ли сможет эмулировать все API.

Вот тебе такая идейка для реализации:

  • создаем Windows-приложение и один дополнительный поток;
  • после создания потока он должен послать через API сообщение основному потоку с каким-то ключом;
  • в главной программе проверяем, и если ключ правильный — передаем управление на код расшифровки основного файла;
  • если код неправильный, то просто ничего не делаем и находимся в вечном цикле получения сообщений от Windows.

PS:Никогда не останавливай программу с ошибкой, это лишь прибавит криптору лишний вес. Вечный цикл получения сообщений от Windows — лучший способ.

Security

Security-first practice

Crypter follows a security-first practice. This means that security is its
highest priority and first consideration. Thus, while Crypter seeks
to make encryption more convenient, it always defers to maintaining
a high level of security.

MasterPass

Crypter never stores your MasterPass in memory or on the filesystem. This
substantially improves the security of your MasterPass. You are only asked to
enter the MasterPass when you first set, reset or verify it. Whenever you enter
your MasterPass, Crypter derives a MasterPassKey (using a set of generated
credentials) and then immediately discards the MasterPass. The MasterPassKey is
then securely stored in memory and used to derive the encryption keys. Since
these credentials are derived via a one-way function, they cannot be used in
any way to derive the MasterPass.

MasterPassKey

Crypter uses a WeakMap to store the MasterPassKey inside the MasterPassKey class
using a closure function. This makes the MasterPassKey data held in the object
(externally) inaccessible, consequently increasing the protection of the
MasterPassKey. The MasterPassKey is never flushed to the filesystem and is always
stored in (main) memory. Since JS does not give control over or allow such a
low-level operation as wiping memory, the program relies on the garbage
collection and volatility of the main memory for the permanent erasure of the
MasterPassKey stored in memory.

Crypter generates a new set of random credentials for deriving the MasterPassKey
every time the MasterPass is set (at setup) or reset. Crypter employs randomness
to mitigate brute-force attacks and thus drastically improve security.

Последние штрихи

Когда я писал статью, я заметил, что в веб-интерфейс пинча стали приходить странные однообразные отчеты. Сначала мне показалось, что эти отчеты присланы с виртуальной машины, созданной мной, но потом понял, что это не так: все они были созданы на машинах с различной конфигурацией. В конце концов я понял, что это – результат запусков на машинах экспертов, которые пользуются virustotal’ом для анализа новых угроз. Мои опасения подтвердились, когда я увидел, что количество антивирусов, распознавших в зашифрованном мной файле угрозу, увеличилось, хотя и ненамного. Тогда я решил «обернуть» вокруг защиты, созданной мной, еще один «слой»-пакер, запускаемый из TLS. Для чего? Это позволит усложнить жизнь механизмам, использующим сигнатуры. Кроме того, на месте TLS-функции может быть любой алгоритм, кодирующий произвольный участок файла, что позволяет малыми усилиями полностью изменить содержание файла, скрыв «узнаваемые» места. Мало того, использование callback-функций само по себе является достаточно неплохим средством усложнения защитного механизма.

Думаю, что ты читал о TLS (Thread Local Storage)-callback-функциях достаточно (в частности, Крис посвятил TLS отдельную статью, опубликованную в одном из номеров нашего журнала), однако напомню о том, что они собой представляют, опуская описание широчайших возможностей их использования. Callback-функции выполняются непосредственно после инициализации программы загрузчиком, еще до остановки на OEP. Информация обо всех таких функциях содержится в специальной таблице, а адрес таблицы, в свою очередь, извлекается загрузчиком из специального поля PE-заголовка.

Попробуем создать таблицу TLS-функций для нашей программы (к написанию кода callback-функции приступим чуть позже). Структура ее, имеющая размер шестнадцати байт, проста. Первые два двойных слова используются для записи адресов начала и конца выделяемой для потока области данных. В качестве этих значений мы выберем два произвольных адреса (13147d80 и 13147d90), лежащих в пределах области выравнивания секции .text, оставленной компилятором. Оставшиеся два DWORD’а – это, соответственно, поле для записи индекса, возвращаемого callback-функцией (13147d96), и адрес таблицы callback-функций (13147da0).

Так выглядит код получившейся TLS-таблицы: 80 7d 14 13 90 7d 14 13 96 7d 14 13 a0 7d 14 13. Разместим его по адресу 13147d5d при помощи отладчика (запомним адрес – он нам еще понадобится).

Приступим к созданию кода таблицы TLS-функций.

Переходим к адресу 13147da0, выделяем 6 байт, выбираем из контекстного меню команду «Binary -> Edit». Вводим значение «13 14 7d b0 00 00». Первые 4 байта указывают на адрес callback-функции. Последние два нулевых байта указывают на окончание таблицы callback-функций.

По адресу 13147db0 разместим саму функцию, шифрующую все наши ранее созданные крипторы, а также код по второму кругу:

Полагаю, ты помнишь, что после внесения кода в файл необходимо выполнить его, чтобы он закодировал инструкции, после чего следует сохранить измененный файл прямо из-под OllyDbg.

Последний штрих – внесение сведений о TLS-директории в PE-заголовок. Открываем LordPE и правим в таблице директорий значение TLS Address на 00005d7d (разумеется, это же можно сделать и средствами OllyDbg). Кстати, если ты хочешь отлаживать TLS, чтобы не «пролетать» мимо выполнения callback-функций, нажми в OllyDbg Alt+O и в появившемся меню выбора места, где отладчик будет останавливаться при загрузке программы, укажи «System Breakpoint» (цель этого действия ясна, ведь TLS callback’и выполняются еще до попадания на точку входа!).

Проверим закодированный файл на virustotal.com. Нас ждет радостное известие – всего лишь 18 из 43 антивирусов распознают вредоносный код! Итак, на момент тестирования «сдались» такие маститые охотники за червями и малварью, как DrWeb, Panda, NOD32, TrendMicro-HouseCall, VBA32, ViRobot, VirusBuster, Sunbelt 7048, F-Secure, BitDefender, eSafe и многие другие.

История

Сезон 3: Перезагрузка

Криптора сперва создаёт П.И.В.В.Ж., а после он командует Армией Ниндроидов при Монастыре Гармадона, но Ниндзя и Ллойд сбегают.

Проклятие Золотого Мастера

Криптор и Армия Ниндроидов нападают на Серпентинов, но Криптор и некоторые из Ниндроидов ещё сбегают, проиграв Ниндзя и Серпентинам.

Он, Техно Ву и Пайтор Пи Чамсворт нападают на Башню Борга, чтобы сражаться с союзниками Ниндзя и остановить самих Ниндзя, погружённых в Дидживёрс. Но, он всё же проигрывает Ние, которая выкидывает его в окно, но дроид выживает.

Пустота

Криптор вступает в космический бой между Ниндроидами и Ниндзя на Комете Дельта Икс. Вскоре Криптор и его Ниндроиды перехватывают Золотое Оружие и отправляются в Ниндзяго, а Ниндзя остаются там, на комете. Оверлорд возвращается и Ниндроиды на время побеждают.

Криптор, Армия Ниндроидов и все приспешники нового Золотого Мастера Оверлорда вступают в решающую финальную схватку. Криптор борется с Нией, и выигрывает, но в итоге великой битвы белый Ниндзя и Мастер Льда Зейн жертвует собой, а Криптор, Оверлорд почти со всеми остальными дроидами погибают.

В День Ушедших, Янг говорит, что пока Лунное Затмение не закончится, они могут отомстить Ниндзя. Криптор берёт на себя Зейна. Зейн сражался как мог, но понял, что не сможет его одолеть и сказал, что отступает. Криптор хотел уничтожить Зейна, но это была ловушка, и Зейн побеждает Криптора.

Installation

Requirements

RNCryptor 5 is written in Swift 3 and does not bridge to Objective-C (it includes features that are not available). If you want an ObjC implementation, see RNCryptor-objc. That version can be accessed from Swift, or both versions can coexist in the same project.

The Bridging Header

CommonCrypto is not a modular header (and Apple has suggested it may never be). This makes it very challenging to import into Swift. To work around this, the necessary header files have been copied into , which needs to be bridged into Swift. You can do this either by using RNCryptor as a framework, adding to your existing bridging header, or making your bridging header in Build Settings, «Objective-C Bridging Header.»

Installing Manually

The easiest way to use RNCryptor is by making it part of your project, without a framework. RNCryptor is just one swift file and one bridging header, and you can skip all the complexity of managing frameworks this way. It also makes version control very simple if you use submodules, or checkin specific versions of RNCryptor to your repository.

This process works for most targets: iOS and OS X GUI apps, Swift frameworks, and OS X commandline apps. It is not safe for ObjC frameworks or frameworks that may be imported into ObjC, since it would cause duplicate symbols if some other framework includes RNCryptor.

  • Drag and link and into your project
  • If you already have a bridging header file, add (or the path to which you copied ).
  • If you don’t have a bridging header:
    • Swift project: In your target’s Build Settings, set «Objective-C Bridging Header» to your path for . (Or create a bridiging header and follow instructions above.)
    • ObjC project: Xcode will ask if you want to create a bridging header. Allow it to, and add to the header (or the path to which you copied )
  • To access RNCryptor from Swift, you don’t need to import anything. It’s just part of your module.
  • To access RNCryptor from ObjC, import your Swift header (modulename-Swift.h). For example: .

Built this way, you don’t need to (and can’t) into your code. RNCryptor will be part of your module.

Carthage

This approach will not work for OS X commandline apps. Don’t forget to embed .

Built this way, you should add to your ObjC or to your Swift code.

This approach will not work for OS X commandline apps.

This approach will not work for OS X commandline apps.

Built this way, you should add to your Swift code.

Выпуск 4. Практический криптор

Ну наконец-то мы добрались до сердца нашей статьи. Для работы криптора нам понадобится модуль pefile (будем использовать несколько модифицированную версию), и с помощью либы откроем Putty:

Теперь, если ты напишешь «print pe», то увидишь подробную инфу обо всех характеристиках файла, по этой инфе я советую искать нужные для изменения поля в файле. А о внутренней работе модуля обязательно прочитай во врезке. Теперь немного математики. У нас будут две программы, которые нужно внедрить в файл. Они будут занимать где-то по 512 байт каждая максимум. Поэтому для размещения добавим новую секцию в 1024 килобайт вызовом:

Закриптуем первую секцию XOR’ом с ключом «1»:

Магия, правда? :). А теперь прикинь, что все это пришлось бы писать на С++!

Поскольку в начале программы будет наш код, то сохраним оригинальный код, скопировав его в последнюю секцию. Адрес первой секции в файле находится в переменной — pe.sections. PointerToRawData, а последней, соответственно — в pe.sections.PointerToRawData:

Оригинальный код сохранен, и мы приступим к написанию первой программы. Конечно же, писать мы ее будем на ассемблере, используя FASM для компиляции. Создадим файлик pack.tpl.asm с содержанием:

Ты, наверное, уже догадался, что это не готовый исходник, это лишь шаблон для шаблонизатора из TornadoWeb, а его мы уже отлично знаем, ведь именно его мы использовали при написании HTML-морфера. Сгенерируем первую программу:

В переменной go мы передаем адрес в памяти, где будет наша вторая программа — то есть, в последней секции, начиная с 512 байта. А в последней строчке компилим результат на FASM’е. Теперь запишем получившийся код в начало первой секции:

Вторую программу запишем в файл copy.tpl.asm. Размер у нее более внушительный, поэтому полный код смотри на диске. Там содержится два цикла, один скопирует 512 байт оригинальной программы с последней секции в первую, а второй цикл расшифрует всю первую секцию. После этого передается управление на оригинальную программу.

При компиляции темплейта нужно передать туда параметры для циклов копирования и расшифровки:

Остался маленький штришок — записать вторую прогу в файл и сделать первую секцию записываемой, чтобы расшифровщик не выдавал ошибок, а также установить точку входа на начало первой секции:

Описание с Lego.com

Генерал Криптор – робот, возглавляющий армию Ниндроидов, и верный слуга Цифрового Оверлорда. В отличие от обычно молчаливых Ниндроидов, Криптор постоянно болтает. Ему нравится дразнить и оскорблять врагов во время боя, а еще говорят, что он любит критиковать даже собственные войска (утверждая, что они крадутся тихо, как стадо слонов, или то,что все Ниндроиды и мизинца его не стоят). Эмоциональные настройки Криптора также более тонкие, чем у других Ниндроидов, а его вспыльчивость можно использовать против него. Криптор не считает ниндзя достойными соперниками своей армии. И это ошибка, которая может обернуться против него и Цифрового Оверлорда.

Генерал Криптор командовал армией ниндроидов. Он был первым созданным ниндроидом, который стал улучшенной версией Зейна с более совершенными программами и сложным оружием. В отличие от других ниндроидов, Криптор — сильная личность. Это очень высокомерный крикливый тип, который серьёзно недооценивает силы ниндзя. Он летел на комету за золотым оружием. Криптор был уничтожен когда Зейн уничтожил Оверлорда. В День Ушедших он отправился к Зейну за местью.

FAQs

1. Why did you create this?

Crypter was created for two reasons:

  • As an experiment and Proof-of-Concept (PoC)
  • For use in Red vs. Blue training environments

Traditionally, malware is written in compiled languages like C and C++. As a security researches and Python developer, I set out to determine the extent to which interpretted languages could be used for the creation of malware. At the same time I was working for a security reseller who offered Red vs. Blue training to large enterprises. The training environment made use of live malware samples which were realistic, but unreliable and volatile. After completing the initial PoC, I continued working on Crypter for this organisation to provide a customisable Ransomware sample for use use in this environment.

2. Why make it publically available?

Crypter was made publically available to enable security researchers and enthusiasts to gain a better understanding of Ransomware. While there are plenty of guides and videos on the topic, they usually don’t provide the understanding that can be gained by experiencing something first hand.

3. But couldn’t it be used by criminals for malicious purposes?!

While Crypter can be used to simulate a real Ransomware attack, steps have been taken to allow users to reverse any damage, and to prevent use by criminals in the wild. Ransomware is only useful to a criminal if they have the ability to decrypt the user’s files and the user does not. Traditionally this is done by sending the encryption key to a remote Command & Control (CnC) server controlled by an attack once the user’s files have been encrypted. The victim then pays a ransom fee to retrieve access to the key that will decrypt their files.

With Crypter however, there is no inbuilt CnC capability. Once the user’s files have been encrypted, the decryption key is written to key.txt in the same directory as the ransomware executable. The user can then use this key to decrypt their files.

4. Could it not be adapted for malicious use?

It is certainly possible to further develop Crypter and implement the missing CnC capabilities. However, this requires expertise and knowledge in programming as well as malware tactics and techniques. Anyone motivated and knowledgeable enough to add these components would most likely create a piece of Ransomware from scratch, and not make use of an existing, open source and publically available package as the basis for their attacks.

5. Can you add a feature for me?

Alternatively, if there is a feature that you think could be cool or useful, then feel free to create an issue with some information on what you’re looking for and why. I’m usually quite busy with other projects, but if I think it’s worthwhile and I can find the time, I may see if it’s something that I can implement.

Members[edit | edit source]

Crypter IntendedServantClass Background Lost Belt Time
Kirschtaria Wodime

Lancer (Caeneus)

Clock Tower Astronomy Faculty Lost Belt No. 5

The Day God Is Shot Down
Ancient Titans’ Ocean Atlantis

12000 BC
Ophelia Phamrsolone

Saber (Sigurd/Surtr)

Clock Tower Spiritual Evocation Faculty Lost Belt No. 2

Gentleman of the Unfading Flame
Eternal Ice-Flame Century Götterdämmerung

1000 BC
Kadoc Zemlupus

Caster (Anastasia)

N/A Lost Belt No. 1

Princess of the Land of Beasts
Permafrost Empire Anastasia

1570 AD
Scandinavia Peperoncino

Archer (Ashwatthama)

Freelancer Lost Belt No. 4

The Black Final God
Genesis Destruction Cycle Yuga Kshetra

11900 ??
Hinako Akuta

Rider (None)Summoned Saber(Prince of Lanling)

Clock Tower Botany FacultyChaldea Security Organization (technician) Lost Belt No. 3

Crimson Beauty Under the Moon
Synchronized Intellect Nation S I N

0210 BC
Beryl Gut

Assassin

Unknown Lost Belt No. 6

The Day the Star is Born
Round Table Territory ■■■■■■■■■

0500 AD
Daybit Sem Void

Berserker (Unknown)Contracted with unknown Grand Servant

Clock Tower Anthropology Faculty Lost Belt No. 7

■■■■■■■■
■■Forest ■■■■■■■■■■

???? BC

Apostles of the Alien Godedit | edit source

The three Apostles of the Alien God are three Alter Ego Servants working under the Alien God’s guidance. They work with the Crypters where necessary, but they do not directly obey them. Their intended purpose is to oversee the Fantasy Tree’s growth and report the Crypters’ actions to the Alien God. Tamamo Vitch works alongside them as an independent party.

  • Ashiya Dōman, summoned for the surveillance of the Lostbelt Kings.
  • Rasputin, summoned for the surveillance of Crypters.
  • Senji Muramasa, summoned to ensure the advent of the Alien God.

Key Rotation

Cryptor is designed to support key rotation, allowing new ciphertexts to be
produced under an «active» key, but with old keys configured so older
ciphertexts can still be decrypted (and also rotated to the new key).

To rotate keys, first make a new key, but configure Cryptor with the old key
too using the «keyring» option:

old_key = ...
new_key = Cryptor::SymmetricEncryption.random_key(:xsalsa20poly1305)
cryptor = Cryptor::SymmetricEncryption.new(new_key, keyring: old_key)

Cryptor can support arbitrarily many old keys on its keyring. Any messages
which have been encrypted under the old keys can still be decrypted, but
newly encrypted messages will always use the new «active» key.

To rotate messages from one key to another, use the method:

old_message = ...
new_message = cryptor.rotate(old_message)

This is useful if a key is ever compromised, and also good security hygene
in general.

Cryptor also supports the method, which works just like ,
but raises if asked to rotate a message that’s
already up-to-date.

Выпуск 1. Ознакомительный

Ты уже знаешь, что я считаю антивирусы абсолютно бесполезными — хотя бы по той причине, что они помогают только от самых примитивных зверьков, которые в условиях современного денежного малварьбизнеса встречаются не так часто. Современные злокодеры, подогретые денежными вливаниями, научились программировать довольно жестко, но есть у них одна маленькая проблема — криптовка — достаточно сложная штука, для написания которой нужны глубокие знания PE-формата, ассемблера и системного программирования. Из-за высокого «входного барьера» в этой области мало профессионалов.

И найти хорошего криптора ой как сложно.

Но решение проблемы есть! Как мы знаем, антивирусные компании обмениваются технической информацией и создают специальные ресурсы, посредством которых мы сами отсылаем им сэмплы (типа VirusTotal’а). Но ведь и вирмейкеры тоже могут обмениваться информацией! Необязательно палить приватные мазы — публичные технологии тоже сгодятся. Например, было бы круто, если бы в каком-то одном месте лежали функции для генерации PE-файла, генерации импорта, шифрования ресурсов, рабочие функции определения SandBox’ов, тогда мы могли бы создавать крипторы так же непринужденно, как домики из кубиков Лего.

Идеальным местом для обмена, наверное, будет GitHub, и туда я залью исходники написанного нами сегодня криптора — он будет доступен по адресу http://github.com/presidentua/ExePacker.

Кроме того, в решении проблемы здорово помогло бы использование высокоуровневых языков программирования. В паблике сейчас валяются исходники крипторов на С++ или VisualBasic’е, но ведь от этого проще не становится, поскольку разобраться в написанном коде — ой как непросто. На Python’е все выглядит в разы лучше, поэтому именно его мы сегодня и будем использовать. В общем, заложим фундамент этой благородной миссии. Присоединяйся!

License

The MIT License (MIT)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the «Software»), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished todo so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED «AS IS», WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий