Instruction Substitution
Une instruction arithmétique ou logique unique est remplacée par une séquence équivalente plus longue : la passe -sub d'OLLVM qui gonfle les expressions et casse la reconnaissance naïve de motifs.
La substitution d'instructions est la passe -sub d'OLLVM : chaque opération
arithmétique ou logique simple est réécrite en une séquence d'instructions plus
longue qui calcule le même résultat. C'est une obfuscation locale et légère —
contrairement à la virtualisation ou à l'aplatissement, elle ne touche pas au flux
de contrôle — mais elle gonfle le code et déjoue les moteurs de motifs et les
décompilateurs qui attendent la forme canonique à instruction unique.
Fonctionnement
La passe applique des identités algébriques vraies sur les entiers en complément à deux, transformant un opérateur en plusieurs. La soustraction devient une addition d'un opérande nié ; AND/OR sont développés via des réécritures de type De Morgan ; le résultat est correct mais peu familier.
// before // after (one -sub option each)
a = b - c; a = b + (~c) + 1;
a = b & c; a = (b ^ ~0) | (c ^ ~0); // = ~(~b | ~c) ... negated form
a = b | c; a = (b & c) + (b ^ c);
a = b ^ c; a = (b | c) - (b & c);Détection & contournement
- Statique — Dans IDA/Ghidra, une ligne unique se développe en 3 à 5
instructions avec de la glu supplémentaire
not/neg/add-de-1autour des vrais opérandes. Le décompilateur afficheb + ~c + 1au lieu deb - c; reconnaître ces gabarits de substitution fixes est l'indice clé. - Dynamique — Pour une séquence opaque, passez-la en exécution symbolique (Triton) pour obtenir sa fonction de transfert, ou échantillonnez les entrées/sorties pour confirmer l'opération canonique qu'elle implémente.
- Patch / simplification — Appliquez une simplification peephole/par motifs et
une optimisation de type compilateur pour replier la substitution vers
l'instruction unique. Sur Hex-Rays, cela se fait au niveau du microcode, où les
règles réécrivent
b + ~c + 1enb - cavant la génération du pseudocode. - Outils — D-810 pour la simplification du microcode Hex-Rays, la simplification intégrée du décompilateur Ghidra, Triton pour la récupération de la fonction de transfert, et gooMBA pour les substitutions de type MBA.