约束符号求解器angr在CTF中的简单使用(0~2)

1.00_angr_find

程序本身非常简单,可以采用常规的逆向手段进行解密

import sys

def main(argv):
    p=angr.Project('./00_angr_find')#加载00_angr_find这个程序
    init_state=p.factory.entry_state()#给定一个初始化的状态
    
    sm=p.factory.simulation_manager(init_state)#使用simgr进行执行
    
    good_addr=0x08048678#该地址是输出good job的地址
    
    sm.explore(find=good_addr)#“探索”该地址
    
    if sm.found:
        solution_state=sm.found[0]
        print(solution_state.posix.dumps(0))
        
if __name__=='__main__':
    main(sys.argv)
~                             

 

得到第一题的flag为: JXWVXRKX

2.01_angr_avoid

第二题和第一题差不多,在第二题中,我们不只是”find“,还有”avoid“

主要是由于二进制非常大,我们需要设置一些angr避免执行的地址,加快符号执行的速度。

import sys

def main(argv):
    p=angr.Project('./01_angr_avoid')
    init_state=p.factory.entry_state()
    
    sm=p.factory.simulation_manager(init_state)
    
    good_addr=0x080485E0
    bad_addr=0x080485F2
    
    sm.explore(find=good_addr,avoid=bad_addr)
    
    if sm.found:
        
        solution_state=sm.found[0]
        
        print(solution_state.posix.dumps(0))
    else:
        raise Exception('Could not find the solution')
if  __name__=='__main__':
    main(sys.argv)
                                                                      

 

得到flag为: HUJOZMYS

3.02_find_condition

使用IDA进行分析可以看到有非常多的输出Good Job的地址

所以我们就定义输出Good Job的函数,使用angr寻找函数

import angr
import sys

def main(argv):
    p=angr.Project('./02_angr_find_condition')
    init_state=p.factory.entry_state()

    sm=p.factory.simulation_manager(init_state)

    def good(state):
        return b'Good Job.'in state.posix.dumps(1)
    def bad(state):
        return b'Try again.'in state.posix.dumps(1)

    sm.explore(find=good,avoid=bad)

    if sm.found:
        solution_state=sm.found[0]
        print(solution_state.posix.dumps(0))
if __name__=='__main__':

    main(sys.argv)

 

得到flag为: HETOBRCU

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mov1A

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值