
Le correctif du code d'assemblage pour modifier le comportement d'un programme existant n'est pas rare dans l'analyse des logiciels malveillants, l'ingénierie inverse des logiciels et les domaines plus larges de la recherche sur la sécurité. Ce projet étend le désassembleur populaire IDA Pro pour créer un flux de travail binaire interactif plus robuste conçu pour une itération rapide.
Ce projet est actuellement propulsé par une fourche mineure du moteur Keystone omniprésent, prenant en charge le correctif X86 / X64 et ARM / ARM64 avec des plans pour activer les architectures Keystone restantes dans un futur version.
Un merci spécial aux rayons hexagonaux pour avoir soutenu le développement de ce plugin.
Ce plugin nécessite IDA 7.6 et Python 3. Il prend en charge Windows, Linux et MacOS.
Veuillez noter que les anciennes versions d'IDA (8.2 et ci-dessous) ne sont pas compatibles avec Python 3.11 et supérieur.
Exécutez la ligne suivante dans la console IDA pour installer automatiquement le plugin:
import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' ). read ()) import urllib . request as r ; exec ( r . urlopen ( 'https://github.com/gaasedelen/patching/raw/main/install.py' , cafile = '/etc/ssl/cert.pem' ). read ())Alternativement, le plugin peut être installé manuellement en téléchargeant le package de plugin distribuable pour votre plate-forme respective à partir de la page des versions et en la décompression à votre dossier Plugins.
Il est fortement recommandé d'installer ce plugin dans le répertoire du plugin utilisateur d'IDA:
import ida_diskio , os ; print ( os . path . join ( ida_diskio . get_user_idadir (), "plugins" ))Le plugin de correctif se chargera automatiquement pour les architectures prises en charge (x86 / x64 / arm / arm64) et injecter des actions de correction pertinentes dans le menu contextuel de clic droit des vues de démontage IDA:

Une liste complète des actions de correction contextuelle est décrite dans les sections suivantes.
La boîte de dialogue de correction principale peut être lancée via l'action Asseble dans le menu contextuel de clic droit. Il simule une vue de démontage de base IDA qui peut être utilisée pour modifier une ou plusieurs instructions en succession rapide.

La chaîne de montage est un champ modifiable qui peut être utilisé pour modifier les instructions en temps réel. Appuyez sur Entrée commise (Patch) l'instruction entrée dans la base de données.
Votre emplacement actuel (alias votre curseur) sera toujours mis en évidence en vert. Les instructions qui seront obligées de votre correctif / modification seront mises en évidence en rouge avant de commettre le correctif.

Enfin, les touches de flèche UP DOWN peuvent être utilisées tout en se concentrant sur le champ de texte d'assemblage modifiable pour déplacer rapidement le curseur de haut en bas de la vue de démontage sans utiliser la souris.
L'action de correction la plus courante consiste à résoudre une ou plusieurs instructions. Pour cette raison, l'action NOP sera toujours visible dans le menu de clic droit pour un accès rapide.

Les instructions individuelles peuvent être consacrées, ainsi qu'une gamme sélectionnée d'instructions.
Forcer un saut conditionnel pour toujours exécuter un «bon» chemin est une autre action de correction courante. Le plugin ne montrera cette action que lorsqu'il clique avec le bouton droit sur une instruction de saut conditionnelle.

Si vous ne voulez jamais qu'un saut conditionnel soit pris, vous pouvez simplement le faire à la place!
Les correctifs peuvent être enregistrés (appliqués) à un exécutable sélectionné via le sous-menu de correctif à tout moment. L'action rapide est encore plus rapide pour enregistrer les correctifs ultérieurs en utilisant les mêmes paramètres.

Le plugin fera également un effort actif pour conserver une sauvegarde ( .bak ) de l'exécutable d'origine qu'il utilise pour «proprement» l'application de l'ensemble actuel de correctifs de base de données pendant chaque enregistrement.
Enfin, si vous n'êtes jamais mécontent d'un correctif, vous pouvez simplement un clic droit patché (jaune) des instructions pour les revenir à leur valeur d'origine.

Bien qu'il soit «facile» de revenir aux octets à leur valeur d'origine, il peut être «difficile» de restaurer l'analyse à son état précédent. Retourner un patch peut parfois nécessiter des correctifs humains supplémentaires.
Le temps et la motivation permettent, les travaux futurs peuvent inclure:
xor eax, eax; ret; ) Pretty: mov [rsp+48h+dwCreationDisposition], 3
Raw: mov [rsp+20h], 3
Je salue les contributions, les problèmes et les demandes de fonctionnalités externes. Veuillez faire toutes les demandes de traction vers la branche develop de ce référentiel si vous souhaitez qu'ils soient considérés pour une future version.