简单的尝试下angr
0x00:前言
之前接触到了符号执行,可以用于程序的自动化分析,感觉还是比较神奇,工业上的具体用法不是很清楚,不过在CTF中这个东西慢慢在流行...从defcon 2016
就可以看出(有很多人解re用符号执行)。常用的库有angr、z3,我只尝试了angr。
0x01:关于符号执行
以下来自维基百科:
符号执行 (Symbolic Execution)是一种程序分析技术。其可以通过分析程序来得到让特定代码区域执行的输入。使用符号执行分析一个程序时,该程序会使用符号值作为输入,而非一般执行程序时使用的具体值。在达到目标代码时,分析器可以得到相应的路径约束,然后通过约束求解器来得到可以触发目标代码的具体值。[1]符号模拟技术(symbolic simulation)则把类似的思想用于硬件分析。符号计算(Symbolic computation)则用于数学表达式分析。
这个东西的详细资料可以google得到,github上也有一些介绍和demo。
0x02:简单的使用
对于CTF中的re题目来说,一些流程繁琐,代码量大的题目简直是体力活,做的人心力交瘁...举个简单的例子,之前听chxx表哥分享过一种代码混淆的技术叫控制流平坦化,用IDA打开视图简直是噩梦...如果是那种很复杂的,真的是爆炸,这里只用一个很简单的文件来演示。
其实这段代码没多长,几十行,判断的逻辑也很简单,但是就是利用几个变量在控制程序流程,跳来跳去,分析起来十分麻烦。
如果使用符号执行去解决就会使问题变得很简单
跑符号执行的机器配置要好些,这个东西太吃内存了,程序的复杂度和你代码约束条件写的如何,将决定你能不能跑出结果,因为这个程序很简单,所以很快就跑出来了。
大概 几十秒...
0x03:其他
个人感觉,angr的官方文档还不错,结合文档和官方给出的example应该可以学会使用这个库。但是符号执行也是有局限性的,不能盲目地去跑(如果你以为随便设定find 和 avoid 就可以跑出结果,那就太naive了)根据程序获取输入的方式不同,angr有不同的处理,还有一些筛选功能,这部分就可以看看文档啦,都比较容易懂。研究深入的话,这个东西还是很复杂的,我现在只想会使用这个工具就好,还有很多要学TAT。
0x04:
最近发现一个其他的用途,在分析pwn类型题目的二进制文件的时候,适当的使用angr来测试一些执行路径也是可以的...不过还是不能太依赖,更多的时候还是要人肉分析+调试。
简单的尝试下angr的更多相关文章
- 基于modelsim-SE的简单仿真流程—下
基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...
- 浅析SqlServer简单参数化模式下对sql语句自动参数化处理以及执行计划重用
我们知道,SqlServer执行sql语句的时候,有一步是对sql进行编译以生成执行计划, 在生成执行计划之前会去缓存中查找执行计划 如果执行计划缓存中有对应的执行计划缓存,那么SqlServer就会 ...
- 简单实用的下拉菜单(CSS+jquery)
原文 简单实用的下拉菜单(CSS+jquery) 没什么可以说的,直接上例子 html+jquery代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTM ...
- 简单实现TCP下的大文件高效传输
简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...
- sql server 备份与恢复系列三 简单恢复模式下的备份与还原
一.概述 前面讲了备份的一些理论知识,这篇开始讲在简单恢复模式下的备份与还原.在简单模式下是不能做日志备份的,发生灾难后,数据库最后一次备份之后做的数据修改将是全部丢失的,所以在生产环境下,数据又很重 ...
- 浅谈SQL Server中的事务日志(三)----在简单恢复模式下日志的角色
简介 在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性.并不承担具体的恢复数据的角色.正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.在 ...
- 简单谈谈eclipse下搭建PhoneGap环境来开发Android程序 - linux86(转)
原来在逛园子的时候一不小心发现了一个新概念“PhoneGap”简称PG,我一直都喜欢追逐新事物,自然就产生了好奇心.于是乎我就在百度上面Google了一下PhoneGap是什么东西.简单的说就是用另一 ...
- jq+css+html简单实现导航下拉菜单
相信导航栏下拉菜单是web开发最常见的一个item了.这里就不做介绍了,直接上code. Html部分 <div class="_nav"> <ul id=&qu ...
随机推荐
- Feign的雪崩处理
在声明式远程服务调用Feign中,实现服务灾难性雪崩效应处理也是通过Hystrix实现的.而feign启动器spring-cloud-starter-feign中是包含Hystrix相关依赖的.如果只 ...
- 【Havel 定理】Degree Sequence of Graph G
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2454 [别人博客粘贴过来的] 博客地址:https://www.cnblogs.com/debug ...
- 并不对劲的bzoj4538:loj2049:p3250:[HNOI2016]网络
题意 有一棵\(n\)(\(n\leq 10^5\))个点的树,\(m\)(\(m\leq 2\times 10^5\))个操作.操作有三种:1.给出\(u,v,k\),表示加入一条从\(u\)到\( ...
- Java super与this
一.super()与this() 1.super(): 只能出现在子类构造器中 且必须位于第一行. 所有子类构造器默认调用super()方法 参数决定使用父类哪一个构造器. 若父类没有相应的构造器,则 ...
- WCF寄宿windows服务二
如果有很多WCF服务需要寄宿,需要额外做一些工作:总体思路是:先把这些WCF服务的程序集打包,然后利用反射加载各个WCF服务的程序集,按顺序一个一个寄宿.先来看看我们需要寄宿的WCF服务: 实现步骤: ...
- 精心整理的一些 Python 学习资料
今天花了些时间给大家精心整理一份 Python 学习资料.我觉得不错的资料我都整理进来了,如果你是学习python的,我觉得这一份资料对你应该有用. 1.知乎上超过 10k 的python相关回答 Y ...
- 分库分布的几件小事(五)MYSQL读写分离
1.为什么进行读写分离 这个,高并发这个阶段,那肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是app,其实都是读多写少.所以针对这个情况,就是写一个主库,但是主库挂多个 ...
- spring 多数据源配置
多数据源配置方法: 在配置数据源配置文件中多加一个数据源配置即可: <bean id="dataSource" class="org.apache.commons. ...
- webpack的postcss的基本应用
PostCss是什么? PostCSS在webpack中的基本应用 一.PostCss是什么? 如果有深入学习PostCss需求的话可以参考大漠的资料:https://www.w3cplus.com/ ...
- python调用其他脚本
1.用python调用python脚本 #!/usr/local/bin/python3. import time import os count = str = ('python b.py') re ...