Pourquoi migrer ?

PyArmor 7 est toujours fonctionnel mais présente plusieurs limitations pour un usage professionnel en 2026 : pas d'anti-debug, fingerprint hardware basique (2-3 sources), pas de support Linux ELF, serveur de licences obligatoire hors des possibilités offline-first, et des projets de déobfuscation open-source ciblant spécifiquement PyArmor 7.

IronLock v2 comble ces lacunes avec 8 sources de fingerprint, 12 checks anti-debug, support Python/EXE/ELF/ZIP et un mode offline-first natif. La migration est progressive et réversible.

Une migration réussie est une migration qui ne rompt pas les licences existantes. La période de double distribution (PyArmor + IronLock) est obligatoire pour les clients qui ne peuvent pas mettre à jour immédiatement.

Mapping fonctionnel PyArmor → IronLock

PyArmor 7IronLock v2
pyarmor obfuscate app.pyironlock encrypt app.py
pyarmor licensesironlock license
pytransform/ (runtime)loader.py + app.ironenc
Clé de licence PyArmorFichier .lic signé ECDSA
Restrictions matérielles basiquesFingerprint 8 sources + tolérance
Pas d'anti-debug12 checks anti-debug
Python uniquementPython + EXE + ELF + ZIP

Adapter le build

# Avant (PyArmor 7)
pyarmor obfuscate --recursive --output dist/ src/app.py
pyarmor pack -e "--onefile" dist/app.py

# Après (IronLock v2)
# Étape 1 : générer les clés (une seule fois)
ironlock keygen --algo ecdsa-p384 --output keys/

# Étape 2 : chiffrer
ironlock encrypt src/app.py   --pubkey keys/public.pem   --antidebug-level high   --output dist/protected/

# Étape 3 : packager
pyinstaller dist/protected/loader.py --onefile --name app_v2

Remplacer le runtime

PyArmor nécessite le dossier pytransform/ à côté du script obfusqué. IronLock remplace ce dossier par loader.exe + app.ironenc. Pour les clients qui utilisaient import pytransform dans leurs scripts, un stub de compatibilité est disponible :

# stub de compatibilité pytransform (à inclure pendant la transition)
# pytransform_compat/__init__.py

import warnings
warnings.warn(
    "pytransform est déprécié. Migrez vers IronLock v2.",
    DeprecationWarning, stacklevel=2
)

# Re-exporter les symboles utilisés
def get_license_info():
    # Relire depuis le .lic IronLock
    from ironlock import current_licence
    return {'expired': current_licence().is_expired()}

Migrer les licences existantes

# Script de migration des licences PyArmor → IronLock
import csv

# Lire la base clients PyArmor
with open('clients_pyarmor.csv') as f:
    clients = list(csv.DictReader(f))

for client in clients:
    # Demander au client son nouveau fingerprint IronLock
    # (email automatique avec lien vers fingerprint-tool)
    send_migration_email(client['email'], client['name'])

# Une fois le fingerprint reçu, générer la licence IronLock
# avec la même date d'expiration que la licence PyArmor
subprocess.run([
    'ironlock', 'license',
    '--privkey', 'keys/private.pem',
    '--fingerprint', client['fingerprint_json'],
    '--expires', client['pyarmor_expiry'],
    '--output', f"{client['id']}.lic"
])

Tests de non-régression

# test_migration.py
import subprocess, sys

TESTS = [
    ("Démarrage normal",         "python app_v2.exe --version",    "v2.0"),
    ("Licence valide",            "python app_v2.exe --check-lic",  "OK"),
    ("Fonctionnalité export",      "python app_v2.exe --test-export","success"),
]

for name, cmd, expected in TESTS:
    result = subprocess.run(cmd.split(), capture_output=True, text=True)
    ok = expected in result.stdout
    print(f"{'✓' if ok else '✗'} {name}")
    if not ok: sys.exit(1)

Plan de déploiement

  • Semaine 1-2 : build parallèle PyArmor + IronLock, collecte des fingerprints clients.
  • Semaine 3 : migration des licences, envoi aux clients pilotes (10%).
  • Semaine 4-5 : validation pilotes, migration des 90% restants.
  • Semaine 6 : désactivation de la distribution PyArmor. Support PyArmor maintenu 3 mois supplémentaires pour les clients en retard.

Conclusion

La migration PyArmor 7 → IronLock v2 prend 4 à 6 semaines selon le nombre de clients. Le point critique est la collecte des fingerprints IronLock (les clients n'avaient pas besoin de générer un fingerprint avec PyArmor). L'envoi d'un outil fingerprint autonome (fingerprint-collector.exe) par email accélère ce processus à 2-3 jours.

🔐
PRODUIT LIÉ
IronLock v2.0
← Article précédent Article suivant →