X-NUCA(牛咖)联赛11月Crypto&Misc专题赛赛前--suspicious-avi的解题思路
vi 格式.用ffmpeg -i avi.avi
可以发现 copyright : http://countersite.org/images/hehehe.avi
对比两个avi
video 对比。 foremost avi.avi
foremost hehehe.avi
sound 对比 ffmpeg -i hehehe.avi hehehe.wav && ffmpeg -i avi.avi avi.wav
发现图像上的不一样
然后使用下述脚本逐帧分析
#!/bin/bash
for i in *.png; do
compare output_avi/$i output_hehehe/png/$i compared/compared_$i
done
得到异常图片 compared_00057406.png
用python 脚本分析下
#!/usr/bin/env python import sys import cv2 #./h4ck1t_pepapig.py 468 rgb def recompose(lsb_str, byte_len): byte_lst = [] nwstr = "".join([ chr(int(lsb_str[i:i+byte_len],2)) for i in range(0,len(lsb_str),byte_len) ]) return str(nwstr) def compare(maxpx, ch): im0 = cv2.imread("vidz.png") im1 = cv2.imread("vidz-orig.png") line, col, band = im0.shape bit_str = "" for x in range(0, line): for y in range(0,col): for z in ch: if x*y < maxpx: print "Original ("+str(x)+" "+str(y)+" "+str(z)+") => "+str(im1[x,y,z]) print "Modified ("+str(x)+" "+str(y)+" "+str(z)+") => "+str(im0[x,y,z]) bit_str += str( im1[x,y,z] - im0[x,y,z]) else: return bit_str maxpx = int(sys.argv[1]) chan = { 'r' : 2, 'g' : 1, 'b' : 0, 'a' : 3 } ch = [ chan[sys.argv[2][i]] for i in range(0,len(sys.argv[2]))] bit_str = compare(maxpx, ch) print recompose(bit_str,8)
得到答案
.+[----->+++<]>+.[-->+<]>.--[->++<]>-.++++++++.-[-->+<]>----.[--->++<]>--.+++++++.-[->+++++<]>.[--->+<]>----.[-->+<]>-----.---.-[----->+<]>--.---------------.++++++++++++++.+++.[-->+<]>----.----[->++<]>-.+++++++++.[-->+<]>.--[->++<]>-.++++++++.-[-->+<]>--.-[->++<]>.>--[-->+++<]>.
经过搜索。这个是
brainfuck 加密。解密得到答案