Auteur

Auteur: Faiseur

samedi 17 juillet 2010

PE Deviant 1.0a

PE Deviant est le résultat d'un travail que je n'avais jamais vraiment abordé: ajouter une section dans un exécutable et, surtout, la rendre intéressante au niveau des fonctionnalités offertes...

Cette première release est avant tout un "Proof of Concept", c'est-à-dire une démonstration de faisabilité d'une méthode. J'ai trouvé très intéressant de travailler là-dessus et je compte améliorer cette première version.

Lien de téléchargement: Pe Deviant 1.0a

Visuel:  





Voici la description du fichier d'aide:


INTRODUCTION

[PE Deviant 1.0a]

Idée originale et conception: Faiseur

Builder et Stub codés 100% en assembleur

Distribué officiellement sur http://www.faiseur.net/



"PE Deviant" est un outil permettant d'ajouter des fonctionnalités nouvelles à un exécutable. La méthode utilisée par "PE Deviant 1.0" est peu courante mais très intéressante: il s'agit d'insérer un code capable de fonctionner comme un nouvel exécutable dans une section d'un autre exécutable. Le code est greffé avec l'ajout d'une nouvelle et petite section (4096 octets).

Les données ajoutées apportent de nouvelles fonctionnalités peu orthodoxes (il faut l'assumer), d'où le nom de "Déviant". Cela dit, elles n'ont pas de caractère illicite et il ne tient qu'à vous de les utiliser de la bonne manière.

Le gros point fort de ce système tient à ce que les fonctionnalités de "PE Deviant 1.0" feront partie intégrante de l'exécutable: elles s'activeront lors de son exécution, bénéficieront des mêmes privilèges, puis rendront la main au processus original. 



FONCTIONNALITES

Les fonctionnalités de "PE Deviant 1.0" sont les suivantes:


1. Afficher une MessageBox avant que le code original soit lancé [option: MessageBox]

Vous pouvez définir un message d'alerte personnalisé


2. Telecharger un fichier avant que le code original soit lancé [option: Download URL]

Attention: tant que le chargement n'est pas terminé le code original ne sera pas exécuté. Avec une connexion à large bande le téléchargement peut être quasi instantané, mais ne téléchargez pas un fichier volumineux pour éviter un temps d'attente incommodant. Aucun message d'erreur n'est généré si l'adresse url n'est pas trouvée.

Le chemin de destination (ex: C:/test.exe) est réglable en activant l'option [Path focus]


3. Exécuter un fichier [option: Execute]

Le fichier doit être de type exécutable. Evidemment cela peut être le fichier téléchargé. Aucun message d'erreur n'est généré si l'exécutable n'est pas trouvé.


4. Mapper un fichier dans le processus [option: load Dll]

Le fichier doit être de type .dll.

Cette option est très puissante puisqu'elle permet d'exécuter une dll dans le processus. La dll sera mappée dans le processus et bénificiera des mêmes droits d'accès. Aucun message d'erreur n'est généré si la dll n'est pas trouvée.

Comment procéder pour exécuter la dll ?

Il suffit d'incorporer un fonction à l'exécution de l'appel "DLL_PROCESS_ATTACH" dans la dll. Pensez à faire l'appel avec l'API "CreateThread". La dll pourra ainsi rendre la main au processus tout en continuant son travail. Voici un exemple d'appel d'une fonction "MAIN" au chargement de la dll:

Masm/JWasm code:

    .IF(reason == DLL_PROCESS_ATTACH)
        invoke CreateThread, 0, 4096, ADDR MAIN,hInstDLL, 0, ADDR idThread
    ...
[suite du code]

Ainsi mise en place la fonction MAIN sera exécutée lorsque la Dll sera chargée dans le processus.


5. Exécuter une fonction précise d'une dll dans le processus [option: load Dll and call function]

Si votre dll n'incorpore pas de fonction lors de l'appel à DLL_PROCESS_ATTACH, procédé d'ailleurs pas très soigneux, "PE Deviant 1.0"vous permet d'appeler une fonction spécifique de la dll une fois mappée :-)

Veuillez noter que la fonction appelée ne doit pas demander de paramètres. Et tout comme avec l'exemple précédent, pour que la Dll s'exécute en parallèle à l'application il vous faut utiliser l'API CreateThread pour qu'elle fonctionne en multitâche. Autrement la Dll ne rend pas la main au programme.



GENERER L'EXECUTABLE

Sélectionnez l'éxécutable où sera joint "PE Deviant" en cliquant sur le bouton [Find].

Cliquez ensuite sur le bouton [Append] pour ajouter "PE Deviant" avec les options choisies à l'exécutable. L'exécutable original n'est pas modifié. La version modifiée est générée dans le répertoire du Builder sous le nom 'result.exe'.



COMPLEMENT

PE deviant 1.0 incorpore également dans son code:

- un cryptage de son propre code (90% environ), incluant évidemment ses données data. Vos réglages spécifiques, tous les appels d'API, etc, ne sont pas lisibles avec un éditeur hexadécimal.

- un code anti debug permettant d'éviter de rendre visible son code (et ses réglages) pour un débutant en débogage.

- PE deviant 1.0 intègre sa propre récupération d'adresses API. Autrement dit l'exécutable généré avec cette nouvelle section peut être utilisé sur différents OS.


Dans sa préparation 1.0, "PE Deviant" est détecté trois fois sur 16 antivirus en se référant à NoVirusThanks. Il est honnêtement très difficile de faire mieux avec un tel concept souvent considéré comme suspect par les antivirus (ajout de sections avec code...).

Des versions plus complètes de PE Deviant sont à l'étude. Si vous souhaitez contacter l'auteur pour des suggestions ou améliorations, une seule adresse: clarte@gmail.com


Faiseur

2 commentaires:

  1. Super boulot ;)
    Dommage que le code ne soit pas open-source, mais bonne continuation.
    Cordialement, Shp

    RépondreSupprimer