Angr(九)——angr_ctf

通过angr_ctf熟悉angr的使用方法

参考链接:

bilibili - angr符号执行

GitHub - angr_ctf

14

1. 直接下载angr_ctf提供的ELF可执行文件14_angr_shared_library

2. 用IDA静态分析

    函数逻辑比较简单,与前面几例的不同之处在于validate函数在动态链接库(.so文件)中。动态链接库中的共享对象最终装载地址在编译的时候是不确定的,需要装载器根据当前地址空间的空闲情况,动态分配一块足够大小的虚拟地址空闲。共享库中的所有地址都是 base+offset。

3. 编写脚本求解程序输出Good Job时对应的输入

import angr
import claripy

base = 0x4000000
p = angr.Project('./lib14_angr_shared_library.so', load_options={
        'main_opts': {
            # backend —— 使用哪个后台,可以是一个对象,也可以是一个名字(字符串)
			# custom_base_addr —— 使用的基地址
			# custom_entry_point —— 使用的入口点
			# custom_arch —— 使用的处理器体系结构的名字
            'custom_base_addr': base
        }
    })
pass_addr = claripy.BVV(0x3000000, 32)
validate_addr = base + 0x6D7
init_state = p.factory.call_state(validate_addr, pass_addr, claripy.BVV(8, 32))
password = claripy.BVS('password',8*8)
init_state.memory.store(pass_addr, password)
sm = p.factory.simulation_manager(init_state)
sm.explore(find=base+0x783)
for i in range(0, len(sm.found)):
	found_state = sm.found[i]
	found_state.add_constraints(found_state.regs.eax != 0)
	print(found_state.solver.eval(password,cast_to=bytes).decode())

4. 运行脚本查看结果

 5. 验证结果的正确性

 

关于运行时报错error while loading shared libraries: lib14_angr_shared_library.so: cannot open shared object file: No such file or directory的解决方法:

1. 编辑/etc/ld.so.conf文件,在include /etc/ld.so.conf.d/*.conf的下方添加一行,添加xxx.so文件所在的目录

 2. 运行命令行/sbin/ldconfig -v

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值