博客
关于我
angr学习笔记(9)(添加约束)
阅读量:329 次
发布时间:2019-03-04

本文共 1760 字,大约阅读时间需要 5 分钟。

angr系列

文章目录

伪代码分析

在这里插入图片描述
需要在下方添加一个约束,防止路径爆炸if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),因为这种compare是属于一个字符一个字符进行比较,所以路径太多,需要添加约束。
在这里插入图片描述
先找到起始地址

    start_addr=0x08048625    init_state=p.factory.blank_state(addr=start_addr)

符号化输入:

    buffer_addr=0x0804A050    password=init_state.solver.BVS("password",16*8)    init_state.memory.store(buffer_addr,password)        sm=p.factory.simgr(init_state)

目标地址是if ( check_equals_AUPDNNPROEZRJWKB((int)&buffer, 0x10u) ),当寻到这里时,需要停下,自行进行约束判断
在这里插入图片描述

   check_addr=0x08048565    sm.explore(find=check_addr)

首先给函数进行参数初始化

        check_param1=buffer_addr        check_param2=0x10        check_bvs=check_state.memory.load(check_param1,check_param2)

进行约束添加

        check_constraint=desired_string==check_bvs        check_state.add_constraints(check_constraint)

最后进行求解即可:

        password1=check_state.solver.eval(password,cast_to=bytes)

脚本

import sysimport angrdef main(argv):    bin_path=argv[1]    p=angr.Project(bin_path)    start_addr=0x08048625    init_state=p.factory.blank_state(addr=start_addr)    buffer_addr=0x0804A050    password=init_state.solver.BVS("password",16*8)    init_state.memory.store(buffer_addr,password)        sm=p.factory.simgr(init_state)        check_addr=0x08048565    sm.explore(find=check_addr)    if sm.found:        check_state=sm.found[0]        desired_string='AUPDNNPROEZRJWKB'        check_param1=buffer_addr        check_param2=0x10        check_bvs=check_state.memory.load(check_param1,check_param2)        check_constraint=desired_string==check_bvs        check_state.add_constraints(check_constraint)        password1=check_state.solver.eval(password,cast_to=bytes)        print("Solution:{}".format(password1.decode('utf-8'))) if __name__=='__main__':    main(sys.argv)

在这里插入图片描述

LGCRCDGJHYUNGUJB

验证

在这里插入图片描述

转载地址:http://atve.baihongyu.com/

你可能感兴趣的文章
剑指offer JZ15 反转链表
查看>>
剑指offer JZ21 栈的压入弹出序列
查看>>
剑指offer JZ31 整数中1出现的次数
查看>>
实现基于scrapy框架的天气预报爬虫hengYangSpaider @572311文
查看>>
maven打包指定名称并去除jar-with-dependencies后缀
查看>>
Netty4服务端入门代码示例
查看>>
java连接mysql,jdbc驱动
查看>>
操作系统前传第六课--开发中的辅助工具
查看>>
Linux系统编程44 信号 - 信号的响应过程分析!!!
查看>>
VL53L0x TOF激光测距的 stm32 HAL库驱动代码
查看>>
怎么玩LOG4J
查看>>
Oracle创建用户,分配表空间
查看>>
自定义标签(JSP2.0)简单标签
查看>>
MyBatis自定义类型转换器
查看>>
机器学习(湖北师范大学教程)-极大似然估计算法
查看>>
2019年下半年总结
查看>>
读《红楼梦》有感
查看>>
【C# 重构】—参数化查询, 需要参数,但未提供该参数
查看>>
决策树(二)—— ID3和C4.5
查看>>
MySQL~教你满分回答什么是数据库索引? 索引的数据结构是什么? 什么是事务?
查看>>