X-NUCA(牛咖)联赛11月Crypto&Misc专题赛赛前--suspicious-avi的解题思路

发表于:2016-11-18 10:00:00 来源:  合天网安实验室 阅读数(0人)

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 加密。解密得到答案

相关新闻

大家都在学

课程详情

网络安全漫谈

课程详情

信息安全基础

课程详情

网络安全基础