深入angr之I_hate_smc

前言:一道沙老师的题目引发的血案
写这篇blog首先是想更加深入了解一下smc
记录一下学习
至于沙老师那题,估计是因为有smc的原因,angr弄不出
当然不是说angr弄不出。。。
是我还不咋会用
记录一下吧

参考链接
这个作者目前写了6篇,都不错,能学到很多。

基本用法

初始脚本

1
2
3
4
5
6
7
8
9
10
11
import angr

def main():
p = angr.Project("r100",auto_load_libs=True)
simgr = p.factory.simulation_manager(p.factory.full_init_state())
simgr.explore(find=0x400844, avoid=0x400855)

return simgr.found[0].posix.dumps(0).strip(b'\0\n')

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

这是最基础的angr脚本模板
大致使用就是把explore地址改下
但程序一旦稍微复杂些或者有些奇怪的操作在里面这个脚本可能就要跑好久
或者根本跑不出

1
2
3
4
5
6
1. blank_state(**kwargs)
返回一个未初始化的state,此时需要主动设置入口地址,以及自己想要设置的参数。
2. entry_state(**kwargs)
返回程序入口地址的state,通常来说都会使用该状态
3. full_init_state(**kwargs)
同entry_state(**kwargs) 类似,但是调用在执行到达入口点之前应该调用每个初始化函数

这是作者介绍的入口地址

1
2
3
4
5
6
from angr import *
p = Project("./momo",auto_load_libs=False) # file name
s = p.factory.entry_state()
sm = p.factory.simulation_manager(s)
r = sm.explore(find = 0x805356E,avoid = 0x8053AE7) # address
print r.found[0].posix.dumps(0)

像这个就是从函数入口地址进入的

下面开始学习进阶把

约束

todo

文章目录
  1. 1. 基本用法
  2. 2. 约束
|