栅栏密码优化


在解Bugku逆向 RE_Cirno的时候碰到了栅栏密码与字符数不成倍数的情况,找到千千秀字-栅栏密码加密解密可以解,但由于是在服务端解密的,于是尝试用python写了一个自动填充字符的栅栏密码

推导过程

先写随便一串相同原始长度的flag,剩下不够的用 * 补充

abcdefghijklmnopqrstuvwx***

然后手动分割

abcdefghi
jklmnopqr
stuvwx***

从上到下重新排列

ajs
bkt
clu
dmv
enw
fox
gp*
hq*
ir*

再合并

ajsbktcludmvenwfoxgp*hq*ir*

发现最后几位每个两位添加了一个 * ,于是可以把flag分割成这样

fotlleas0gvw{30Cr}ly*rc*nu*

Python解密

用python写一个加解密程序,也适用于所有栅栏密码的加解密

def decode(flag,num):
  length = len(flag)  # flag的长度
  lines =  length // num # 判断共有几层并减一
  remainder = num * (lines + 1) - length  #相差的数量

  # 补全flag
  result = flag[:length-lines*remainder]
  for i in range(remainder-1,-1,-1):
          result += flag[length-(i+1)*lines:length-i*lines] + '*'

  # 还原flag
  lines += 1
  arr = [result[i:i+lines] for i in range(0,len(result),lines)]
  flag = ''
  for i in range(len(arr[0])):
    for j in arr:
      flag += j[i]
  return flag[:length]

def encode(flag,num):
    from math import ceil
    length = len(flag)
    lines = ceil(length / num)
    arr = [flag[i:i+num] for i in range(0,lines * num,num)]
    flag = ''
    for i in range(len(arr[0])):
        for j in arr:
            try:
                flag += j[i]
            except:
                pass
    return flag

文章作者: Kevin。
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kevin。 !
评论
 上一篇
[MISC] 俄罗斯套娃 [MISC] 俄罗斯套娃
给学弟们瞎出的一道misc题,为的就是为难鼓励他们 附上下载链接:http://file.dsb.ink/俄罗斯套娃.zip 包含的内容对各类文件头的熟悉程度 使用编程辅助解题 修改png文件的宽高 1.解压缩包先解几个发现有文件名有规律的
2020-05-14
本篇 
栅栏密码优化 栅栏密码优化
在解Bugku逆向 RE_Cirno的时候碰到了栅栏密码与字符数不成倍数的情况,找到千千秀字-栅栏密码加密解密可以解,但由于是在服务端解密的,于是尝试用python写了一个自动填充字符的栅栏密码 推导过程先写随便一串相同原始长度的flag,
2020-05-14
  目录