angr符号执行用例解析——0ctf_momo_3


源码及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/0ctf_momo_3

该题目来自于2016年0ctf比赛的被混淆过的二进制文件。在使用angr进行分析前,作者通过调试工具确定了flag的生成方式。flag获取代码为:.text:0804ABAC   mov  edx, dword_81FE260[edx*4]。随后,我们对输入进行了变换,并寻找与Qira的不同点。我们发现0x81fe6e0和0x81fe6e4内容一样时即可。因为movfuscator混淆后 “vm”访问内存总是一样的,所以我们可以通过寻找相同指令(相同顺序)来确定angr执行的目标。

程序首先将momo文件加载进来;
然后计算了要分析的起始地址和大小;
通过loader.memory.read_bytes方法将要分析的数据读取出来;
使用capstone框架对这段数据反汇编;
初始化一个capstoneblock;
在这段block中通过指令的字符串与顺序匹配来寻找分析的目标地址targets;
指令的顺序为:
edx, dword ptr [edx*4 + 0x81fe260]
al, byte ptr [0x81fe6e0]
dl, byte ptr [0x81fe6e4]
发现一个记录一个targets;
打印出发现的targets地址数目;
对于每一个target进行分析,分析内容如下:
初始化一个flag_arr=“0ctf{”
然后从string工具类中取出一个char,与刚刚的flag_arr拼接得到flag;
获取程序入口状态entry_state;
entr

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值