[b01lers2020]chugga_chugga

先用GDB运行一下,运行到用户输入后用bt指令查看堆栈情况,得知main函数位置,同时可以得知使用的语言是GO

谷歌后得知GHIDRA有GO语言的反编译插件(https://github.com/felberj/gotools),安装后进入main.main函数,反编译结果如下图所示:

函数逻辑比较清晰,直接上Z3求解一把梭

# -*- coding: UTF-8 -*-
from z3 import *
s = Solver()

flag = []
for i in range(23):
    name = "c" + str(i)
    iniEq = "{0} = BitVec(\"{0}\",7)".format(name)
    print(iniEq)
    exec(iniEq)
    flag.append(eval(name))


s.check()
s.add(flag[2] == ord('t'))
s.add(flag[5] == ord('s'))
s.add(flag[9] == ord('c'))
s.add(flag[0x10] == ord('n'))
s.add(flag[0x15] == ord('z'))
s.add(flag[0x16] == ord('}'))
s.add(flag[3] == ord('f'))
s.add(flag[1] == ord('c'))
s.add(flag[7] == ord('d'))
s.add(flag[0xc] == flag[0xd])
s.add(flag[0x13] == ord('z'))
cVar2 = flag[6]
s.add(cVar2 + flag[0xe] == ord('h'))
s.add(flag[4] == ord('{'))
s.add(flag[0xf] == flag[8])
s.add(flag[8] == ord('_'))
cVar3 = flag[0x11]
s.add((-0x5b - cVar3) == flag[0xb])
cVar5 = flag[0x12] - cVar3
s.add(flag[0xb] + -0x73 - flag[0x12] + cVar3 == cVar5)
bVar6 = cVar2 - cVar3
s.add(flag[0xd] + 0x01 == flag[10])
s.add(bVar6 *3 + ord('\\') == flag[10])
s.add(flag[0x14] + -99 == cVar5*2)
s.add(flag[0] == (bVar6 / 2) * cVar5 + ord('n'))
s.add((flag[0x14] + -99) == (cVar5 * 2))
s.add( cVar2 == flag[0xe])
s.add( bVar6 == cVar5 * 4)
# goto)
s.check()
m = s.model()
print(m)
for i in flag:
    val = m.evaluate(i).__str__()
    print(chr(int(val)),end="")

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值