
Tenet은 실행 추적을 탐색하기위한 IDA Pro 플러그인입니다. 이 플러그인의 목표는 주어진 바이너리에 대한 실행 추적을 탐색하기위한보다 자연스럽고 인간적인 제어를 제공하는 것입니다. 이 작업의 기초는 소프트웨어의 복잡한 실행 패턴을 조사하고 증류하기위한 새롭거나 혁신적인 방법을 연구하려는 욕구에서 비롯됩니다.
이 프로젝트에 대한 자세한 내용은 최초 릴리스에 대한 블로그 포스트를 읽으십시오.
Qira / Geohot et al. 영감을 위해.
Tenet은 크로스 플랫폼 (Windows, MacOS, Linux) Python 3 플러그인입니다. 제 3 자 종속성이 0이되어 코드가 휴대용 및 설치가 쉽습니다.
Disassembler의 Python 콘솔에서 다음 명령을 실행하여 플러그인 디렉토리를 찾으십시오.
import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins") 이 저장소 /plugins/ 폴더의 내용을 나열된 디렉토리에 복사하십시오.
분해기를 다시 시작하십시오.
이 플러그인은 IDA 7.5 및 최신 기능 만 지원됩니다.
올바르게 설치되면 Disassembler에 새로운 메뉴 항목이 있습니다. 이것은 외부 수집 된 실행 트레이스를 교리로로드하는 데 사용할 수 있습니다.

이것이 초기 릴리스이므로 Tenet은 간단한 사람이 읽을 수있는 텍스트 추적 만 허용합니다. 추적 형식, 제한 및 참조 추적기에 대한 추가 정보는이 저장소의 추적 readme를 참조하십시오.
Tenet을 사용하는 동안 플러그인은 트레일을 '페인트'로 사용하여 활성 실행 트레이스에서 현재 위치에서 실행 (파란색) 및 뒤로 (빨간색)의 흐름을 나타냅니다.

시간이 지남에 따라 앞으로 또는 뒤로 step 려면 분해 된 오른쪽의 타임 라인을 가리키는 동안 스크롤합니다 . 함수 호출을 step over 려면 스크롤하는 동안 SHIFT 누릅니다.
트레이스 타임 라인은 분해 방지의 오른쪽에 도킹됩니다. 이 위젯은 추적 타임 라인을 따라 다양한 유형의 이벤트를 시각화하고 위에서 설명한대로 기본 탐색을 수행하는 데 사용됩니다.

타임 라인을 클릭하고 드래그 하면 실행 추적의 특정 섹션을 확대 할 수 있습니다. 이 작용은 원하는 세분성에 도달하기 위해 횟수 도로 반복 될 수 있습니다.
레지스터 창에서 명령 포인터를 두 번 클릭하면 빨간색으로 강조 표시되어 모든 위치가 트레이스 타임 라인에서 실행 된 지침이 실행되었습니다.

실행 사이를 점프하려면 강조 표시된 명령어 포인터를 호버링하면서 위 또는 아래로 스크롤하십시오 .
또한 분해 목록을 마우스 오른쪽 버튼으로 클릭 하고 내비게이션 기반 메뉴 항목 중 하나를 선택하여 관심 지침 실행을 신속하게 찾을 수 있습니다.

IDA의 기본 F2 핫키는 임의의 지침에 대한 중단 점을 설정하는 데 사용될 수도 있습니다.
스택 또는 메모리보기에서 바이트를 두 번 클릭하면 추적 타임 라인에서 시각화 된 주소에 대한 모든 읽기/쓰기를 즉시 볼 수 있습니다. 노란색은 메모리 읽기를 나타내고 파란색은 메모리 쓰기를 나타냅니다.

실행 중단 점에 대해 설명 된 동일한 기술을 사용하여 메모리 중단 점을 탐색 할 수 있습니다. 바이트를 두 번 클릭하고 선택한 바이트를 호버링하면서 스크롤하여 각 액세스에 대한 트레이스를 찾습니다.
관심있는 바이트를 마우스 오른쪽 버튼으로 클릭하면 생각하는 특정 탐색 조치가있는 경우 메모리 읽기 / 쓰기 / 액세스간에 찾을 수있는 옵션이 제공됩니다.

임의의 주소로 메모리보기를 탐색하려면 메모리보기를 클릭하고 G 눌러 주소 또는 데이터베이스 기호를 입력하여보기를 찾으십시오.
메모리 블록을 강조 표시하여 메모리 영역에서 메모리 중단 점을 설정하고 액세스 중단 점을 설정하기 위해 두 번 클릭 할 수 있습니다.

정상적인 메모리 중단 점과 마찬가지로 영역을 가리키고 스크롤링을 사용하면 선택한 메모리 영역에 대한 액세스를 통과하는 데 사용할 수 있습니다.
리버스 엔지니어링에서는 "이 레지스터를 현재 값으로 설정 한 지시를 스스로에게 묻는 상황을 만나는 것이 일반적입니다.
Tenet을 사용하여 한 번의 클릭으로 해당 명령으로 뒤로 찾을 수 있습니다.

거꾸로 추구하는 것은 레지스터 변경을 통해 탐색하는 가장 일반적인 방향입니다. 그러나 손재주의 경우 레지스터 오른쪽에있는 Blue Arrow를 사용하여 다음 레지스터 할당을 추구 할 수도 있습니다.
트레이스의 특정 타임 스탬프로 탐색하기 위해 간단한 '쉘'이 제공됩니다. 쉼표의 유무에 관계없이 쉘에 타임 스탬프로 붙여 넣기 (또는 타이핑 ...) 충분합니다.

느낌표를 사용하여 추적에 지정된 '백분율'을 찾을 수도 있습니다. 입력 !100 트레이스의 최종 지시를 추구 할 것입니다 !50 !last 분리기에서 볼 수있는 마지막 탐색 가능한 명령을 추구합니다.
Tenet은 두 가지 기본 테마의 '가벼운'테마와 '어두운'테마를 제공합니다. Disassembler에서 현재 사용하는 색상에 따라 Tenet은 가장 적합한 테마를 선택하려고 시도합니다.

테마 파일은 디스크에서 간단한 JSON으로 저장되며 구성 가능합니다. 기본 테마 나 색상에 만족하지 않으면 자신의 테마를 만들어 사용자 테마 디렉토리에 간단히 삭제할 수 있습니다.
Tenet은 향후 부하 및 용도에 대한 테마 선호도를 기억합니다.
시간과 동기 부여 자금 지원 허용, 향후 작업은 다음과 같습니다.
외부 기여, 문제 및 기능 요청을 환영합니다. 향후 릴리스를 위해 고려되기를 원한다면이 저장소의 develop 지점에 풀 요청을하십시오.