Description
Click on the different color.
Resolution
Comme la description l’indiquait, il fallait cliquer sur le carré qui avait une couleur différente des autres.
Ca a commencé doucement avec 2×2 blocs, résolvable humainement.
Et à chaque clic, la grille s’agrandissait et les couleurs devenaient de moins en moins distinguables.
Puis (ça commence à être tendu) :
Voyant le nombre de possibilités s’accroitre, nous avons alors codé un outil pour résoudre ce challenge :
<?php
$page = 'http://ctfquest.trendmicro.co.jp:43210/click_on_the_different_color';
$border = 3;
while (true) {
$data = file_get_contents($page);
if (preg_match('#ocation\.href=\'/(.+?)\?#', $data, $regs)) {
$dest = $regs[1];
if (preg_match('#<img src="(.+?)"#', $data, $regs)) {
$img = imagecreatefrompng('http://ctfquest.trendmicro.co.jp:43210'.$regs[1]);
if ($img) {
$bordercolor = imagecolorat($img, 0, 0); // Couleur de la bordure
$colorref = imagecolorat($img, $border+1, $border+1); // Couleur du bloc après la bordure
for ($i = 1; true; ++$i) { // Check de la taille du bloc
if (($color = imagecolorat($img, $border+$i, $border+1)) == $bordercolor) { // Si la couleur n'est pas celle de la bordure
$blocksize = $i; // Taille d'un bloc
$blocs = (imagesx($img)-$border)/($blocksize+$border); // Nombre de blocs
echo "Size: $i\nRef: $colorref\nColor: $color\nBorder: $bordercolor\nBlocs: $blocs\n"; // Debug
for ($x = 0; $x < $blocs; ++$x) { // Recherche du bloc différent
for ($y = 0; $y < $blocs; ++$y) {
$rx = ($blocksize+$border)*$x+$border+1;
$ry = ($blocksize+$border)*$y+$border+1;
$test = imagecolorat($img, $rx, $ry); // Couleur du bloc à tester
if ($test != $colorref) { // Si couleur différente de la référence, bingo ?
echo "$rx / $ry : $test : $colorref\n"; // Debug
$page = 'http://ctfquest.trendmicro.co.jp:43210/'.$dest.'?x='.$rx.'&y='.$ry;
continue 4;
}
}
}
break;
}
}
} else {
break;
}
}
} else {
echo $data;
break;
}
}
Au bout de quelques secondes, jusqu’à arriver à 80×80 blocs à analyser, nous obtenons le flag !
Le flag est : TMCTF{U must have R0807 3Y3s!}

[Trend Micro 2015] [Progamming 100] Write-Up