Steganography就是隐写术的意思,整理一下相关题目。
http://utilitymill.com/edit/Steganography_Decode
0 140 0 0 0 35 0 0 0 80 0 0 110 30 70 150 0 95 0 0 0 0 0 0 0 155 100 170 130 0 0 0 135 175 85 145 0 75 165 0 5 115 105 45 25 10 125 90 180 20 0 160 65 15 0 120 0 0 0 0 50 55 40 60很容易就看出,这些数都可以被5整除,我们可以整除一下试试
0 28 0 0 0 7 0 0 0 16 0 0 22 6 14 30 0 19 0 0 0 0 0 0 0 31 20 34 26 0 0 0 27 35 17 29 0 15 33 0 1 23 21 9 5 2 25 18 36 4 0 32 13 3 0 24 0 0 0 0 10 11 8 12至于这里看到规律就要敢于尝试,说不定就是正确思路。
竖着看(5,0) (2,0) (5,7) (2,7) 横着看(0,2) (0,5) (7,2) (7,5)
Find the flag. Flag is in the form of ASIS_X which X is not a MD5 hash
base64 : QVNJU18= ascii : 65 83 73 83 95 UTF-7 :+AEEAUwBJAFMAXw-
Base64 : QVNJU19GTEFHM2dxaXpiS0RPWkY5b3hLejZI Flag : ASIS_FLAG3gqizbKDOZF9oxKz6H
compare 1.png 2.png 3.png
http://utilitymill.com/utility/Steganography_Decode源码可以在这个网站看到,不过加密方式就不研究了,解码出来是一个压缩包,但是需要密码。
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIEknbSBmYWN0b3JlYWwsIG1lbWJlciBvZiBBU0lTIENURiB0ZWFtIGFuZCAqCiogbWFuYWdlciBvZiBBRU9JIENURiEgWW91IGNhbiBjb250YWN0IG1lICAgICoKKiB3aXRoIGN0ZkBhc2lzLWN0Zi5pci4JCSAgICAgICAgICAgICAqCiogSSBsb3ZlIEZhdGltYWggOikgICAgICAgICAgICAgICAgICAgICAgICAgICoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKbase64解压之
********************************************** * I'm factoreal, member of ASIS CTF team and * * manager of AEOI CTF! You can contact me * * with [email protected]. * * I love Fatimah :) * **********************************************这里通过上面的线索,可以猜测压缩包的密码就是
I love Fatimah :)解压之后即可得到Flag.txt
from struct import pack import binascii import string crc32 = lambda s: binascii.crc32(s) & 0xFFFFFFFF chunkname={'IHDR','cHRM','gAMA','sBIT','PLTE','bKGD','hIST', 'tRNS','oFFs','pHYs','sCAL','IDAT','tIME','tEXt','zTXt','fRAc', 'gIFg','gIFt','gIFx','IEND'} file_object = open('1.png','rb') text = file_object.read() for each in chunkname: pos=0 while (text.find(each,pos+1)!=-1): pos = text.find(each,pos+1) if (pos != -1): print "%s:0x%x" % (each,pos) if (each=='IHDR'): print " Length:0x%s" % (binascii.b2a_hex(text[pos-4:pos])) print " Chunk:0x%s" % (binascii.b2a_hex(text[pos:pos+4])) print " Width:0x%s" % (binascii.b2a_hex(text[pos+4:pos+8])) print " Height:0x%s" % (binascii.b2a_hex(text[pos+8:pos+12])) print " BitDepth:0x%s" % (binascii.b2a_hex(text[pos+12:pos+13])) print " ColorType:0x%s" % (binascii.b2a_hex(text[pos+13:pos+14])) print " ComdivssionMethod:0x%s" % (binascii.b2a_hex(text[pos+14:pos+15])) print " FilterMethod:0x%s" % (binascii.b2a_hex(text[pos+15:pos+16])) print " InterlaceMethod:0x%s" % (binascii.b2a_hex(text[pos+16:pos+17])) print " CRC:0x%s" % (binascii.b2a_hex(text[pos+17:pos+21])) #print (crc32(text[pos:pos+17])) '''if (each=='IDAT'): print " Length:0x%s" % (binascii.b2a_hex(text[pos-4:pos]))''' if (each=='PLET'): print " Length:0x%s" % (binascii.b2a_hex(text[pos-4:pos])) '''00 00 00 27 说明调色板数据长为39字节,既13个颜色数 50 4C 54 45 PLTE标识 FF FF 00 颜色0 FF ED 00 颜色1 …… …… 09 00 B2 最后一个颜色,12 5F F5 BB DD CRC校验 ''' if (each=='tEXt'): print " Length:0x%s" % (binascii.b2a_hex(text[pos-4:pos])) length = int(binascii.b2a_hex(text[pos-4:pos]),16) print " Context:%s" % (text[pos+4:pos+length+4])