2016-11-09 4 views
1

J'ai écrit un simple script python (juste une boîte de message) et le rend exécutable en utilisant pyInstaller. Je veux charger ce fichier exe de manière réfléchie en utilisant Powershell script Invoke-ReflectivePEInjection.ps1 mais powershell lance une erreur (fichier PE ne supporte pas ASLR)Comment activer ASLR d'un fichier exe

Y at-il un moyen de rendre le fichier exe compatible ASLR à partir du script Python.

Répondre

1

Il existe un outil appelé editbin qui peut être utilisé pour modifier les paramètres du fichier PE. Dans votre cas, /DYNAMICBASE et /HIGHENTROPYVA semblent s'appliquer. Utilisez cet outil après avoir créé l'exécutable.

+0

Merci pour la réponse .. j'ai mis ces deux et/drapeau NXCOMPAT en utilisant EDITBIN mais PowerShell est encore brisaient [link] (https://imgur.com/a/QFRLk) – john

+0

@John: êtes-vous sûr ce n'est pas un problème 64 bits/32 bits? –

+0

J'utilise des fenêtres 32 bits 8.1. Double vérifié en utilisant l'utilitaire de fichier linux. "msgbox.exe: exécutable PE32 (console) Intel 80386 (dépouillé sur PDB externe), pour MS Windows" – john

0

Voir How do I determine if an EXE (or DLL) participate in ASLR, i.e. is relocatable?

ASLR signifie que votre adresse de base sera aléatoire, donc toutes les références de mémoire absolue seront brisés. Autrement dit, si le compilateur et l'éditeur de liens supposent que l'adresse de base est 0x04000000 et qu'il y a une référence de mémoire absolue à 0x0400102F mais que votre module est effectivement chargé à 0x05000000, alors 0x01000000 doit être ajouté à l'adresse absolue codée en dur dans le code machine qu'il référence maintenant 0x0400102F. Ces corrections de code sont appelées relocalisations de base, elles sont effectuées par le chargeur de fenêtres lors du chargement de l'exécutable. Les endroits où ces corrections doivent être effectuées ne sont incluses dans l'exécutable que si elles sont relocalisables. Si l'indicateur de bit IMAGE_FILE_RELOCS_STRIPPED (0x0001) défini dans le champ Caractéristiques de l'en-tête de fichier est défini, ces exécutables ne sont pas déplacés et ne peuvent donc pas être placés ailleurs que dans les en-têtes, donc si vous activez ASLR dans cet exécutable va se casser parce que les références de mémoire sont incorrectes. Vous pouvez également écrire du code indépendant de la position, qui s'exécute correctement partout où il est placé en mémoire sans nécessiter de relocalisations de temps de chargement.