/ forensic

HSCTF - BlackSquare2

Problem: Keith found another black square! Help him find the hexadecimal flag!

File:

Dans le précédent challenge BlackSquare le flag était présent dans une des couches de couleurs de l'image : résolu avec Stegsolve.

Nous réutilisons la même technique avec cette nouvelle image et on trouve celle ci-dessous dans la couche 0 des bleus :

Cette image ne contenant que des pixels noirs et blancs on pense au binaire.
Codons un petit script qui récupère le binaire et le décode :

from PIL import Image
import binascii

white=(255,255,255)
black=(0,0,0)

im = Image.open("blueplane0.png")
x,y = im.size
binary='0b'
for i in range(y):
	for j in range(x):
		pixel = im.getpixel((j,i))
		if pixel==black:
			binary+='0'	
		else:
			binary+='1'

f=open('temp','w')
n=int(binary,2)
f.write(binascii.unhexlify('%x'%n))
f.close()

On obtient le résultat suivant :

maxisam@msi:~/Bureau/HSCTF$ cat temp
iVBORw0KGgoAAAANSUhEUgAAACAAAAAzCAIAAAB5Wp2WAAACHElEQVRYhZ1WQZIEIQiLU/P/L7uHLp0YArjNoatLEYhAcMw5MQb295H9PwaA3z8rPMJbvLhWPmB5NNiQCCvEaMQ6gDm/JmSLgy2KS0F/ynIg1m1QW62ISbACn7ikByQN7LWWOQlBce/RtIvUb825EEjNFMfYbry3sHhW0bPN1m3Z7PPPokRz+gs52Ce39q4TC4s7wOWcHPAt2WTGSpUa5Rs2jWYR4KwuC8IiSHMgIjHaPijPdldkmUr0iyvyCNoOEuUiyUp2mQkrG6tFsL4uyZGWhY1v3C95m4Oar3wfbKVoqEDAwgW9/DkEbf0Beum8COoMn2QbbAQR4xDCT5Mcw9y1WCMTKEoVdeNkEqkXR+2VfVBMRNaJ85XkqwckuuzpUA9kUrsgO5SNBmJZdrkyVyJgH8WWtP0ZyjUXCYhIcHBVN0aHQNo4T2YWWUIV2fi174FCfB9I+LwrCDrrSR/cNFpMBkKjAUgnWstFRAae7IwDO3DEaxxEbFEQVzO5pX5WLqQhOw62tOIpD0DfaE/V0gA5oqk5vGLTbL7bCVOwaTrR9g8TmXiNve1MlVXU0rVcnZxKJ1rsnXevihTBifEHC6GBNw5WxlGQJVVI7NF3C+sfr2u40rJpP9cvXnY48xZirIf+25fdjVxxUdGxlrEB+b9IMpIyzRJz6rzlIo4jy0FapixPSrIkt9nyCLIcCILY+Q5Q92zJaLUd90vtD5jcIZ2IJi9hAAAAAElFTkSuQmCC

Hmm du base64.
On modifie légèrement le script précédent :

f.write(binascii.unhexlify('%x'%n).decode('base64'))

On obtient une nouvelle image !

On réutilise notre script précédent :

from PIL import Image
import binascii

white=(255,255,255)
black=(0,0,0)

im = Image.open("temp")
x,y = im.size
binary='0b'
for i in range(y):
	for j in range(x):
		pixel = im.getpixel((j,i))
		if pixel==white:
			binary+='0'	
		else:
			binary+='1'

f=open('flag','w')
n=int(binary,2)
f.write(binascii.unhexlify('%x'%n).decode('base64'))
f.close()

Et voilà le résultat:

maxisam@msi:~/Bureau/HSCTF$ cat flag 
Congrats! The flag is: cea682feb5f4691e10905cf4c976b716292d3cd56537dc47d68879e6f7504ae53c66932a6f9ab8b7924a383d3fce85381af7fa69c3c2c72a1627314ed76c1c63