# 主函数
思路很好理解,将输入的 flag 进行三次 encode 然后和 Str2 对比,一致则正确,我们分别看一下三个 encode 的作用
# encode_one
在 encode_one 中有一个 alphabet,其实就是编码表,很明显就是 base64 哈哈哈,所以这一个函数的作用就是给输入的 flag 进行一次 base64 编码
# encode_two
这一步是将 base64 编码后的 flag 进行一次分组,strncpy 函数的作用,以第一个为例,是将编码后的 flag 的 26 位开始数 13 个复制到 a3,也就是 26 到 39,以此类推就是 0-13,39-52,13-26
# encode_three
这一步是将分组完后的 flag 在进行一次算法加密,其实这就是凯撒加密,但比凯撒多了一步即 0-9 几个数字也进行了变化,48-57 就是 0-9 的 ASCII 码
# 总体思路
程序将我们输入的 flag 进行一次 base64 编码后,再 13 个 13 个为一组进行一次调换,然后在进行一次特殊的凯撒加密,最后在与 Str2 进行对比,Str2 就是进行了 3 次加密过后的结果,理清楚思路之后,我们反着来写个脚本就可以得到最初的 flag 了~
# 脚本
1 | import base64 |
得到 flag:GWHT{672cc4778a38e80cb362987341133ea2}
题目来源:BUUCTF 在线评测 (buuoj.cn)——[羊城杯 2020] easyre