~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

Mozilla pète les plombs et veut obliger tous les sites à passer en HTTPS

Pourtant on n'est pas le 1er avril…

Tout est marqué sur le blog de Mozilla : ils veulent supprimer progressivement des fonctionnalités du navigateur Firefox pour les sites en HTTP (en clair), au profit des sites en HTTPS (chiffré). Par exemple ça sera la suppression du support Javascript, ou des images en SVG, puis des images tout court, avant de supprimer tout support pour le protocole HTTP. Si vous ne voulez pas vous voir bridé il faudra utiliser le protocole HTTP2 qui ne fonctionne qu'en HTTPS (chiffré). Une idée à l'évidence complètement stupide (déjà que HTTP2 est une horreur, mais c'est une autre histoire).

Évidemment, comme Mozilla ne fait que suivre Google, l'idée vient en fait de Chrome.

En 5 minutes je pense déjà à des tonnes d'arguments pour exprimer à quel point cette idée est profondément stupide :

  • le système des CA SSL est complètement cassé, de par sa conception-même. Ça fait des années que tout le monde dans le monde de la sécurité dit que c'est de la merde. Plutôt que de nous emmerder avec des rustines inutiles comme "letsencrypt" ou à recopier l'UI de Chrome, Mozilla ferait mieux de réfléchir à une alternative crédible pour qu'HTTPS devienne enfin quelque chose de sécurisé et accessible à tout le monde, pas seulement aux riches occidentaux.
  • un certificat ça coûte des thunes. Oui oui StartSSL, letsencrypt machin. Non je suis pas d'accord, car c'est un monopole (bientôt duopole), si demain ils décident de faire payer c'est foutu. De plus quand on veut des sous-domaines c'est tout de suite très chiant (et cher). Et quand on veut un wildcard, c'est là que ça devient marrant. Enfin ou pas.
  • ça veut dire que tous les gens qui n'ont pas de thune vont aller faire certifier leur site auprès d'une autorité centralisée (startssl ou letsencrypt, whatever). Big brother toussa. Si un jour ces autorités n'acceptent plus votre site parce que vous êtes un index de bittorrent, un média alternatif ou autre truc qui dérange, vous êtes bien dans la merde. Et combien de temps avant qu'un CA ne soit obligé par la justice à la demande de la RIAA ou autre à révoquer le certif d'un site ?
  • la gestion des certificats c'est chiant, grave. J'ai une dizaine de domaines en HTTPS à gérer, tous les 6 mois il faut que je renouvelle les certificats. A chaque fois je finit par en enlever un, parce que c'est super chiant. Une fois que j'ai mis en place un truc, je veux que ça marche sans avoir à y revenir tous les ans ou tous les 6 mois, je suis pas admin sys, je fait ça sur mon temps libre. Et moi je suis un geek, je kiffe jouer de la config apache (enfin pas trop quand même), mais pour le péquin lambda, qui aura le courage d'aller se faire chier à faire un certif, le mettre à jour etc.
  • Mozilla devient CA, et juste après parle de ne plus faire que du httpS. Tiens tiens, un business plan sous le coude ?
  • C'est un sacré frein à la création de site web et à l'amateurisme (au sens noble), la barrière d'entrée sur le web devient encore plus haute

Bref à mon avis Mozilla ne voit le web que comme un conglomérat de grosses boîtes et gros sites avec des budgets dédiés à tout et n'importe quoi, et n'en à rien à faire des millions de particuliers, assos, bénévoles et enthousiastes du monde entier qui font du web ce qu'il est : un gros bordel collaboratif, la plus belle invention de l'humanité.

Ce que veux Mozilla c'est un web propre et beau, et sécurisé (parce que bon c'est bien connu le SSL c'est la sécurité, ah ah), et tous ces gentils bidouilleurs ne sont qu'un obstacle à la productivité et à son objectif de marché. Donc il cherche à les éliminer. Si vous ne me croyez pas regardez un peu la modification du traitement des certificats auto-signés avec le temps… c'est devenu un enfer, et ce n'est pas pour "la sécurité".

Oui je suis énervé, mais même pas surpris, après avoir supprimé le "http://" de l'URL ce n'est qu'une étape logique, que j'avais déjà annoncée il y a quelques années. Ce qui m'énerve c'est d'avoir raison et de voir que Mozilla, le seul représentant du web non commercial (enfin logiquement) est en réalité un vendu et ne fait plus rien pour la communauté, mais ne travaille que pour son intérêt propre.

Bref encore une fois je répète mon refrain habituel : mais crève donc Mozilla, crève donc, tu fera de la place pour quelque chose d'autre. Et cette chose ne peut pas être pire que Mozilla.

Edit : un autre souci c'est OCSP, une techno qui permet au navigateur de demander au CA si le certificat est bon et encore valide. En théorie c'est super. En pratique ça veut dire que tout le monde qui visite un site fait une requête au CA, qui sait donc qui visite le site. Non seulement ça peut être un gros business, mais en plus c'est une sacré atteinte à la vie privée (et on peut risquer sa vie dans un pays non démocratique, si on va visiter un site interdit…). Dans HTTP, aucun mouchard n'envoie à un prestataire tiers le nom de tous les sites que vous visitez…

Cartographie générale et de randonnée

J'ai mis en ligne un outil de cartographie qui me manquait personnellement : map.kd2.org

Il permet de visualiser les cartes en ligne de pas mal de fournisseurs (Nokia Here, OSM, OpenCycleMap, LINZ en Nouvelle-Zélande, IGN, etc.), charger des traces GPX (gestion des tracés, routes et POI, avec couleur différente pour chaque tracé quand il y en a plusieurs dans le fichier), profil altimétrique, affichage des coordonnées d'un point sur la carte en notation "simple" (genre -37 44 6 N 144 55 50 E), recherche d'adresse et ajout de marqueurs sur la carte.

On peut ensuite exporter la carte sous forme de widget pour mettre sur son site web, elle contiendra les tracés GPX et les marqueurs qu'on a ajouté. Un exemple sur mon journal : Détour(s) d'Australie et d'ailleurs

Fonctionnalités prévues dans le futur : recherche d'itinéraire entre 2 points (vélo, voiture, piéton), édition et création de tracés GPX, export en GPX des données de la carte, impression de la carte et de l'itinéraire.

Le plus intéressant à mon avis est du côté technique : rien n'est stocké sur le serveur, donc aucune donnée personnelle n'est envoyée à travers internet, tout est fait depuis votre ordinateur en javascript.

Sandisk Sansa Clip Sport : enlever la limitation du volume et corriger le tri des répertoires

Le Sansa Clip Sport est un survivant d'une époque révolue (hélas) : un nouveau baladeur MP3 petit, léger et autonome dans un monde de smartphones inutiles, lourds, fragiles, encombrants et qui demandent à être constamment connectés à une prise électrique.

Ce nouveau baladeur de Sandisk gagne en autonomie par rapport aux précédents Clip Zip et Clip+, mais perd quelque chose de précieux : le support par Rockbox. C'est un firmware alternatif pour un grand nombre de baladeurs qui offre de nombreuses fonctionnalités, une plus grande autonomie, la lecture de tous les formats audio, et Doom !

Dommage du coup de perdre Rockbox, à cause d'une puce trop faible pour faire tourner autre chose que le firmware original, qui se retrouve d'ailleurs lui-même sérieusement handicapé, avec notamment une limite à 2000 fichiers indexés dans la base de données des tags (soit 8Go, alors que le baladeur peut utiliser des cartes microSD de 64 Go et plus), et des problèmes de tris dans les répertoires.

En effet comme un vulgaire baladeur de supermarché, le Clip Sport tri les fichiers dans l'ordre où ils sont déposés sur la partition FAT32, et non pas par ordre alphabétique. Les albums sont donc désordonnées, du genre la piste 15 suivie de la piste 3, suivie de la piste 22, etc. Une solution à ça :

$ sudo apt-get install fatsort
$ fatsort /dev/sdX1

ou sdX1 est la partition du baladeur ou de la carte microSD. Et hop c'est réglé. C'est un peu gênant, mais au moins ça règle le souci.

Un autre souci sur les baladeurs Sansa c'est la limitation du volume de sortie à cause des lois européennes, du coup on n'entend rien (et non je ne suis pas encore sourd). Une solution simple : dans le baladeur aller dans réglages, réglages système et réinitialiser (pas formater), et quand il vous demande le pays indiquez "reste du monde". Et hop vous voilà avec le volume débridé et plus de message chiant sur l'écoute à plein volume bla bla bla.

Remove DRM from Kindle AZW files

When you buy a book for your Kindle on Amazon, it comes with a special surprise: DRM. Yes we are in 2015, every book ever published is already available everywhere to download for free, but you still get this stupid thing that basically pisses everybody and forbids to just use the stuff you paid for. Unbelievable. They will never learn.

So, what do you do when you accidentally bought a DRM e-book? First you swear you'll never do the same mistake again, and next time you'll just download the book from The Pirate Bay, it will be faster, easier and you will be able to read the book without wondering why the hell did you pay for a file that you can't read. When that is done, you will actually get rid of the DRM following this simple procedure:

  1. Power up your Kindle, switch back to the Kindle UI (if you have installed Duokan, which I advise you to do strongly, it's great!), go to the system settings and note your Kindle Serial Number.
  2. Download the file from Amazon ("Manage Your Content", click on the button with three dots next to the book and click "Download and transfer from USB")
  3. Download the DeDRM plugin for Calibre here.
  4. $ unzip DeDRM_plugin.zip
  5. $ python k4mobidedrm.py -s YOUR_KINDLE_SERIAL_NUMBER Stupid_encrypted_DRM_book.azw ./

That's it. A new file called Stupid_encrypted_DRM_book_nodrm.mobi will be in the directory. Delete the old one.

What was this DRM thingy for?

HOWTO: Using a removable USB key or SD card as an encryption key with EncFS

For this HOWTO you will need the encfs package installed (Debian and Ubuntu).

Create an empty partition on the disk

We still want to be able to use the key to store some documents, and that way it will just look like an ordinary USB key. So we have to create an empty filesystem on the removable USB key:

# USB_KEY=/dev/sdX
# fdisk $USB_KEY

Command (m for help): o
Building a new DOS disklabel with disk identifier 0xXXXXXX.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
Using default value 1
First sector (2048-1974271, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-1974271, default 1974271): 1974270

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): b
Changed system type of partition 1 to b (W95 FAT32)

Make sure that the last sector of the partition is minus one the last one of the disk. Here the last sector of the disk is 1974271, so (1974271-1) = 1974270.

Now write the partition table:

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: If you have created or modified any DOS 6.x
partitions, please see the fdisk manual page for additional
information.
Syncing disks.

Now format the new partition:

# mkfs.vfat -F 32 -n Documents ${USB_KEY}1

Random "hidden" passphrase

Now comes the part of the crypto stuff. Create a random passphrase:

# dd if=/dev/urandom bs=1 count=256 > passphrase.bin

Write it to the end of the USB key:

# USB_SEEK=$(($(blockdev --getsize64 $USB_KEY)-256))
# dd if=passphrase.bin of=$USB_KEY bs=1 seek=$USB_SEEK

This way the passphrase won't be stored in a filesystem but directly on the disk, where overwriting it by mistake will be a bit more difficult. It's also a bit harder for an attacker to know that the disk actually contains an encryption passphrase (but just a bit).

You can check that the passphrase was correctly written to the disk with:

# sha1sum passphrase.bin; dd if=/dev/sdg bs=1 skip=$USB_SEEK count=256 2> /dev/null | sha1sum

The two SHA1 sums should match.

At this step I advise you to backup your passphrase, maybe by encoding it using Bubble Babble, printing it and hiding it somewhere. Or just put it in a wallet manager like KeePassX. As you wish.

Encrypted directory creation

If you already have an encrypted EncFS directory, you can skip to the next step. If you don't have an encrypted EncFS directory already here is how you can create one:

$ encfs ~/encrypted ~/decrypted
Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?>

Press p and Enter.

Paranoia configuration selected.

Configuration finished.  The filesystem to be created has
the following properties:
Filesystem cipher: "ssl/aes", version 3:0:2
Filename encoding: "nameio/block", version 3:0:1
Key Size: 256 bits
Block Size: 1024 bytes, including 8 byte MAC header
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File data IV is chained to filename IV.
File holes passed through to ciphertext.

-------------------------- WARNING --------------------------
The external initialization-vector chaining option has been
enabled.  This option disables the use of hard links on the
filesystem. Without hard links, some programs may not work.
The programs 'mutt' and 'procmail' are known to fail.  For
more information, please see the encfs mailing list.
If you would like to choose another configuration setting,
please press CTRL-C now to abort and start over.

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

New Encfs Password: 

Enter (twice) a temporary password as we are about to change it. So enter something like abcd or stuff.

Changing the EncFS password

Now we will to change the current password of the encrypted directory to the passphrase we generated and wrote to the USB key before.

$ echo -n "Enter current password: " && read -s PASSWORD && (echo $PASSWORD && base64 -w 0 passphrase.bin) | encfsctl autopasswd ~/decrypted

Type in your current password (the temporary one if you just created the encrypted directory at the previous step), hit Enter, and then EncFS will change the password to the one contained in the file passphrase.bin, encoded with Base64. This encoding is useful as EncFS expects a one-line password and

Now unmount the encrypted directory so that we can try if mounting it with our key works:

$ fusermount -u ~/decrypted

Let's try if we can mount our encrypted directory with our key:

$ base64 -w 0 passphrase.bin | encfs -S ~/encrypted ~/decrypted

And it should work.

Real-word test: mount script

And finally we are ready to mount our encrypted directory using our USB key and this simple script:

#!/bin/sh

if [ "$1" = "" -o "$2" = "" ]
then
	echo "Usage: $0 rootDir mountPoint"
	exit 0
fi

mountpoint -q "$2" && echo "$1 is already mounted" && exit 1

echo "Trying to get the key from USB keychain ..." >&2

for SFS in /sys/block/sd*; do
	DEV=`basename $SFS`
	if [ 0`cat $SFS/removable` -eq 1 -a 0`cat $SFS/size` -gt 1 ]
	then
		SKIP=$((512*$(cat /sys/block/${DEV}/size)-256))
		KEY=`dd if=/dev/${DEV} bs=1 skip=$SKIP 2> /dev/null`

		echo "> Trying device: $DEV ..." >&2
		echo -n "${KEY}" | base64 -w 0 | encfs -S "$1" "$2" \
			&& echo "Encrypted directory mounted from keyfile" && exit 0
	fi
done

echo "FAILED to find suitable USB keychain ..."
exit 1

The script is simply trying to use all the removable devices as decryption key for encfs. To use it you just have to run:

$ mount_encfs_usb.sh ~/encrypted ~/decrypted
Trying to get the key from USB keychain ...
> Trying device: sdg ...
Encrypted directory mounted from keyfile

And that's the end of this HOWTO :)

This was inspired by this StackOverflow thread and How to setup passwordless disk encryption.

Bubble Babble CLI encoder / decoder

At my own surprise there is no CLI tool to encode or decode a string to and from the Bubble Babble binary encoding. That's a shame as this encoding would be much more useful than Base64 for exchanging binary data orally or on paper.

So here is one quick PHP script based on my own PHP5 BubbleBabble library to do that: bubblebabble.php

Usage is pretty simple:

$ bubblebabble.php hello.txt
xifok-mirid-bodik-nemyg-temyl-dipyd-cedyx

$ bubblebabble.php -d - <<< xifok-mirid-bodik-nemyg-temyl-dipyd-cedyx
Oh, Hi Mark!

$ fortune | bubblebabble - > encoded.txt

$ bubblebabble -d encoded.txt 
Big book, big bore.
		-- Callimachus

Undocumented PHP/SQLite3 features: openBlob, readOnly, enableExceptions

The SQLite3 module of PHP has some undocumented features that you may discover when you are reading the source code (yes that's what I do when I get bored, nothing is more fascinating than reading source code, really, you should try it).

Sqlite3Stmt::readOnly(void)

Available from PHP 5.3.5.

This method returns true if a statement doesn't change the database. This is useful sometimes, like to make sure that a template engine is only reading data and not altering the databse. Another use would be providing a way for the user to make queries on the database to select any data he wants (yes you wouldn't want this to be available to any user).

One example to check if there is no injection:

$_GET['id'] = 42;
$statement = $db->prepare('SELECT * FROM cooking_recipes WHERE id = '.$_GET['id'].';');
var_dump($statement->readOnly());
// bool(true)

And if there was an injection:

$_GET['id'] = 'NULL; DROP TABLE nuclear_warheads_locations;';
$statement = $db->prepare('SELECT * FROM cooking_recipes WHERE id = '.$_GET['id'].';');
var_dump($statement->readOnly());
// bool(false)

Of course you NEVER should insert any PHP variables straight in a SQL query. Instead you should use bindValue:

$statement = $db->prepare('SELECT * FROM cooking_recipes WHERE id = :id;');
$statement->bindValue(':id', $_GET['id']);

SQLite3::openBlob(string table, string column, int rowid [, string dbname])

Another undocumented feature of the PHP SQLite3 object, available since 2009, is openBlob. Basically it's a function that will return a stream pointer to a blob value in a table. Very very useful when you are dealing with files stored in a SQLite3 database.

Source code says:

proto resource SQLite3::openBlob(string table, string column, int rowid [, string dbname])
Open a blob as a stream which we can read / write to.

But despite that it's not possible to write to the blob, only reading is implemented. The blob are always opened as read-only by SQLite, so if you try to write to the stream, nothing will be saved to the database.

One example of use:

$db = new SQLite3('files.sqlite');
$db->exec('CREATE TABLE files (id INTEGER PRIMARY KEY, filename TEXT, content BLOB);');

$statement = $db->prepare('INSERT INTO files (filename, content) VALUES (?, ?);');
$statement->bindValue('filename', 'Archive.zip');
$statement->bindValue('content', file_get_contents('Archive.zip'));
$statement->execute();

$fp = $db->openBlob('files', 'content', $id);

while (!feof($fp))
{
    echo fgets($fp);
}

fclose($fp);

You can also seek in the stream. This is pretty useful for saving large files from the database too, this way you can use stream_copy_to_stream, it will be faster and more memory-efficient than dumping the file in memory before writing it to the disk.

Please note that openBlob() won't work on VIRTUAL FTS4 compressed tables (but no problem with non-compressed virtual tables).

SQLite3::enableExceptions([bool enableExceptions = false])

Available since 2009 (PHP version ??).

If set to true, then errors will be returned as exceptions instead of errors.

Ceci n'est pas une suite – Ginger Snaps Unleashed

Il ne faut pas se méprendre en se limitant à la jaquette DVD de l'édition française qui repompe Underworld et qui change le titre du film de "Ginger Snaps Unleashed" à "Ginger Snaps Resurrection", cette suite n'en est pas réellement une car en restant dans le thème et avec Brigitte du premier opus, le ton est complètement différent. Il ne faut donc pas s'attendre à voir la même chose que Ginger Snaps mais en plus fort, plus vite, plus mieux, c'est simplement un film différent.

On retrouve ici la talentueuse Emily Perkins et l'excellente Tatiana Maslany qui livrent une prestation extraordinaire dans des registres très différents. Le scénario prend un tournant inattendu avec le rapport entre lycanthropie et addiction aux stupéfiants et envoie le personnage principal dans un hôpital étrange et surréaliste, à moitié abandonné, rempli d'infirmiers corrompus, où elle rencontrera Ghost (Tatiana Maslany), une gamine totalement déjantée.

L'ambiance est campée et nous emmène dans un film d'épouvante relativement dérangeant et bien ficelé, de la musique à la réalisation en passant par les effets spéciaux « old school » (pas de CGI) jusqu'à une fin complètement tarée.

Daft clones, aux chiottes ! <spoil />

Un groupe de djeunz débarque sur une île au milieu d'un lac pour faire du camping. Au menu du groupe un blondinet à barbiche qui se la joue DiCaprio, sa copine blonde, et leur pote black qui va partir en Afghanistan jouer à boum-boum-pan-pan. En tant que quota ethnique, le black n'oubliera bien sûr pas de rajouter "man!" à la fin de chacune de ses répliques, et ne servira pas à grand chose pendant les trois quarts du film.

Une fois arrivés, la demoiselle du groupe, trouvant que déféquer en pleine nature n'est pas très glamour, se dirige en direction d'un riche manoir au milieu de l'île, qui s'avère vide, et devant la porte se saisit de la clé sous le paillasson, entre, se balade dans la maison, et va déféquer dans les toilettes tout en savourant un bouquin piqué dans la bibliothèque. Bon déjà ça donne le ton, venir chier chez vous pendant que vous êtes partis faire les courses, ça montre un certain respect de la jeunesse. Mais vous allez voir que le film n'a pas finit de vous parler de chiottes.

Le soir, le couple blond est en train de roucouler sous la tente (leur pote doit dormir à la belle étoile, après tout faut pas trop se mélanger, et puis c'est un militaire il peut bien vivre à la dure), quand Tracy (la fille blonde) joue le scénario du "pas ce soir chéri j'ai la migraine". Craig, un peu déçu, se retourne en gromelant, quand Derek (le black) débarque en criant "vite vite il faut sortir y'a de l'orage". Oui tout à fait, quand vous faites du camping, et qu'il pleut averse avec de gros éclairs, il faut sortir de la tente en courant avec son sac à dos. Il doit en faire un beau de militaire celui-là quand même. Bref, passons sur cette incohérence pour suivre nos héros se diriger en courant vers le manoir, où ils entrent. Ici encore Tracy se révèle être une garce qui non contente de chaparder de la bouffe dans le frigo, se prends une douche, où Craig la rejoint et celle-ci le rembarre derechef sur le mode "nan mais tu fait quoi là ho !". Suite à quoi, tout le monde va joyeusement utiliser les toilettes, parce que ho hein quitte à squatter illégalement une maison autant laisser la cuvette relevée en sortant, on n'est pas punk pour rien !

Après une nuit de sommeil, pendant que nos héros se réveillent dans un bon lit douillet, la tente de ces campeurs du dimanche flotte sur le lac, ce qui effectivement nous en dit long sur leur QI. Mais oh du bruit réveille Craig, il regarde par la fenêtre, ce sont les propriétaires du lieu qui reviennent des courses, mais en hors bord (notez que pour se garer sur le parking du Carrouf c'est pas super facile). Vite, c'est la panique, nos trois jeunes se précipitent récupérer leurs affaires et effacer les traces de leur visite, et se cachent à la cave. Là, ils voient deux cadavres empaquetés dans du plastique, ils veulent appeler du secours, mais pas de chance leur iPhone ne capte pas (ils doivent être chez Free mobile). Pendant ce temps-là les proprios se rendent compte que quelqu'un s'est aventuré dans leur maison ("oh oh oh quelqu'un a dormi dans mon lit") et tendent une embuscade géniale consistant à attendre à la porte de la cave avec un couteau. Nos héros sortent de la cave et Tracy se fait immédiatement capturer. Sous la menace de lui trancher la gorge, les deux garçons acceptent, sans avoir l'air plus bouleversés que ça, de transporter les cadavres sur la plage et de les enterrer.

Une fois le trou creusé, les trois jeunes sont invités à rejoindre le trou, et c'est là qu'ils se rendent compte que les cadavres ont le même visage et corps que les deux propriétaires-méchants. Enfer, ce sont des clones méchants qui ont tué les originaux ! Et là, retournement de situation, les deux méchants clones se font mettre à terre par trois gentils-clones des trois jeunes (qui se baladent à poil).

De là pas grand chose, la clone de Tracy va séduire le vrai Craig, et le clone de Craig va séduire la vraie Tracy, pendant que le vrai Derek se barre chercher du secours (il reviendra à la fin du film car de l'autre côté du lac il aura croisé une voiture avec deux jumeaux dedans, donc il a eu peur ce neuneu et est revenu... au point de départ). Forcément ça couche ensemble, pendant que quand même on se demande, autour d'un Scrabble (si si), si ces gentils-clones sont vraiment gentils et pas de méchants qui feintent leur gentillesse (non pas possible !). Le vrai Craig et la vraie Tracy découvrent que l'île était auparavant occupée par un chercheur en physique nucléaire et tombent sur son laboratoire secret, où ils découvrent que son projet était de cloner les gens, mais que ça a mal tourné bla bla bla. Mais au fait d'où sortent-ils ces clones ? Comment ont-ils eu accès à l'ADN et les souvenirs des originaux ? Et bien de la fosse septique ! Et oui c'est quand nos héros ont fait caca que leur ADN a été transportée jusqu'à la fosse septique qui avait été mélangée avec de la potion magique nucléaire. Donc en fait si on suit le raisonnement la fosse septique devrait être en train de créer des millions de clones de mouches, asticots et autres vers de terre mais non elle est intelligente elle ne clone que les humains. Pratique.

Du coup, après de nombreuses péripéties inutiles (le labo ne servira jamais à rien fait à part expliquer à moitié d'où sortent ces clones tous nus), Derek et Craig tuent leurs clones, pendant que Tracy soulève une rame sur son clone et... noir. Inutile de vous dire quel sera le clone survivant que les originaux emmèneront avec eux en croyant que c'est l'original... Et voilà c'est la fin.

Et merde, j'ai perdu 1h30 de ma vie à me faire chier devant ce navet, où les acteurs, en plus de chier dans le film, se font chier comme des rats morts. Au secours, tirez la chasse !

Notes rapides... ↓