Affichage des articles dont le libellé est Assembly. Afficher tous les articles
Affichage des articles dont le libellé est Assembly. Afficher tous les articles

samedi 29 novembre 2014

DotNet Patcher v4.6.6 : Obfuscator, Packer, Dependency merging, Assembly Changer, ....

[DESCRIPTION]

Cet utilitaire permet en toute modestie d'obfusquer vos binaires DotNet (C#, VbNet principalement).



Ne prends pas en charge les binaires codés en WPF !


[SCREENSHOT]



 [FONCTIONNALITES]

* Obfuscator/Packer detection
* Version infos changer
* Dependency detection/merging
* Requested level execution detection/changer
* Icon Changer
* Obfuscator/Packer :

- Renamer scheme (Alphabetic, invisible, dots, chinese, japanese, greek)
- Obfuscation & Packer scheme (Namespaces, Types, Methods, Properties, Fields, Events, Parameters, Variables, CustomAttributes)
- Obfuscation settings (rename resources content, resources encryption & compression, strings encryption, integers & booleans encoding, public calls hidding, Pinvoke calls hidding, anti-debug/tamper/dumper/ildasm, stackflow)
- Packer : Lzma compression


[PREREQUIS]
- Système d'exploitation Windows Vista, 7 et 8
- Le DotNet Framework 4 minimum
- Ne nécessite pas d'installation


[REMERCIEMENTS]
--> Xertz pour son theme que j'ai agrémenté pour DNP.
--> aeonhack's pour son "ThemeBase"
--> Gluck pour son projet ILRepack que j'ai intégré dans DNP
--> Ploxy (The-One) pour ses quelques conseils.
--> Xenocode pour ses conseils et astuces.
--> nash pour la batterie de tests des versions Beta.


vendredi 2 mai 2014

Tuto : Fusionner dll(s) dans exe depuis Visual Studio sans passer par ILMerge ...etc...

I - Pré-requis :

Votre projet principal VBNET est obligatoirement paramétré comme suit pour suivre ce tuto :




II - Le projet :

Mon projet principal se nomme "ImaboxUploader".
Les 2 autres projets attenants sont des librairies de classes ou fichiers ".dll et se nomment :
- ImaboxUploader.Components (fichier .dll : ImaboxUploader.Components.dll)
- ImaboxUploader.Core (fichier .dll : ImaboxUploader.Core.dll)




III - Quand je génère mon projet principal :

Lorsque je génère mon projet principal, les autres projets attenants sont aussi générés ce qui créé 3 fichiers dans mon répertoire ...\Bin\Release\ :
(ces 3 fichiers étant nécessaires au bon fonctionnement de mon application lorsqu'elle sera délivrée) :



Cependant je ne veux pas livrer mon projet final avec 2 autres fichiers à côté donc il va me falloir fusionner les assemblys dépendantes (2 fichiers .dll) à mon exécutable principal (1 fichier .exe) afin de distribuer qu'un unique fichier exécutable (imaboxUploader.exe) !


IV - Ajouter les assemblys dépendantes dans les ressources :

- Tout d'abord il faut que votre projet soit fonctionnel en l'état !
- Dans mon exemple les 2 fichiers dll sont bien ajoutées en tant que références :



- Nous allons maintenant ajouter ces 2 fichiers dll dans les ressources de notre projet en vue d'obtenir ceci dans les propriétés de mon projet principal :



...et grâce à l'ajout dans les ressources on obtient donc cela dans l'explorateur de solutions :



IMPORTANT : n'oubliez pas de générer l'ensemble de votre projet afin que les fichiers dlls soient correctement intégrées dans les ressources !


V - Ajouter le code pour charger les assemblys dépendantes en mémoire au démarrage de l'application :

- Dans les propriétés du projet on clique sur le bouton suivant :



....on obtient ceci :

Namespace My
 
    ' Les événements suivants sont disponibles pour MyApplication*:
    ' 
    ' Startup*: déclenché au démarrage de l'application avant la création du formulaire de démarrage.
    ' Shutdown*: déclenché après la fermeture de tous les formulaires de l'application. Cet événement n'est pas déclenché si l'application se termine de façon anormale.
    ' UnhandledException*: déclenché si l'application rencontre une exception non gérée.
    ' StartupNextInstance*: déclenché lors du lancement d'une application à instance unique et si cette application est déjà active. 
    ' NetworkAvailabilityChanged*: déclenché lorsque la connexion réseau est connectée ou déconnectée.
    Friend Class MyApplication
 
    End Class
 
 
End Namespace

- Dans mon cas avec mes 2 dll je remplace le code existant par ceci :

Namespace My
    Friend Class MyApplication
        Private WithEvents DLLDomain As AppDomain = AppDomain.CurrentDomain
 
        Private Function DLL_AssemblyResolve(ByVal sender As Object, ByVal args As System.ResolveEventArgs) As System.Reflection.Assembly Handles DLLDomain.AssemblyResolve
            If args.Name.Contains("ImaboxUploader.Components") Then
                Return System.Reflection.Assembly.Load(My.Resources.ImaboxUploader_Components)
            ElseIf args.Name.Contains("ImaboxUploader.Core") Then
                Return System.Reflection.Assembly.Load(My.Resources.ImaboxUploader_Core)
            Else
                Return Nothing
            End If
        End Function
    End Class
 
 
End Namespace


IMPORTANT :
- N'oubliez pas de générer de nouveau votre projet !
- Si vous voulez tester que cela fonctionne alors assurez-vous de déporter votre fichier executable à l'extérieur de votre répertoire de génération de projet et que vos fichiers dll ne soient pas à côté car il sont maintenant censés être intégrés dans les ressources !


Si vous avez des questions ???



Source d'inspiration du tuto : Source d'inspiration