controlpro

Side Channel Marvel 활용해보기 - trace_it.py 본문

카테고리 없음

Side Channel Marvel 활용해보기 - trace_it.py

controlpro 2023. 5. 1. 09:36
728x90

0. 개요 

 

막상 Tracer부분을 다 이해했다고 생각했는데 생각보다 이해가 부족하고, 교수님이 질문하실 때, 답하기가 어렵거나 힘든 경우가 많기 때문에 해당 부분을 조금 더 사용해보려고 한다.

 

1. filters 분석 

 

먼저 Tracer는 실행될 때 get_trace랑 __init__에서 각각 해당 filter를 받아오는 경우가 많은데 이를 먼저 점검해보자.

filter의 형식은 다음과 같다. 

f=Filter(keyword, modes, condition, extract, extract_fmt)

ex)
filters=[Filter('mem_addr1_r1', ['R'], lambda stack_range, addr, size, data: addr > 0x7ffffff36c00 and size == 4, lambda addr, size, data: addr & 0xFF, '<I'),
         Filter('mem_data_r1',  ['R'], lambda stack_range, addr, size, data: addr > 0x7ffffff36c00 and size == 4, lambda addr, size, data: data, '<I'),
         Filter('mem_stack_w1',  ['W'], lambda stack_range, addr, size, data: addr < 0x7ffffff36c00 and size == 4, lambda addr, size, data: data, '<I')]

다음과 같이 활용하는데, 내가 보기에 편한대로 정리해보려고 한다. 

 

1. Keyword :

딱히 그렇게 의미있는 것은 아니다. 아마 trace 상에 name을 붙이기 위한 option으로 확인된다. 

     ex) mem_addr1_r1

2. modes :

명령어가 어떤 동작을 할 때 해당 데이터를 수집할 건지 묻는 option이다. 보통 2개의 option이 있는데 R : read W : Write

    ex) ['R'] , ['W'] , ['R' , 'W']

3. conditions

표현하기는 좀 애매한데, 어느 시점에서 정보를 수집하는 경우를 말하는 경우이다. 즉 chiswhisperer의 경우 그냥 trigger 를 띄우는 부분을 말하는 것 같다. 

이 때는 참이면 수집하고 거짓이면 수집을 하지 않는다. 

    ex) 

4. extract 

이 때는 그냥 다 뽑는 경우를 말하는 거 같다. 

 

5. extract_fmt 

어떤 형식으로 추출하는 지를 확인하는 경우이다. 

보통 사용하는 형식을 보면 

< : little-endian 

> : big-endian  이 두개가 다이다. 보통

 

그리고 B : unsigned char 형식이고 i : int I : unsigned int 이 경우를 말하는 것이다. 

 

 

내가 여기서 가장 궁금했던 것이 저 size를 조정하는 방법인데, size를 1로 하느냐 4로 하느냐에 따라서 값이 달라진다. 

 

 

 

 

 

 

728x90
반응형