forom.com cracked
Forom.com est un site consacré, comme son nom ne l’indique pas, aux séries télévisées. Il est notamment consulté pour ses sous-titres d’épisodes, qui possèdent l’avantage de sortir particulièrement rapidement tout en gardant une qualité remarquable.
Si vous ne l’avez pas déjà fait, je vous invite à y faire un tour. Mais attention : avant cela, il est de votre devoir de vous préparer psychologiquement à ce que vous allez affronter. Respirez un grand coup, et préparez-vous à accéder à un site qui mériterait 100 fois de figurer dans les manuels d’informatique, section « Tout ce qu’il ne faut PAS faire lorsqu’on conçoit / développe un site web ».
Il y a de quoi pleurer d’indignation, ou se pisser dessus de rire, au choix. Non seulement les pages principales sont entièrement en Flash sans aucune raison valable, avec tous les bien connus problèmes inutiles que cela crée (accessibilité, ergonomie, URLs inopérantes, impression papier, lourdeur, et j’en passe et des meilleures), mais en plus de cela le site est constitué d’un très curieux mélange de pages HTML et de Flash, ce qui rend l’aspect graphique du site complètement disparate et la navigation digne du parcours du combattant. Rajoutez à cela le fait que les pages HTML sont hideuses, que le site tente d’ouvrir une demi-douzaine de popups (ou presque) à chaque page, et que tout le site en général est une effigie de l’artisanat constellée d’erreurs de développeur débutant et vous obtenez de quoi faire vomir un ornythorinque affamé (c’est du vécu).
Mais bien évidemment, ce billet ne serait pas très utile si il ne se contentait que de pointer du doigt ce prétendu « site internet ». Je compte bien ouvrir la voie pour que toi, amateur de séries télévisées en quête de sous-titres, te soit épargné le passage tortueux mais jusqu’ici obligé accueil -> connexion -> rubriques -> catégorie alphabétique -> nom de la série -> séléction du sous-titre. En effet, Forom, dont les dirigeants n’ont visiblement rien compris à l’intérêt des liens hypertextes, possède un système destiné à empêcher toute personne de télécharger des sous-titres sans passer d’abord par la procédure susdite. En particulier, il empêche tout accès direct à la page listant les fameux fichiers.
Cette limitation est en passe d’être résolue, car votre serviteur a, en coopération avec votre second serviteur ApOpH!s, cassé ce système de protection. Les informations recueillies permettront, à terme, de développer des scripts permettant de « parser » (analyser) les pages contenant les sous-titres de manière à en extraire les informations utiles afin de les placer dans un flux RSS utilisable par un agrégateur – donnant ainsi à l’utilisateur un moyen pratique de suivre les sorties des nouveaux sous-titres.
Toute la protection est contenue dans un code de sécurité placé dans l’URL des pages contenant les documents du site (paramètre « c=… »). Evidemment, vous pourriez penser qu’il s’agit d’un code unique de session – lequel aurait été impossible à cracker – mais en réalité, ce n’est rien de cela. Grâce à Flare, un programme conçu pour décompiler un objet Flash SWF et en extraire le code source, j’ai pu isoler l’algorythme (quoique, je ne sais pas si on peut utiliser ce terme pour une telle… « chose ») utilisé pour générer ce code de sécurité. Il semblerait que les développeurs de Forom aient été assez naïfs (ou plus probablement, incompétents) pour croire qu’un objet Flash ne pouvait pas être décompilé, ce qui est bien évidemment complètement faux.
Voici l’algorythme en question. Je vais devoir, une fois de plus, vous demander de vous préparer psychologiquement à ce que vous allez lire (et de bien protéger votre clavier d’éventuels éclaboussures peu reluisantes). Si vous avez des notions de base en cryptologie, je vais devoir vous demander de rester calme et de ne pas céder à la panique. C’est parti.
- Le nom d’utilisateur est d’abord mis en majuscules.
- Pour chaque lettre du nom d’utilisateur : ajouter une lettre aléatoire de 97 à 122 + le code ASCII de la lettre du nom d’utilisateur
- Ajouter « z »
- Ajouter le code ASCII du premier caractère du mot de passe
- Pour chaque lettre du mot de passe (sauf la première) : ajouter une lettre aléatoire de 97 à 121 + le code ASCII du caractère du mot de passe
- Ajouter « z »
- Ajouter les 5 premiers chiffres de l’adresse ip du client en ordre inversé
- Ajouter un caractère aléatoire
Une fois ce code généré, vous pouvez accéder à n’importe quelle page de documents de Forom.com sans même vous « logger ».
Ah, j’en vois qui au fond de la salle qui n’ont pas encore terminé leur fou rire. Pour cette raison, un petit interlude :

Voilà. Maintenant que tout le monde s’est remis de cette découverte, je tiens à préciser que en dévoilant cette information je ne viole aucun droit d’auteur (pas directement, en tout cas), n’effectue aucune intrusion dans un système informatique et n’ai volé aucune donnée à qui que ce soit. Par ailleurs, je me conforte dans l’idée que cette nouvelle va, espérons le, inciter l’équipe de Forom de se remettre un peu en question et de recruter un vrai concepteur / développeur de sites Internet, pas un glandeur du dimanche. Par ailleurs, tout commentaire du style « oh c’est pas bien ce que tu fais » ou « t’as qu’à le faire toi même le site si t’es pas content » sera immédiatement supprimé pour cause d’inutilité flagrante.
EDIT : il semble que l’accès aux pages contenant les listes de sous-titres soit un poil plus compliqué que ce que je croyais au départ, car la page de sous-titres vérifie la validité d’un cookie de session que la page principale des sous-titres (celle contenant la liste des séries) a déposé. Si vous comptez développer un quelconque script, il vous faudra donc d’abord récupérer un cookie de session valide sur cette page avant de le renvoyer sur la page contenant la liste des fichiers de sous-titres. Vous l’aurez compris, ce système est tout aussi stupide et inutile que le reste.
Réinstaller un serveur dédié "from scratch"
Depuis Dedibox, il est rentré dans mes habitudes de réinstaller entièrement un serveur dédié une fois qu’il m’a été livré. Oui, entièrement, distribution y comprise. J’y vois deux intérêts principaux :
- Vous pouvez installer des distributions non proposées en standard par votre fournisseur de serveur dédié.
- C’est plus propre. En effet, je n’aime pas les systèmes préconfigurés qui sont, le plus souvent, conçus pour les débutants avec un nombre incroyable de choses à reparamétrer. Par ailleurs, j’ai l’habitude de travailler exclusivement avec la version Unstable de Debian (même en production, sisi, et je ne suis pas fou) ; or, mettre à jour la Sarge proposée par OVH vers Unstable est une opération assez sale, qui laisse des traces de l’ancienne configuration un peu partout. D’une manière générale, il est donc plus judicieux de réinstaller entièrement le système afin d’avoir un meilleur contrôle sur ce dernier.
- Si votre fournisseur propose un mode « rescue » mais pas de partionnement personnalisé, vous pouvez utiliser le rescue pour faire votre propre partionnement.
- Dans le cas des serveurs dédiés d’OVH dotés d’un processeur 64 bits (notamment le Start 310G, le nouveau serveur d’Agrégaweb), il est impossible de demander l’installation de la version AMD64 de Debian. L’avantage de la réinstallation devient dès lors indéniable, car on peut alors installer une Debian AMD64, et profiter ainsi des avancées de cette architecture. Ainsi, le nouveau serveur d’Agrégaweb tourne sous Debian AMD64.
Mais, me diriez-vous, comment cela est-il faisable sans accès physique à la machine, seulement un accès SSH ? En fait, la possibilité d’effectuer la manipulation dépend de 3 conditions : la présence d’un système de réinstallation gratuite du serveur (pour remettre celui-ci à sa configuration d’usine « au cas où »), la présence d’un système dit « rescue » (système d’exploitation distant minimal conçu au départ pour être utilisé en cas de pépin sur la machine), et la présence d’un système de partionnement personnalisé du (des) disque(s) dur(s) du serveur [1]. Les relations entre ces différentes conditions étant plutôt complexes, je les ai regroupées dans un tableau :
| Cas n° | Rescue | Réinst. | Part. | Commentaire |
|---|---|---|---|---|
| 1 | Oui | Oui | Oui | Aucun problème, vous pourrez effectuer la procédure de manière confortable. |
| 2 | Oui | Oui | Non | L’opération est possible, mais vous devrez vous assurer que le mode rescue proposé dispose des outils nécéssaires pour pouvoir installer le nouveau système depuis le système rescue [2]. Si ce n’est pas le cas, vous devrez installer le nouveau système depuis l’existant, ce qui impose de conserver le partionnement d’origine, ce qui peut se réveler problématique concernant l’emplacement du nouveau système. |
| 3 | Oui | Non | Oui | L’opération est possible, mais attention, une fois la procédure commencée, vous ne pourrez pas revenir en arrière si vous n’arrivez pas à faire booter le serveur sur votre nouveau système. |
| 4 | Non | Oui | Oui | L’opération est possible mais fastidieuse : si vous n’arrivez pas à faire booter votre nouveau système du premier coup (ce qui a de fortes chances d’arriver), vous êtes obligés de tout recommencer à zéro en utilisant la réinstallation automatique. |
| 5 | Oui | Non | Non | L’opération est possible, mais vous devrez vous assurer que le mode rescue proposé dispose des outils nécéssaires pour pouvoir installer le nouveau système depuis le système rescue [2]. Si ce n’est pas le cas, vous devrez installer le nouveau système depuis l’existant, ce qui impose de conserver le partionnement d’origine, ce qui peut se réveler problématique concernant l’emplacement du nouveau système. Par ailleurs, une fois la procédure commencée, vous ne pourrez pas revenir en arrière si vous n’arrivez pas à faire booter le serveur sur votre nouveau système, soyez donc sûr de vous. |
| 6 | Non | Oui | Non | L’opération est possible, mais vous devrez installer le nouveau système depuis l’existant, ce qui impose de conserver le partionnement d’origine, ce qui peut se réveler problématique concernant l’emplacement du nouveau système. Par ailleurs, l’opération se révèlera probablement fastidieuse : si vous n’arrivez pas à faire booter votre nouveau système du premier coup (ce qui a de fortes chances d’arriver), vous êtes obligés de tout recommencer à zéro en utilisant la réinstallation automatique. |
| 7 | Non | Non | Oui | L’opération est théoriquement possible mais tellement dangereuse que c’en devient suicidaire : si votre nouveau système ne boote pas du premier coup, vous êtes bon pour payer la réinstallation (qui est en général facturée à un prix dissuasif). |
| 8 | Non | Non | Non |
De là, vous avez deux méthodes à votre disposition pour mettre en place votre nouveau système :
- Installer directement le système d’exploitation depuis l’ancien système ou le système rescue : cela n’est uniquement possible que si l’OS que vous vous apprêtez à installer propose une installation « à chaud », c’est à dire sans support sur lequel vous aurez besoin de rebooter (vous faites l’installation entièrement à partir d’un système existant). Debian (via l’utilitaire
debootstrap) et Gentoo, entre autres, le proposent. C’est la solution la plus propre et la plus fiable. - Préfabriquer une image : c’est la seule solution possible si la distribution visée ne propose pas d’installation à chaud. La méthode consiste à installer entièrement le système chez vous, en faisant « comme si » vous étiez sur le serveur dédié, puis à recopier une image du système ainsi créé sur votre serveur dédié, sur laquelle vous pourrez ensuite booter. L’avantage est que cela fonctionne pour tous les systèmes d’exploitation [4], l’inconvénient est que le système obtenu peut se révéler plus ou moins propre puisqu’il n’a pas été installé sur son environnement matériel final – avec la plupart des distributions Linux, le système installé est le même quel que soit le matériel, mais ce n’est peut-être pas le cas pour d’autres types de systèmes. Par ailleurs, cette méthode est plus compliquée et très peu d’aide existe sur Internet pour effectuer ce genre d’opération.
Etant donné que les seules réinstallations que j’aie effectuées concernaient des Debian Unstable installées à chaud, je ne peux pas vous en dire plus sur la deuxième méthode. Voici quelques conseils :
- Lors du partitonnement initial, placez le système préinstallé par votre fournisseur dans une petite partition (2 Go par exemple) au début du disque dur, puis placez la ou les partitions sur lesquelles sera installé votre nouveau système. Ne placez pas de swap à ce stade [5]. Ensuite, lorsque le nouveau système est en place, remplacez la première partition contenant l’ancien système, devenue inutile, par une partition de swap qui servira à votre nouveau système. D’autres variantes sont évidemment possibles, menant au même résultat.
- Evidemment, il est plus confortable d’installer le nouveau système depuis l’ancien préinstallé que depuis le système rescue, sauf si vous n’avez pas le choix [2].
- Si vous hésitez lors de la configuration du nouveau système (par exemple, si elle dépend d’une particularité du matériel dont vous n’avez pas connaissance), gardez à l’esprit que la configuration de votre ancien système est une précieuse mine d’informations, car elle, on est sûr qu’elle fonctionne.
- Si vous tentez d’utiliser la première méthode pour installer un système 64 bits à partir d’un système 32 bits (pour les processeurs de type x86_64), bootez d’abord sur votre ancien système avec un kernel compilé pour du 64 bits, sinon vous ne pourrez pas utiliser les binaires de votre nouveau système dans l’ancien : typiquement, vous voudrez sûrement faire un
chrootsur votre nouveau système avant de booter dessus, pour installer des packages par exemple, or vous ne pourrez pas le faire depuis un kernel 32 bits car tous les binaires contenus dans lechrootrefuseront de fonctionner tant qu’ils ne tournent pas sur un kernel conçu pour les processeurs x86_64. (notons par ailleurs quedebootstrapcrée des environnementschrootpour installer les packages de base,debootstraprefusera donc de terminer l’installation d’une Debian AMD64 à partir d’un kernel 32 bits). - Faites en sorte que votre premier boot se fasse sur un système le plus simple possible pour éviter tout oubli ou erreur de configuration : installez un Kernel générique, préférez le bootloader LILO à GRUB (j’ai commis l’erreur d’installer directement GRUB sur un serveur OVH, alors que ce dernier ne le supportait pas, et cela m’a fait perdre de nombreuses heures de travail), configurez les interfaces réseau en statique (et non DHCP) de préférence. Si vous voulez un système plus complexe, modifiez-le après coup.
- Avant d’essayer de booter sur votre nouveau système, vérifiez bien que vous n’avez rien oublié. Assurez vous du bon fonctionnement de toute la chaîne de boot jusqu’au lancement des services de contrôle à distance : rappellez-vous que le système que vous allez installer doit passer du bootloader au serveur SSH (par exemple) sans oublier les interfaces réseau, et que tout cela doit se faire sans anicroche, surtout si vous n’avez pas de système rescue pour rectifier le tir après coup, ou si ce dernier devient inutilisable (par exemple si votre OS utilise un système de fichier non reconnu par le système rescue, ce qui sera très probablement le cas si vous tentez d’installer un système exotique). La vérification du kernel sur lequel le premier boot se fera, ainsi que de la configuration du bootloader, méritent une attention particulière.
- Attention, lors des premiers boots, les problèmes survenant avant le montage des systèmes de fichiers (c’est à dire au niveau du bootloader ou du kernel) ne pourront pas être consignés dans des logs, ce qui vous contraindra à les rechercher à l’aveuglette. Soyez méthodique dans la recherche du problème et procédez par élimination.
Bonne chance !
[1] Curieusement, OVH ne propose le partitionnement personnalisé que lors de la réinstallation gratuite, jamais lors de la première installation. Donc, contrairement aux apparences, les clients d’OVH se trouvent dans le cas 1 du tableau.
[2] Les administrateurs souhaitant utiliser le système rescue pour installer leur nouveau système ET planifiant d’installer un nouveau système 64 bits doivent au préalable s’assurer que le système rescue proposé tourne sur un kernel 64 bits [3].
[3] Cette restriction ne s’applique pas si vous souhaitez installer votre nouveau système depuis une image préfabriquée (méthode 2).
[4] Oui, même Windows ! Certains ont déjà réussi à l’installer sur une Dedibox par cette méthode ; néanmoins, elle demande un certain nombre de compétences préalables en administration de systèmes Windows pour être exploitable.
[5] Certains systèmes de partitionnement particulièrement mal foutus (tels celui d’OVH) vous obligent à choisir une partition de type swap, dans ce cas placez-là en lieu et place d’une autre partition et recréez ensuite un système de fichiers normal sur la partition contenant le swap depuis le système préinstallé.
PHP 5 : le mystère de la fonction __autoload()
Je pense avoir découvert une différence fondamentale de comportement dans la fonction magique __autoload() entre PHP 5.0.x et PHP 5.1.x.
En effet, le manuel PHP indique à ce sujet :
Note : Les exceptions lancées depuis la fonction __autoload() ne peuvent être interceptées par un bloc catch : elles provoqueront une erreur fatale.
Or, cela est bel et bien vrai en PHP 5.0.x (jusqu’à PHP 5.0.5), mais est devenu faux en PHP 5.1.x (à partir de PHP 5.1.0), où les exceptions sont traitées correctement.
Pour vous en convaincre, saisissez les commandes suivantes en tant qu’utilisateur normal sur un shell Bash :
wget http://storage.e-t172.net/php-autoload/php-autoload && chmod +x php-autoload && ./php-autoload
Ce script va télécharger PHP 5.0.5 et PHP 5.1.0, les compiler (sans les installer, rassurez-vous) et éxécuter ce script PHP successivement avec les deux versions fraîchement compilées :
<?php
define('CLASS_DOES_NOT_EXIST', TRUE);
function __autoload($class)
{
if (CLASS_DOES_NOT_EXIST)
{
// On cree une "fausse classe" pour ne pas generer d'erreur "class not found"
eval('class '.$class.' { }');
throw new Exception('The class '.$class.' does not exist');
}
}
try
{
// Tentative d'instanciation d'une classe qui va appeller __autoload()
$test = new test();
// Commentez la ligne d'instanciation pour tester les appels statiques
test::go();
}
catch (Exception $e)
{
var_dump($e);
}
?>
Voici les résultats tels que le script Bash les affiche :
-----------
PHP 5.0.5 :
-----------
Fatal error: Function __autoload(test) threw an exception of type 'Exception' in /root/php-autoload-test/php-autoload.php on line 28
-----------
PHP 5.1.0 :
-----------
object(Exception)#1 (6) {
["message:protected"]=>
string(29) "The class test does not exist"
["string:private"]=>
string(0) ""
["code:protected"]=>
int(0)
["file:protected"]=>
string(40) "/root/php-autoload-test/php-autoload.php"
["line:protected"]=>
int(11)
["trace:private"]=>
array(1) {
[0]=>
array(4) {
["file"]=>
string(40) "/root/php-autoload-test/php-autoload.php"
["line"]=>
int(18)
["function"]=>
string(10) "__autoload"
["args"]=>
array(1) {
[0]=>
string(4) "test"
}
}
}
}
Conclusion : à partir de PHP 5.1, OUI vous pouvez thrower des exceptions depuis une fonction __autoload(), et je sens que ça va en ravir plus d’un.
En fait, il semblerait que ce problème de documentation soit connu, mais il est enfoui dans les commentaires du rapport de bug concerné (#31102) :
helly has introduced a way to catch the exceptions, so it needs to be documented.
En effet, il serait temps !
Dedibox : modification des CGV
Arnaud vient d’annoncer, comme promis quelques jours plus tôt, une modification des CGV.
La nouvelle version est dénuée du fameux paragraphe qui a fait objet d’une longue controverse un peu partout :
Retrais :
L’usager s’engage à utiliser les Services à des fins personnelles. L’utilisation des Services à d’autres fins que personnelles, ainsi que la mise à disposition au profit des tiers, à titre gratuit ou onéreux, et la recommercialisation des Services sans autorisation écrite de DEDIBOX sont strictement prohibées.
FreeBSD et Windows sur une Dedibox
Deux nouvelles particulièrement cocasses viennent de tomber :
- Installer FreeBSD sur une Dedibox. Non, ce n’est pas une distribution fournie avec l’offre, et ça s’installe avec le système rescue. On savait qu’il était théoriquement possible d’en installer une, maintenant on a la confirmation.
- Installer Windows 2000 sur une Dedibox. Notez que ça n’a aucun intérêt, mais l’exploit technique mérite d’être signalé. L’astuce consiste à uploader une image de Windows 2000 et à la charger dans une partition de la Dedibox. Notez que le même post signale que Solaris fonctionne également.
Maintenant, c’est confirmé, on peut TOUT faire sur une Dedibox.