DiceCTF--babymix

babymix

通过file命令查看文件位数:64位
ida64打开,发现关键函数:
在这里插入图片描述进入该函数后,根据函数情况逐步查看,发现一串的套娃函数又因为每个套娃函数里面都有一个约束式子,显然这是一道典型的利用z3约束器进行解题的题目。
在这里插入图片描述

脚本

from z3 import *
s = Solver()
a1 = [BitVec('u%d'%i,8) for i in range(0,22)]
s.add(a1[12] - a1[17] + a1[12] + a1[8] == 153)
s.add(a1[10] + a1[21] + (a1[19] ^ a1[2]) == 217)
s.add((a1[5] ^ a1[16]) + a1[16] + a1[3] + (a1[0] ^ a1[16]) == 232 )
s.add(a1[10] + a1[3] + a1[3] - a1[19] + (a1[19] ^ a1[0]) == 328 )
s.add(a1[10] - a1[8] + a1[2] - a1[19] == 74 )
s.add(a1[17] - a1[1] + a1[4] + a1[11] + a1[17] - a1[9] == 166 )
s.add(a1[14] + a1[10] + a1[18] - a1[9] + a1[5] + a1[10] == 413 )
s.add(a1[5] - a1[16] + a1[8] - a1[12] + a1[17] - a1[13] + a1[11] - a1[2] + a1[1] + a1[21] == 98 )
s.add((a1[19] ^ a1[13]) + a1[6] - a1[13] + a1[17] - a1[11] + (a1[16] ^ a1[12]) == 85 )
s.add( a1[4] - a1[16] + (a1[2] ^ a1[7]) == 77 )
s.add(a1[8] - a1[17] + a1[14] - a1[3] + (a1[8] ^ a1[14]) + a1[5] + a1[1] + a1[7] + a1[10] == 384 )
s.add( a1[4] - a1[0] + a1[2] - a1[4] + a1[15] - a1[21] + a1[17] + a1[2] == 265 )
s.add(a1[5] - a1[18] + a1[17] - a1[4] + a1[15] + a1[2] + a1[21] - a1[18] + a1[7] + a1[6] == 250 )
s.add(a1[21] - a1[19] + a1[7] - a1[18] + a1[16] - a1[21] + (a1[12] ^ a1[18]) == 75 )
s.add((a1[10] ^ a1[2]) + a1[2] + a1[7] + a1[20] + a1[13] + (a1[3] ^ a1[16]) + a1[9] + a1[6] == 621 )
s.add( a1[8] - a1[3] + (a1[14] ^ a1[2]) + a1[11] + a1[0] + a1[1] - a1[19] == 283 )
s.add(a1[16] - a1[14] + (a1[0] ^ a1[11]) + (a1[0] ^ a1[14]) + a1[13] - a1[19] == 106 )
s.add(a1[19] + a1[10] + a1[10] + a1[19] + a1[0] - a1[20] + a1[3] - a1[18] == 297 )
s.add(a1[0] - a1[15] + a1[20] + a1[18] == 156 )
s.add(a1[13] - a1[8] + a1[10] - a1[20] + a1[3] - a1[17] == 85 )
s.add(a1[3] - a1[17] + a1[19] + a1[4] + (a1[12] ^ a1[17]) + a1[10] - a1[2] == 160 )
s.add(a1[11] - a1[21] + a1[12] - a1[10] == 36 )
s.add( (a1[18] ^ a1[19]) + a1[6] - a1[16] + (a1[5] ^ a1[16]) == 102 )
s.add(a1[6] - a1[13] + (a1[10] ^ a1[15]) + a1[21] - a1[5] == -48 )
s.add( (a1[5] ^ a1[3]) + a1[12] - a1[11] + (a1[6] ^ a1[4]) == 29 )
s.add(a1[6] - a1[14] + a1[9] - a1[2] + a1[8] - a1[15] + a1[21] - a1[11] == -109 )
s.add(a1[19] - a1[7] + a1[0] + a1[16] + a1[11] + a1[17] == 361 )
s.add(a1[3] + a1[15] + (a1[15] ^ a1[19]) == 296)
if s.check() == sat:
     result = s.model()
     print result
else:
     print 'wrong!'

执行效果:
在这里插入图片描述最后只需要将这些数字按序转换为字符输出即可。
flag:dice{m1x_it_4ll_t0geth3r!1!}
注:dice{}为提交时添加。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值