I finally updated my Reflexil article on codeproject. Recent features like member injection, resource alteration, custom attributes and code deobfuscation are presented. 360K views so far !
Reflexil 1.5 will be able to deobfuscate assemblies, thanks to de4dot by 0xd4d.
Babel NET, CliSecure, CodeVeil, CryptoObfuscator, DeepSea, Dotfuscator, dotNET Reactor, Eazfuscator NET, Goliath NET, Skater NET, SmartAssembly, Spices Net and Xenocode are supported !
Custom attributes are now supported in Reflexil 1.4. Let's use the following sample code:
Here is the execution result:
Open Reflector & Reflexil then go to the "stub" method, we can see attributes in the "Custom attributes" tab:
Edit the attribute, we can see constructor arguments used :
Then update the first one, an array with enumeration values :
Then a simple string:
Then a simple bool:
Then a type reference:
Ok let's update the attribute:
Save & test.... works !
Note: a search area is now available in the type tree for easier use :
You can download the latest version here: http://reflexil.net
Reflector 7 has changed its assembly version (previously 5.0.0.0, now 7.0.0.0), so that lots of plugins fail to load, but without any plugin API changes.
Here is a simple tool to patch all references to Reflector assembly with custom version, so you don't need to get the plugin source code and recompile.
Tested with Reflexil 1.1, BamlViewer, Graph, CppCli.
Hope it can be useful.
DownloadAprès une version 1.0 apportant son lot de correctifs, la version 1.1 de Reflexil est désormais disponible.
Auparavant Reflexil permettait de travailler uniquement sur de l’ « existant ». Avec cette version il est dorénavant possible d’ajouter, renommer ou supprimer toutes les entités manipulées couramment (classes, interfaces, structures, énumérations, évènements, champs, méthodes, constructeurs, propriétés et références sur des assemblys).
En particulier les fonctions d’injections de telles entités sont « intelligentes » et prennent en considération le contexte : par exemple injecter une propriété dans une classe va générer une propriété, un champ de même type, un couple getter/setter ainsi que le code IL pour l’accès à ce champ (libre à vous ensuite de supprimer ce qui ne vous sera pas utile) alors qu’injecter une propriété dans une interface ne générera ni champ ni code IL tout en basculant les attributs adaptés sur le couple getter/setter (IsAbstract et IsVirtual par exemple).
De plus l’architecture de Reflexil a été complétement remaniée, et il est maintenant possible d’utiliser l’application depuis Reflector ou Cecil.Studio.
De nouveaux éditeurs permettent de manipuler tous les attributs des champs, évènements et propriétés. Il est également possible de vérifier l’assembly en cours grâce à un wrapper de PEVerify. A noter qu’avant d’être vérifié, l’assembly en cours est sauvegardé dans un emplacement temporaire, ce qui permet de vérifier l’état mémoire et non pas la dernière sauvegarde fichier.
Enfin de nombreux bugs ont été corrigés, merci à Robin et Brien pour leurs patchs et les équipes de RedGate pour leurs retours.
Les binaires:
reflexil.1.1.bin.zip
Les sources:
reflexil.1.1.src.zip
Une nouvelle version de Reflexil est disponible. Elle permet d'éliminer différents petits bugs pénibles, notamment des portions de code destinées au debug. (des extractions de fichiers sur "c:\" // todo: relire correctement mes sources avant le commit! pan pan)
Les binaires:
reflexil.0.9.1.bin.zip
Les sources:
reflexil.0.9.1.src.zip
Une nouvelle version de Reflexil est disponible, au menu:
Le support de l'intellisense/insight en VB.NET et C# dans la fenêtre d'injection de code, ainsi que du folding (régions):
Une nouvelle colonne pour la gestion des offsets d'instructions:
Au niveau des corrections: fix pour les problèmes d'affichage avec les thèmes visuels désactivés + la gestion correcte du clavier avec le browser de classes.
Les binaires:
reflexil.0.9.bin.zip
Les sources:
reflexil.0.9.src.zip
Eh toi le jeune ! Marre de faire l'abruti sur de la tecktonik? Alors viens conquérir le monde avec Reflexil 0.8, tu pourras faire des trucs aussi puissants que transformer une application GUI en application console. Trop bien comme ça te calme. Tu pourras aussi modifier l’Entry Point de ton assembly. Eh ouais rien que ça ! Fini les néons sous ta vieille bagnole de miséreux... la grande vie commence.
Ah sinon tu peux désormais modifier la définition de ton assembly ainsi que toutes ses références. Carrément. Alors arrêtes d’écouter Lorie, génère ton PublicKeyToken comme un déglingo, change de version et met toi à Cannibal Corpse en hurlant SHA1 SHA1 ! Et vire moi ce bonnet péruvien. Et soigne moi cette vilaine peau !
Les binaires:
reflexil.0.8.bin.zip
Les sources:
reflexil.0.8.src.zip
Pour le premier post de cette nouvelle année, une nouvelle version de Reflexil est arrivée.
Nouveautés:
- Un éditeur pour les différents attributs d'un type (sealed, semantic, layout, string format, visibility, ...) Au final il est désormais possible de rendre publique une classe privée ou de débloquer les classes scellées.
- Un outil de suppression des noms forts, qui permet comme son nom l'indique de supprimer la signature numérique des assemblages et de fixer les éventuelles références entre ces derniers.
![]() | ![]() |
Evolutions:
- Les clefs de registres de l'outil sn.exe du SDK ont été mises à jour pour le framework 3.5.
- Le générateur de code C# / VB.NET a été totalement remanié.
Corrections:
- Problème de génération des champs statiques.
- Problème de génération des types VB.NET 'Single'.
- Problème de génération avec des mots-clefs C# / VB.NET utilisés comme noms de champs/méthodes/paramètres.
- Problème de scintillement de la fenêtre principale.
Les binaires:
reflexil.0.7.bin.zip
Les sources:
reflexil.0.7.src.zip
Commentaires