Vendredi, 9 septembre 2011
Architecture DDDD N-Layered (Distributed Domain Driven Design) et .NET
Vendredi, 29 juillet 2011
Amélioration des performances en .NET avec le parallélisme et l’asynchronisme
Mardi, 19 juillet 2011
Authentification forte par certificats et transfert de certificats de Apache vers Tomcat
Mardi, 28 juin 2011
NuGet, le gestionnaire de packages .NET
Mercredi, 22 juin 2011
Mocking avec le framework « Moq » en .NET
Mercredi, 16 mars 2011
Reflector Plugin Converter

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.
DownloadDimanche, 24 octobre 2010
Google’s Android License Verification Library

I do not encourage the use of Dexer for any form of application piracy or copyright infringement. You HAVE TO customize the Google’s Android License Verification Library if you want to protect your software against piracy. This post was written to make you aware of this. Please support android developers, and pay for your apps.
I've made a simple application, using Android Licensing Service, based on the sample provided with the SDK. Then i've made a simple C# application, using Dexer, to show how it's easy to circumvent the licensing protection. Something similar was first done by Justin Case using Smali/Baksmali.
All the magic is in a switch block, which tells the licensing library what to do next, depending on the results of the verification query. Here is how to patch this switch, without knowing the class name, method name and method prototype (so it should work with simple obfuscated applications).
apktool d -f -s DexerLVL.unpatched.apk DexerLVL.unpatched.apk-extract
I: Copying raw classes.dex file...
I: Loading resource table...
I: Decoding resources...
I: Copying assets and libs...
copy /Y DexerLVL.unpatched.apk-extract\classes.dex classes.dex > nul
DexerPOC
Dexer Licensing POC - Scanning instructions...
SparseSwitch found! - com.android.vending.licensing.LicenseValidator
::verify(java.security.PublicKey, Int, java.lang.String, java.lang.String) : Void
Done!
copy /Y output.dex DexerLVL.unpatched.apk-extract\classes.dex > nul
apktool b DexerLVL.unpatched.apk-extract DexerLVL.patched.apk
I: Copying classes.dex file...
I: Checking whether resources has changed...
I: Building resources...
I: Building apk file...
jarsigner -keystore debug.keystore -storepass android -keypass android DexerLVL.patched.apk androiddebugkey
Again, i've made this on my own application for research purposes only. It is illegal to defeat protections on copyrighted works. You should read all protection techniques here.
Original application: DexerLVL.unpatched.apk![]() | Patched application: DexerLVL.patched.apk![]() |
Mercredi, 6 octobre 2010
Dexer write support

I decided to write this post in English because I’ve received lots of emails regarding Dexer.
Dexer is an open source framework, written in C#. With Dexer, you can load, update then write back “.DEX” files used by Android (inside “.APK” packages).
Dexer is different than other tools like the famous Smali/Baksmali because all is done directly inside its object model. Dexer was inspired by Mono.Cecil that I’m very familiar with (Cecil targets .NET assemblies).
Dexer is a framework, not an application. Perhaps I will make an advanced GUI like Reflexil, but not yet, I spent too many nights on this one:).
Let’s see how it works with a simple Android application (Java):
Here is the result:
And here is the code of the main method inside the Dexer object model:
Now let’s go back to C# to play a little with this application by changing a string constant and an opcode (adding instead of multiplying):
Here is the result:
Now let’s call a method to change the title color:
Here is the result:
As you can see, altering DEX files is quite easy with Dexer. In order to rebuild APK packages, I’ve used ApkTool and JarSigner (with the default debug key generated by the Android SDK).
apktool d -s -f DexerPOC.apk output I: Copying raw classes.dex file... I: Loading resource table... I: Decoding resources... I: Copying assets and libs... apktool b output DexerPOC.new.apk I: Copying classes.dex file... I: Checking whether resources has changed... I: Building resources... I: Building apk file... jarsigner -keystore .\.android\debug.keystore -storepass android -keypass android DexerPOC.new.apk androiddebugkey adb install DexerPOC.new.apk 586 KB/s (12609 bytes in 0.021s) pkg: /data/local/tmp/DexerPOC.new.apk Success.
You can get up-to-date Dexer sourcecode here.
Lundi, 6 septembre 2010
Open bar ...
Les projets BoutDuTunnel, Dexer, Reflexil et Shellify migrent de la licence GPLv3 vers la licence MIT, bien plus permissive.
Pour rappel la licence MIT est une licence Open Source qui donne à toute personne recevant le logiciel le droit illimité de l'utiliser, le copier, le modifier, le fusionner, le publier, le distribuer, le vendre et de changer sa licence. La seule obligation est de mettre le nom de l'auteur avec la notice de copyright.
BoutDuTunnel, Dexer, Reflexil, Shellify Copyright (c) 2007-2010 Sebastien LEBRETON
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Mardi, 31 août 2010
Dexer

Dexer est désormais capable de charger intégralement un fichier DEX. Toutes les entités sont supportées (méthodes, classes, champs prototypes, annotations, instructions, etc.) ainsi que les informations de débogage. Il reste à faire l'écriture maintenant ...
Voici un exemple d'altération du code pour appeler une nouvelle méthode:
Jeudi, 26 août 2010
Dexer

Bref c'est exactement l'équivalent de nos bons vieux assemblys en .NET. Fort de mon expérience sur Mono.Cecil, j'ai donc réécrit, en me basant sur la spécification Android, un framework en C# capable de lire un fichier dex et de l'exploiter sous la forme d'un graphe d'objets évolué.
Actuellement j'ai écrit le code nécessaire pour lire les annotations, les tableaux, les classes, les méthodes, les champs, les prototypes, les paramètres et les types primitifs. Il me reste donc à écrire le support des instructions, des gestionnaires d'erreurs et du debug.
Si j'ai le courage d'aller jusqu'au bout (à savoir implémenter l'écriture du graphe d'objets vers le format dex), il sera possible de manipuler aussi facilement les fichiers dex que les assemblys à l'aide de Mono.Cecil ou Reflexil.
http://sourceforge.net/projects/dexer/
Samedi, 24 juillet 2010
Shellify 0.4

L'implémentation du format binaire des fichiers "raccourcis" (.LNK) est désormais complète. La bibliothèque permet donc de faire ce que vous voulez avec ce type de fichiers.
En finalisant tous les détails j'ai pu identifier une erreur dans les spécifications de Microsoft. Sans trop y croire et pour tester j'ai envoyé un mail à protocol@microsoft.com. Trois jours plus tard, un "Senior Support Escalation Engineer" me confirme qu'il a testé mes remarques et lance une demande de mise à jour du document de spécifications. Ils sont forts quand même chez MS
Les binaires:
Les sources:
Lundi, 19 juillet 2010
Shellify v0.2

Je profite de la faille 0Day de Windows concernant les fichiers .LNK (les célèbres raccourcis Windows), pour vous présenter Shellify. Shellify est née de mon double besoin de vouloir créer des raccourcis relatifs et de pouvoir regarder en détail le format des fichiers .LNK (par défaut sous Windows ces derniers sont obligatoirement absolus).
J’ai donc écrit une implémentation 100% managée (il fallait auparavant utiliser des objets COM / IShellLink) qui permet de gérer ce format. Ci après le rapport de MoMa - Mono Migration Analyzer:
ShellifyTool, un outil en ligne de commande, illustre l’utilisation de la bibliothèque et permet de manipuler les principaux attributs des fichiers :
Il est en particulier possible de supprimer toutes les références à vos informations personnelles qui sont sympathiquement stockées dans les raccourcis : le nom de votre machine, le label et le numéro de série de votre disque dur, les métadonnées sur la cible du lien (il existe d’ailleurs dans le format un bloc technique au nom évocateur : le TrackerDataBlock).
L’implémentation est presque complète (le dossier de spécification Microsoft fait quand même 52 pages, je m’attendais à moins de richesse), je finaliserai les petits détails à l'occasion. Pour info les données techniques sont disponibles depuis mi-2009 avec l’effort de Microsoft à ouvrir ses formats.
Enfin, Shellify est capable en l'état de ‘roundtriper’ à l’octet près tous les fichiers. (Des fichiers de tests sont d’ailleurs fournis dans le code source : raccourcis xp, seven, vers des fichiers locaux et/ou réseau, avec de nombreux blocs d’extensions)
Binaires:
Code source:
Lundi, 19 avril 2010
Reflexil 1.1

Aprè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
Mercredi, 27 mai 2009
Reflexil 0.9.1

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
Commentaires