angr学习(四)

user_input是在.bss段上的,所以和上两题不一样,把符号变量放到内存段上就OK了。
.bss段是来放全局变量和静态变量的内存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import angr,sys,claripy
def ():
pro=angr.Project("./05_angr_symbolic_memory")
entry_point=pro.factory.blank_state(addr=0x08048606)
input=claripy.BVS('input',32*8)
entry_point.memory.store(0x0A29FAA0,input)
state=pro.factory.simgr(entry_point)
def is_success(state):
res_output=state.posix.dumps(sys.stdout.fileno())
return 'Good Job' in res_output
def is_avoid(state):
res_output=state.posix.dumps(sys.stdout.fileno())
return 'Try again' in res_output
state=pro.factory.simgr(entry_point)
state.explore(find=is_success,avoid=is_avoid)
if state.found:
res=state.found[0]
#cats_to:强制转换类型
res_input=res.se.eval(input,cast_to=str)
input=[]
for i in range(1,33):
input.append(res_input[i-1])
if i%8==0 and i!=0:
input.append(' ')
print ''.join(input)
if __name__ == '__main__':
main()