MMA CTF 2015 – Miyako – (Stega) Write-Up

Miyako : Play with colors values

Category: Stego Points: 350 Solves: 2

Dans ce challenge Miyako nous devons extraire un flag de cette image PNG.
MMA CTF 2015 Miyako Stega stego PNG

En regardant de très près l’image, on se rend compte que chaque pixels sur deux semblent avoir été légèrement altérés sur leurs valeurs RGB.
Avec le script suivant, nous allons soustraire aux valeurs RGB des pixels semblant avoir été altéré ceux du pixel non modifié précédent.
Si une des valeurs RGB est négative, nous la fixons à 255.

#!/usr/bin/php
<?

$file = $argv[1];
list($width, $height, $type, $attr) = getimagesize($file);
$im = imagecreatefrompng($file);
$i=0;$j=1; //opération effectuée sur la ligne 1. 
$img_split = imagecreatetruecolor($width/2,$height);

while($i <= ($width-1)){
	$rgb1 = imagecolorat($im, $i, $j);
	$rgb2 = imagecolorat($im, $i+1, $j);
    $cols1 = imagecolorsforindex($im, $rgb1);
    $cols2 = imagecolorsforindex($im, $rgb2);

    $r1 = $cols1['red'];
    $g1 = $cols1['green'];
    $b1 = $cols1['blue'];
	$a1 = $cols1['alpha'];
	$r2 = $cols2['red'];
    $g2 = $cols2['green'];
    $b2 = $cols2['blue'];
	$a2 = $cols2['alpha'];

	$b = $b2-$b1;
	$r = $r2-$r1;
	$g = $g2-$g1;
	if($b < 0){$b=255;}
	if($r < 0){$r=255;}
	if($g < 0){$g=255;}
	$color = imagecolorallocate($img_split, $r, $g, $b);
	imagesetpixel($img_split, $i/2 ,$j , $color);

	$i=$i+2;
}

imagepng($img_split, "sub.png");

?>

Nous obtenons alors une alternance de pixel blanc et jaune pour la ligne 1.
MMA CTF 2015 Miyako Stega RGB extraction

Blanc = 0
Jaune = 1
Ce qui nous donne la chaine suivante :
00110010011000100111110101001010010000110110111101101110011001110111
00100110000101110100011110100010000100001010010001100110110001100001
01100111001000000110100101110011001000000100110101001101010000010111
10110010110100101101001011010101001001000111010000100010110100101101
010000100101001001000111001011010011000101100001

Convertie en ASCII nous obtenons :
2b}JCongratz!
Flag is MMA{—RGB–BRG-1a

Le Flag se répète sur toute l’image, il faudra extraire au minimum une autre ligne pour avoir le flag en entier :
MMA{—RGB–BRG-1a02f42b}

Leopoldine

Leave a Comment

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *