2016-11-10 3 views
0

나는 angr - 문서의 과제 중 하나 (https://github.com/angr/angr-doc/blob/2d45c9e6d9f91e83988719aa19940aec2cfd8747/examples/ekopartyctf2015_rev100/solve.py)에서 일하고 있어요하지만 내 방식에 나는이 상황이 이해 : 내가 필요angr 메모리 맵

mov  rdx, [rbp+var_150]; 
mov  rdx, [rdx]; 
mov  rdx, [rdx+8]; 
movsx esi, byte ptr [rdx] 

는 ESI와 같은 상징적 인 설정을 (ESI 것 값을 포함해야 함).

것은 나는이 같은 시도했다 :하지만 는 또한, 나는 BitVector 값 (BVV) 각 포인터를 설정하려고했습니다 작동하지 않습니다

#mov  rdx, [rbp+var_150] 
p1 = init_state.memory.load(init_state.regs.rbp-0x150, 8, endness=p.arch.memory_endness) 
#mov  rdx, [rdx] 
p2 = init_state.memory.load(p1, 8, endness=p.arch.memory_endness) 
#mov  rdx, [rdx+8] 
p3 = init_state.memory.load(p2+8, 8, endness=p.arch.memory_endness) 
#movsx esi, byte ptr [rdx] 
r1 = init_state.memory.load(p3, 8, endness=p.arch.memory_endness) 

을, 그러나 그것은 작동하지 않았다 어느 한 쪽.

무엇이 잘못 되었나요?

+0

무엇 정확하게 "작동하지 않습니다"에 의해 의미합니까? – Robert

답변

0

해결책을 찾았습니다. 메모리 레이아웃에 대한 오해가 있습니다. 나는 모든 기억이 상징적 이었지만, 나는 다중성 ptr에 대한 접근이 "자동 마술"을 해결할 것으로 기대하고 있었다. 나는 내 문제를 수정하여 BitVector 값을 만들고이를 rpb-0x150 및 포인터에 저장합니다. 여기에 예입니다 : 이제

#mov  rdx, [rbp+var_150] 
ptr_v_2 = claripy.BVV(0xe000000000, 64) 
init_state.memory.store(init_state.regs.rbp-0x150, ptr_v_2) 
p3 = init_state.memory.load(init_state.regs.rbp-0x150, 8, endness=p.arch.memory_endness) 

#mov  rdx, [rdx] 
ptr_v_1 = claripy.BVV(0xd000000000, 64) 
init_state.memory.store(p3, ptr_v_1) 
p2 = init_state.memory.load(p3, 8, endness=p.arch.memory_endness) 

#mov  rdx, [rdx+8] 
ptr_v = claripy.BVV(0xc000000000, 64) 
init_state.memory.store(p2+8, ptr_v) 
p1 = init_state.memory.load(p2+8, 8, endness=p.arch.memory_endness) 

, 나는 sybolic 모든 메모리를 설정하는 방법을 알아 보았하기 위해 노력하고있어