Snowcrypt stands on the shoulders of giants.
Many tools for decrypting Audible files already exist. FFMPEG of course can handle it. Several options (open- and closed-source) are just a frontend for FFMPEG.
A couple have even written indepentant implementations, such as Mbucari in C# as AAXClean. These were an invaluable asset while creating snowcrypt.
The original code base and algorithm for snowcrypt was written in Java and ported to Python by github user BlindWanderer. They posted it in response to this issue.
snowcrypt a pure Python decryption of Audible's .aax and .aaxc file format. snowcrypt can only decrypt files for which you have a valid license.
In a word: simplicity. FFMPEG is a wonderful tool from great developers. Unfortunately, it's also somewhat fragmented in it's version install base, so often the first instruction is "make sure you have X.X version installed." With snowcrypt, you don't have to worry about any of that. If you can install Python (which is MUCH easier), you can install and use snowcrypt.
Note: If you're looking for speed, FFMPEG is the better option. Overall, snowcrypt is between half and a third as fast as FFMPEG.
Install through pip
pip install snowcrypt
Install from source
git clone https://github.com/snowskeleton/snowcrypt.git
cd snowcrypt
pip install -U .
You can run snowcrypt without installing,
by calling the pyi_entrypoint.py
file with python.
Useful for development.
git clone https://github.com/snowskeleton/snowcrypt.git
cd snowcrypt
python pyi_entrypoint.py <arguments>
snowcrypt expects that .aaxc
files will be accompanied by a matching .voucher
file.
This happens automatically when downloading through audible-cli.
snowcrypt audioFile.aaxc
Audible's older file format .aax
uses a slightly different method of encryption. To decrypt it, you'll need the activation bytes unique to your account.
You can obtain this value with mkb79's audible-cli tool.
snowcrypt audioFile.aax -b <activationBytes>
from snowcrypt import snowcrypt
key, iv = snowcrypt.deriveKeyIV('input_file.aax', 'activation_bytes')
snowcrypt.decrypt_aaxc(
'input_file.aax',
'output_file.m4a',
key,
iv)