美文网首页
蓝盾杯-base64

蓝盾杯-base64

作者: 2mpossible | 来源:发表于2017-10-28 15:22 被阅读0次

    之前有想过是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()
    

    相关文章

      网友评论

          本文标题:蓝盾杯-base64

          本文链接:https://www.haomeiwen.com/subject/cmlspxtx.html