re学习(18)[ACTF新生赛2020]rome1(Z3库+window远程调试)

参考视频:

Jamiexu793的个人空间-Jamiexu793个人主页-哔哩哔哩视频

代码分析:

其主要内容在两个while循环中(从定义中可知flag位16个字符)。

看第二个循环,可知是比较result和经过第一个循环得到的v1比较(就是flag经过第一个循环后变成了result(v12))并且可以从开头看出v12=Qsw3sj_lz4_Ujw@l。

再看第一个循环,发现是凯撒密码(看了老半天),大写字母平移12位,小写字母平移8位,其他字符不变。

 

 

import z3
key="Qsw3sj_lz4_Ujw@l"

solver=z3.Solver()

varNames=[]
for i in key:
    o=ord(i)
    if o>64 and o<=90:
        x=z3.Int('v%d'%o)
        solver.add(x>64)
        solver.add(x<=90)
        solver.add(((x-51)%26+65)==o)
        varNames.append(x)
    elif o>96 and o<=122:
        x=z3.Int('v%d'%o)
        solver.add(x>96)
        solver.add(x<=122)
        solver.add(((x-79)%26+97)==o)
        varNames.append(x)
    else:
        x=z3.Int('v%d'%o)
        solver.add(x==o)
        varNames.append(x)
if solver.check()==z3.sat:
    model=solver.model()
    for i in varNames:
        print(chr(model[i].as_long()),end='')
#Cae3ar_th4_Gre@t
#ACTF{Cae3ar_th4_Gre@t}
ACTF{Cae3ar_th4_Gre@t}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值