angr符号执行用例解析——defcon2016quals_baby-re

16人阅读 评论(0) 收藏 举报
分类:

用例源码以及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/defcon2016quals_baby-re

执行二进制文件,发现需要输入13个字符,然后通过一系列计算判断输入字符是否满足约束条件。

在IDA里非常清晰可以看见输入错误的字符串及其调用地址:


所以avoid_addr=0x402941

而正确的字符串以及地址为:


可以看出,flag将作为程序输出,所以find_addr地址可以设置为0x40292c(亲测有效)。

不过这一次就又对scanf函数进行了hook,用来创建13个符号变量。

这次是一定要hook scanf函数的。因为它默认会返回一个无约束的一个符号变量(是否是同一个符号变量还不确定),在scanf函数前面存在fflush函数,它的功能是清空缓冲区,将输入写入stream。

而且hook的函数,也出现了新的知识点:

	class my_scanf(angr.SimProcedure):
		def run(self, fmt, ptr):
			if 'scanf_count' not in self.state.globals:
				self.state.globals['scanf_count'] = 0
			c = self.state.globals['scanf_count']
			self.state.mem[ptr].dword = flag_chars[c]
			self.state.globals['scanf_count'] = c + 1

在符号执行的过程中,是可以创建变量的,存储在state.globals里面。这里面就创建了一个变量scanf_count是记录scanf函数的数目,使得第i个scanf函数的state.mem赋值第i个符号变量。

用例源码:

#!/usr/bin/env python2

"""
Author: David Manouchehri <manouchehri@protonmail.com>
DEFCON CTF Qualifier 2016
Challenge: baby-re
Team: hack.carleton
Write-up: http://hack.carleton.team/2016/05/21/defcon-ctf-qualifier-2016-baby-re/
Runtime: ~8 minutes (single threaded E5-2650L v3 @ 1.80GHz on DigitalOcean)

DigitalOcean is horrible for single threaded applications, I would highly suggest using something else.
"""

import angr
import claripy

def main():
	proj = angr.Project('./baby-re',  load_options={'auto_load_libs': False})

	# let's provide the exact variables received through the scanf so we don't have to worry about parsing stdin into a bunch of ints.
	flag_chars = [claripy.BVS('flag_%d' % i, 32) for i in xrange(13)]
	class my_scanf(angr.SimProcedure):
		def run(self, fmt, ptr):
			if 'scanf_count' not in self.state.globals:
				self.state.globals['scanf_count'] = 0
			c = self.state.globals['scanf_count']
			self.state.mem[ptr].dword = flag_chars[c]
			self.state.globals['scanf_count'] = c + 1
	proj.hook_symbol('__isoc99_scanf', my_scanf(), replace=True)

	sm = proj.factory.simulation_manager()

	# search for just before the printf("%c%c...")
	# If we get to 0x402941, "Wrong" is going to be printed out, so definitely avoid that.
	sm.explore(find=0x4028E9, avoid=0x402941)

	# evaluate each of the flag chars against the constraints on the found state to construct the flag
	flag = ''.join(chr(sm.one_found.solver.eval(c)) for c in flag_chars)
	return flag

def test():
	assert main() == 'Math is hard!'

if __name__ == '__main__':
	print(repr(main()))



查看评论

名称解析

-
  • 1970年01月01日 08:00

angr符号执行用例解析——CADET_00001

源码及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/CADET_00001CADET_00001是DARPA为网络大挑战赛...
  • doudoudouzoule
  • doudoudouzoule
  • 2018-04-01 10:52:18
  • 36

用符号执行技术搞定crackme

Kao的toy project是一个非常棒的crackme,非常适合展示符号执行的力量。运行crackme提供了一个安装ID,我们需要输入一个解锁代码。 这里的安装ID本来应该是XXXXXXXX...
  • qq_32400847
  • qq_32400847
  • 2017-06-11 13:46:04
  • 1185

符号执行工具angr安装教程

符号执行工具angr的安装教程
  • xiaosatianyu
  • xiaosatianyu
  • 2016-06-04 22:19:55
  • 5723

angr符号执行用例解析——defcon2016quals_baby-re

用例源码以及二进制文件链接:https://github.com/angr/angr-doc/tree/master/examples/defcon2016quals_baby-re执行二进制文件,发...
  • doudoudouzoule
  • doudoudouzoule
  • 2018-04-17 18:42:43
  • 16

二进制符号执行分析框架angr的Windows安装教程

二进制符号执行分析框架angr的Windows安装教程在windows上安装Angr安装准备 Windows 10 操作系统 安装 Python 2.7 并配置Path环境变量 -磁盘空间大于8G ...
  • u013115415
  • u013115415
  • 2017-02-14 17:21:52
  • 304

180130 逆向-Angr入门(1)

1625-5 王子昂 总结《2018年1月29日》 【连续第486天总结】 A. 蓝鲸whale-angr学习 B. Angr是一个多架构的动态符号执行的框架符号执行就是将输入抽象成一个符号(而...
  • whklhhhh
  • whklhhhh
  • 2018-02-03 11:31:51
  • 110

机器学习和深度学习的最佳框架大比拼

机器学习和深度学习的最佳框架大比拼 在过去的一年里,咱们讨论了六个开源机器学习和/或深度学习框架:Caffe,Microsoft Cognitive Toolkit(又名CNTK 2),MXNet...
  • isuccess88
  • isuccess88
  • 2017-04-23 19:18:54
  • 1221

angr初探

angr 安装与简单使用 介绍angr总结来说,angr用于逆向工程中进行二进制分析的一个python框架 具体介绍见其github主页angr符号执行符号执行 (Symbolic Executio...
  • whym1
  • whym1
  • 2017-12-18 22:54:15
  • 56

angr源码分析——SimState

在最初分析angr的符号执行流程时,我们首先介绍了angr中claripy的应用代码,如下:import angr, claripy b = angr.Project('/bin/true') ...
  • doudoudouzoule
  • doudoudouzoule
  • 2018-02-27 23:29:51
  • 78
    个人资料
    持之以恒
    等级:
    访问量: 5169
    积分: 578
    排名: 9万+