
Packeur et crypter open source pour Windows x64 PE. Compresse et chiffre les exécutables avec une machine virtuelle personnalisée dans un stub auto-extractible.
TinyLoad est un crypter/packer PE pour les exécutables x64 : il empaquette un exe d'entrée avec différentes couches de protection pour empêcher son ingénierie inverse. C'est un fichier .cpp unique et il n'a aucune dépendance externe.
TinyLoad ajoute votre charge utile à une copie de lui-même. Lorsque l'exe empaqueté s'exécute, il extrait la charge utile, la déchiffre et l'exécute directement en mémoire sans jamais écrire l'original sur le disque. À chaque empaquetage, les opcodes de la VM sont modifiés aléatoirement et répartis dans 4 sous-tables à clés indépendantes, de sorte que deux builds ne sont jamais identiques.
récupérez un binaire précompilé depuis les releases ou compilez-le vous-même.
vous avez besoin de MinGW (g++). lancez simplement :
g++ -o TinyLoad.exe TinyLoad.cpp -static -O2 -s
ou utilisez build.bat.
TinyLoad.exe --i <input> [--o <output>] [--vm] [--c] [--veh]
vous avez besoin d'au moins 1 parmi --vm, --c ou --veh.
compression LZ77 personnalisée avec correspondance par chaîne de hachage et une fenêtre glissante de 64 Ko. La compression s'exécute d'abord, puis le chiffrement VM s'applique par-dessus afin que les motifs éventuels dans les données compressées soient également masqués.
machine virtuelle personnalisée de 28 opcodes qui s'exécute à l'intérieur du stub. Les opcodes sont placés aléatoirement dans 4 sous-tables de 8 chacun, et chaque sous-table est chiffrée par XOR avec une clé différente dérivée des données de la charge utile. Craquer 1 sous-table ne révèle au plus que 8 opcodes sur 28. Le chiffre lui-même est un chiffrement de flux 128 bits utilisant un mélange de clés rotl et rotr, exécuté entièrement dans l'interpréteur de la VM. La charge utile est chiffrée avec XXTEA.
avec --veh activé, toutes les pages des sections PE sont mappées en PAGE_NOACCESS. Lorsque le programme tente d'accéder à une page, cela déclenche une exception ; un gestionnaire d'exceptions vectorisé déchiffre uniquement cette page et définit la protection correcte. Un thread de surveillance s'exécute en arrière-plan et rechiffre toute page qui n'a pas été touchée depuis 200 ms. À tout moment, la majeure partie de votre programme reste chiffrée en mémoire, de sorte que les dumps mémoire ne capturent que ce qui a été récemment accédé.
les 4 API les plus critiques (GetModuleHandleA, GetProcAddress, ExitProcess, VirtualAlloc) sont redirigées via des fonctions wrapper à l'intérieur du stub. Une fois la charge utile chargée, tout le répertoire d'imports est mis à zéro afin que les dumps mémoire ne puissent pas reconstruire la table d'imports.
MIT
| option | rôle |
|---|
--i <file> | exe d'entrée à empaqueter |
--o <file> | chemin de sortie (par défaut : input_packed.exe) |
--vm | chiffrement VM |
--c | compression LZ77 |
--veh | déchiffrement des défauts de page VEH |
--noconsole | sous-système GUI |