蓝盾杯-base64

2017-10-28  本文已影响0人  2mpossible

之前有想过是base64隐写,但是由于没有找到base64字符串所以最后也就没做出来。今天经大佬提点找到了流量包中的base64字符串也就顺便做出来了

0x1

首先在流量包中找到隐藏在其中的base64字符串,

在这里发现一共有17个txt,每个txt里面都有base64字符串

分别把他们扣下来

然后对其中一个base64解码看看 会发现解码后还是几行base64

这就让我想到了之前看到师傅的一篇有关base64隐写的文章

https://www.tuicool.com/articles/RRr2miE

0x2

于是写脚本把全部的第一层base64先解码,再用脚本跑隐写

import base64
b64=""
for i in range(17):
    file="base64/"+str(i)+".txt"
    f=open(file)
    base=f.read()
    b64+=base
    f.close()
base64_decode=base64.b64decode(b64)
print base64_decode
with open("base64/base64.txt","w") as f1:
    f1.write(base64_decode)
f1.close()

然后再用师傅现成的脚本跑一跑出结果

def get_base64_diff_value(s1, s2):
  base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
  res = 0
  for i in xrange(len(s2)):
    if s1[i] != s2[i]:
      return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
  return res

def solve_stego():
  with open('base64/base64.txt', 'rb') as f:
    file_lines = f.readlines()
    bin_str = ''
    for line in file_lines:
      steg_line = line.replace('\n', '')
      norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
      diff = get_base64_diff_value(steg_line, norm_line)
      pads_num = steg_line.count('=')
      if diff:
        bin_str += bin(diff)[2:].zfill(pads_num * 2)
      else:
        bin_str += '0' * pads_num * 2
      res_str = ''
      for i in xrange(0, len(bin_str), 8):
        res_str += chr(int(bin_str[i:i+8], 2))
        print res_str

solve_stego()
上一篇下一篇

猜你喜欢

热点阅读