MetaTips

Le blog de l'edition logiciel en ligne

Articles

RadEditor Telerik - FireFox 6 - Probleme de compatibilite / RadEditor for ASP.NET does not work properly in Firefox 6

Posted by Allouche Mathieu on June 24, 2012 at 5:05 AM

Type : Correctif- Niveau : 3 / 5
Depuis la migration sous FireFox le web composant n’affiche plus l’édition HTML. Je vous propose ici un moyen de contourner le problème, via la modification de l’assemblie elle-même. Celui-ci n’est fourni qu’à titre d’exemple, vous devez vous référer aux conditions d’utilisation des composants Telerik. Vous ne trouverez ici aucune source complète, ni aucune dll à télécharger.



Type : Correctif
Niveau :
4 / 5
Durée de lecture : env. 1 heure
S'applique à :

  • RadEditor Telerik 6.5
  • FireFox 6 et ultérieur, Maxthon 2.5



I. Introduction / Description avancée de la situation.

Depuis quelques jours maintenant, on trouve beaucoup de messages concernant des problèmes de composants web suite à la mise à jour de FireFox en version 6, notamment sur le composant RadEditor de Telerik en version 6.5 et ultérieure. Les utilisateurs de ce composant, sont encore en framework 1.1 et comme cette version n’est officiellement plus supportée, il n’y aura donc pas de mise à jour de la part de l’éditeur…
Apres une rapide étude, il s’avère que le problème provient du composant lui-même, qui considère que le navigateur n’est pas en mesure de prendre en charge l’éditeur graphique.
Pour traiter le problème, il existe plusieurs solutions. La première, et certainement la moins propre, consiste à modifier à la volée par réflexion certaines propriétés internes. Il sera nécessaire d’abaisser le niveau de sécurité.

<trust level="Full" originUrl=".*" />

La deuxième la plus optimisée puisque ne dégradant pas les performances, consiste à décompiler le code, le modifier et le recompiler (hooo…;). Pour cela nous pourrions utiliser une méthode un peu barbare à base d’outil Microsoft et de modification de code IL (un peu indigeste), mais je préfère vous présenter la manip avec 2 outils qui vont vous faciliter vraiment la tâche :


Il faut donc que ces 2 outils soit installés et paramétrés sur votre poste, pour continuer la lecture de cet article.

En premier lieu je vous préconise de faire une sauvegarde de tous les fichiers que vous serez amenés à modifier, ainsi qu’un état des lieux de votre composant, à l’aide de l’outil fourni par Microsoft. Pour cela lançons une invite de commande Visual Studio :


Tapez la commande Ildasm :


A l’ouverture, cliquez sur Fichier, Ouvrir, et sélectionnez l’assembly RadEditor.dll


Apres avoir double-cliqué sur le Manifest, on d’aperçois vite que l’assembly est signée. Nous serons donc dans l’obligation de soit refaire les références du projet et le recompiler, soit de modifier l’ensemble des manifestes qui utilisent cette version de l’assembly.


II. Correction du problème dans RadEditor.dll : Trouver l’erreur

Lancez reflector, cliquez sur ‘File’, puis ‘Open Assembly’. Sélectionnez le fichier RadEdito.dll


Dans l’arbosrence de droit, vous devriez avoir maintenant une nouvelle entrée ‘RadEditor’. Dépliez la, sélectionnez ‘RadEditor.dll’ et faite une recherche (ongle de droite, en haut) de la méthode ‘CheckBrowserCapabilities’.C’est un peu long, il ne faut pas omettre de préciser dans les options de recherche dans les’ membres’ (cf. bulle rouge).



Double cliquez, ou faites ‘Tool’ puis ‘Decompile’.

Vous devriez avoir le code d’exemple si dessus. Comme on peut le constater un rapide debug nous montre que l’expression régulière ne gère que les versions de 1 à 5 pour des navigateurs n’étant pas du Safari ou de l’IE… :

if (Regex.Match(input, @"rv: (1\.(3|4|5|6|7|8|9|10))|((2|3|4|5)\.\d))", RegexOptions.Compiled | RegexOptions.IgnoreCase).Success)


Dans notre exemple, j’ai choisi la simplicité, et retourner vrai tout le temps. Pour cela nous allons maintenant attaquer la modification

III. Correction du problème dans RadEditor.dll : Modification du code.


Nous allons modifier le code :

    else
{
this._isSupportedBrowser = false;
}

En

    else
{
this._isSupportedBrowser = true;
}

Mais pour cela, il convient d’être un peu code IL fluent. La ligne à modifier est la suivante :

L_010b: ldc.i4.0
L_010c: stfld bool Telerik.WebControls.RadEditor::_isSupportedBrowser
L_0111: ret

Une fois la ligne reperée, nous allons lancer le plugin de modification Reflexil. Pour cela, allez dans ‘Tools’, puis cliquez sur ‘Reflexil’.


Vous devriez obtenir quelque chose comme ceci :


A l’offset 267, effectuez un clic droit, puis Edit. Nous mettrons 1.

IV. Enregistrement de la nouvelle assembly


A l’enregistrement, l’outil va créer une dll qui portera le nom de ‘RadEditor.pached.dll’



Au moment de passer à l’enregistrement, le fait que la dll soit signée, va nous obliger à effectuer une manipulation supplémentaire, et c’est là, ou l’outil prend tout son sens. Nous allons devoir, soit supprimer la signature, soit en générer une nouvelle, mais quelle que soit la solution choisie, nous devrons refaire les références avec les assemblies utilisant cette nouvelle version. Dans notre exemple nous allons simplement supprimer la signature, car on va supposer que mes administrateurs ne m’imposent pas de dlls signées.

Cliquons sur ‘Remove Strong Name’.


Cliquez ensuite sur ‘Auto scan assembly directory’. L’outil nous propose de traiter automatiquement l’ensemble des assemblies. Enorme ! Suite à cette manipulation, je ne peux que vous conseiller de réexporter une deuxième fois votre assembly, afin de vérifier, qu’il a bien supprimé la signature. Il vous demandera d’écraser, ce que vous confirmerez. Il ne vous reste plus qu’à supprimer la dll ‘RadEditor.dll’ et renommer ‘RadEditor.pached.dll’ en ‘RadEditor.dll’. Puis copier l’ensemble des assemblies modifiées dans votre projet.

V. Epiloque

Bientot disponible

Categories: Developpements, Securite / Hacking

Post a Comment

Oops!

Oops, you forgot something.

Oops!

The words you entered did not match the given text. Please try again.

Already a member? Sign In

0 Comments