Je vois cette instruction au début de plusieurs programmes Windows. Elle copie un registre sur lui-même, donc fondamentalement, cela agit comme un nop
. À quoi sert cette instruction?
Je vois cette instruction au début de plusieurs programmes Windows. Elle copie un registre sur lui-même, donc fondamentalement, cela agit comme un nop
. À quoi sert cette instruction?
Raymond Chen (Microsoft) a publié un article sur ce blog en détail:
https://devblogs.microsoft.com/oldnewthing/20110921-00/?p=9583
En bref, il s'agit d'un ajout au moment de la compilation appliqué afin de prendre en charge les correctifs à chaud au moment de l'exécution, de sorte que la fonction peut avoir les deux premiers octets écrasés par une instruction JMP pour rediriger l'exécution vers un autre morceau de code.
Il est prévu de sauter à un emplacement spécifique , 5 octets avant l'instruction mov. De là, vous avez 5 octets qui sont destinés à être modifiés en un saut en longueur vers un autre endroit dans l'espace mémoire 32 bits. Notez que lors du patch à chaud, ce saut de 5 octets doit être placé en premier, puis le mov peut être remplacé. Dans l'autre sens, vous risquez que le mov-jmp remplacé s'exécute en premier, et saute aux 5 octets de tout ce qui se trouve là (tout est nops par défaut, mais on ne sait jamais).
[l'addition suit ]
En ce qui concerne l'écriture du saut de 5 octets - il y a aussi le problème qu'il n'y a qu'une seule instruction qui vous permettra d'écrire plus de 4 octets de manière atomique - cmpxchg8b, et ce n'est pas une instruction idéale à cet effet. Si vous écrivez d'abord 0xe9, puis un dword, vous avez une condition de concurrence si 0xe9 est exécuté avant de placer le dword. Encore une autre raison d'écrire d'abord le saut en longueur.
Courtsey Présentation de Hotpatching and the Rise of Third-Party Patches à BlackHat USA 2006 par Alexander Sotirov
Qu'est-ce que le Hotpatching? Hotpatching est une méthode pour modifier le comportement d'une application en modifiant son code binaire à l'exécution. C'est une technique courante avec de nombreuses utilisations:
• débogage (points d'arrêt logiciel)
• instrumentation d'exécution
• accrocher les fonctions de l'API Windows
• modification de l'exécution ou ajout de nouvelles fonctionnalités aux applications source fermées
• déploiement des mises à jour logicielles sans redémarrage
• correction des vulnérabilités de sécurité
Hotpatches sont générés par un outil automatisé qui compare les binaires d'origine et corrigés. Les fonctions qui ont changé sont incluses dans un fichier avec une extension .hp.dll.Lorsque la DLL du correctif est chargée dans un processus en cours, la première instruction de la fonction vulnérable est remplacée par un saut vers le correctif.
Le L'option du compilateur / hotpatch garantit que la première instruction de chaque fonction est une instruction mov edi, edi qui peut être écrasée en toute sécurité par le hotpatch. Les anciennes versions de Windows ne sont pas compilées avec cette option et ne peuvent pas être corrigées à chaud.