Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
tenet — 리버스 엔지니어를 위한 트레이스 탐색기 | Kitploit
도구/GitHubGitHub/gaasedelen/tenet
Dynamic Analysis (Sandboxing)Reverse EngineeringDebuggersBinary Analysis
GitHubgaasedelen/tenet

tenet

리버스 엔지니어를 위한 트레이스 탐색기

저장소 보기
1.5k1694년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Tenet - 리버스 엔지니어를 위한 트레이스 탐색기

Tenet 트레이스 탐색기

개요

Tenet은 IDA Pro 플러그인으로 실행 트레이스를 탐색하기 위한 도구입니다. 이 플러그인의 목표는 주어진 바이너리에 대해 실행 트레이스를 탐색할 수 있는 보다 자연스럽고 인간적인 제어 기능을 제공하는 것입니다. 이 작업의 기반은 소프트웨어에서 복잡한 실행 패턴을 검사하고 추출하는 새롭거나 혁신적인 방법을 연구하려는 열망에서 비롯되었습니다.

이 프로젝트에 대한 더 많은 맥락은 초기 출시에 관한 블로그 포스트를 참조하세요.

QIRA / geohot 외 여러분의 영감에 특별히 감사드립니다.

릴리스

  • v0.2 -- 이미지베이스 탐지, 셀 시각화, 중단점 리팩터, 버그 수정.
  • v0.1 -- 초기 릴리스

설치

Tenet은 크로스 플랫폼(Windows, macOS, Linux) Python 3 플러그인입니다. 타사 종속성이 전혀 없어 코드가 이식 가능하고 설치가 쉽습니다.

  1. 디스어셈블러의 파이썬 콘솔에서 다음 명령을 실행하여 플러그인 디렉토리를 찾으세요:

    • IDA Pro: import idaapi, os; os.path.join(idaapi.get_user_idadir(), "plugins")
  2. 이 리포지토리의 /plugins/ 폴더 내용을 해당 디렉토리에 복사하세요.

  3. 디스어셈블러를 다시 시작하세요.

이 플러그인은 IDA 7.5 이상에서만 지원됩니다.

사용법

제대로 설치되면 디스어셈블러에 새로운 메뉴 항목이 나타납니다. 이를 사용하여 외부에서 수집한 실행 트레이스를 Tenet에 로드할 수 있습니다.

Tenet 트레이스 로드

초기 릴리스이므로 Tenet은 간단한 사람이 읽을 수 있는 텍스트 트레이스만 허용합니다. 트레이스 형식, 제한 사항 및 참조 트레이서에 대한 추가 정보는 이 리포지토리의 tracing readme를 참조하세요.

양방향 탐색

Tenet을 사용하는 동안 플러그인은 활성 실행 트레이스에서 현재 위치를 기준으로 실행 흐름을 앞으로(파란색)와 뒤로(빨간색) 표시하는 흔적을 '그립니다'.

Tenet 흔적

시간을 앞뒤로 step 하려면 디스어셈블러 오른쪽의 타임라인 위에 마우스를 올리고 스크롤 하기만 하면 됩니다. 함수 호출을 step over 하려면 스크롤하는 동안 SHIFT를 누르세요.

트레이스 타임라인

트레이스 타임라인은 디스어셈블러 오른쪽에 도킹됩니다. 이 위젯은 트레이스 타임라인을 따라 다양한 유형의 이벤트를 시각화하고 위에서 설명한 대로 기본 탐색을 수행하는 데 사용됩니다.

트레이스 타임라인 확대

타임라인을 클릭하고 드래그 하여 실행 트레이스의 특정 섹션을 확대할 수 있습니다. 이 작업은 원하는 세분성에 도달할 때까지 여러 번 반복할 수 있습니다.

실행 중단점

레지스터 창에서 명령어 포인터를 더블 클릭하면 빨간색으로 강조 표시되어 트레이스 타임라인에서 명령어가 실행된 모든 위치를 보여줍니다.

현재 명령어에 중단점 설정

실행 간에 이동하려면 강조 표시된 명령어 포인터 위에 마우스를 올리고 위아래로 스크롤 하세요.

또한 디스어셈블리 목록에서 마우스 오른쪽 버튼을 클릭 하고 탐색 기반 메뉴 항목 중 하나를 선택하여 관심 있는 명령어의 실행으로 빠르게 이동할 수 있습니다.

명령어의 첫 번째 실행으로 이동

IDA의 기본 F2 단축키를 사용하여 임의의 명령어에 중단점을 설정할 수도 있습니다.

메모리 중단점

스택 또는 메모리 보기에서 바이트를 더블 클릭하면 해당 주소에 대한 모든 읽기/쓰기가 트레이스 타임라인에 시각화되어 즉시 표시됩니다. 노란색은 메모리 읽기, 파란색은 메모리 쓰기를 나타냅니다.

메모리 중단점을 사용하여 메모리 액세스 탐색

메모리 중단점은 실행 중단점에 대해 설명된 것과 동일한 기술을 사용하여 탐색할 수 있습니다. 바이트를 더블 클릭하고 선택한 바이트 위에 마우스를 올리고 스크롤 하여 각 액세스로 트레이스를 이동합니다.

관심 있는 바이트를 마우스 오른쪽 버튼으로 클릭 하면 메모리 읽기/쓰기/액세스 간에 이동할 수 있는 옵션이 제공됩니다. 특정 탐색 작업이 있는 경우 유용합니다.

메모리 이동

메모리 보기를 임의의 주소로 이동하려면 메모리 보기를 클릭하고 G를 눌러 주소 또는 데이터베이스 심볼을 입력하여 보기를 이동합니다.

영역 중단점

메모리 블록을 강조 표시하고 더블 클릭하여 액세스 중단점을 설정함으로써 메모리 영역에 메모리 중단점을 설정할 수 있습니다.

메모리 영역 액세스 중단점

일반 메모리 중단점과 마찬가지로 영역 위에 마우스를 올리고 스크롤 하여 선택한 메모리 영역에 대한 액세스 사이를 탐색할 수 있습니다.

레지스터 이동

리버스 엔지니어링에서는 "어떤 명령어가 이 레지스터를 현재 값으로 설정했을까?" 라고 자문하는 상황을 자주 만나게 됩니다.

Tenet을 사용하면 한 번의 클릭으로 해당 명령어로 뒤로 이동할 수 있습니다.

이전 레지스터 쓰기로 이동

뒤로 이동하는 것이 레지스터 변경을 탐색하는 가장 일반적인 방향입니다... 하지만 민첩성을 위해 레지스터 오른쪽에 있는 파란색 화살표를 사용하여 다음 레지스터 할당으로 앞으로 이동할 수도 있습니다.

타임스탬프 셸

트레이스의 특정 타임스탬프로 이동하기 위한 간단한 '셸'이 제공됩니다. 쉼표 유무에 관계없이 타임스탬프를 셸에 붙여넣거나(또는 입력...) 입력하면 됩니다.

타임스탬프 셸을 사용하여 트레이스 탐색

느낌표를 사용하여 지정된 '백분율'로 트레이스를 이동할 수도 있습니다. !100을 입력하면 트레이스의 마지막 명령어로 이동하고, !50을 입력하면 트레이스의 약 50% 지점으로 이동합니다. !last는 디스어셈블러에서 볼 수 있는 마지막 탐색 가능한 명령어로 이동합니다.

테마

Tenet은 두 가지 기본 테마(라이트 테마와 다크 테마)를 제공합니다. 디스어셈블러에서 현재 사용 중인 색상에 따라 Tenet은 가장 적합해 보이는 테마를 선택하려고 시도합니다.

Tenet 테마

테마 파일은 디스크에 간단한 JSON으로 저장되며 매우 구성 가능합니다. 기본 테마나 색상이 마음에 들지 않으면 자신만의 테마를 만들어 사용자 테마 디렉토리에 넣으면 됩니다.

Tenet은 향후 로드 및 사용을 위해 테마 기본 설정을 기억합니다.

FAQ

질문: Tenet을 사용하여 실행 트레이스를 기록하려면 어떻게 하나요?

  • A: Tenet은 트레이스 리더이지 트레이스 레코더가 아닙니다. 호환되는 실행 트레이스를 생성하려면 동적 바이너리 계측 프레임워크(또는 기타 관련 기술)를 사용해야 합니다. 기존 트레이서 또는 직접 구현하는 방법에 대한 자세한 내용은 tracing readme를 참조하세요.

질문: Tenet은 어떤 트레이스 아키텍처를 로드할 수 있나요?

  • A: x86 및 AMD64만 가능하지만 코드베이스는 거의 완전히 아키텍처에 독립적입니다.

질문: Tenet은 얼마나 큰 트레이스 파일을 로드/탐색할 수 있나요?

  • A: Tenet의 트레이스 리더는 순수 파이썬이며 MVP로 작성되었습니다. 네이티브 백엔드로 대체되기 전까지는 1,000만 개 이상의 명령어가 포함된 트레이스를 합리적으로 탐색할 수 있다는 보장이 없습니다.

질문: 실행 트레이스를 로드했는데 '.tt' 파일이 생겼습니다. 무엇인가요?

  • A: Tenet이 텍스트 트레이스를 로드하면 트레이스를 구문 분석, 인덱싱 및 압축하여 더 나은 성능의 형식으로 변환합니다. 이후 로드 시 Tenet은 '.tt' 파일을 로드하려고 시도하며, 이는 원본 텍스트 트레이스를 로드하는 데 걸리는 시간의 일부만에 로드됩니다.

질문: 플러그인이 충돌/오류를 발생시키거나 잘못된 트레이스 정보를 표시합니다. 어떻게 해야 하나요?

  • A: 재현 가능한 문제나 부정확성을 발견하면 이 리포지토리에 이슈를 제출하고 샘플 트레이스와 실행 파일을 업로드해 주세요.

질문: 트레이스에서 메모리가 변경되는데 해당 영역에 쓰기가 없습니다. 버그인가요!?

  • A: 로그 파일이 모든 메모리 쓰기를 캡처하지 못했을 수 있습니다. 예를 들어, 사용자 모드 DBI는 일반적으로 프로세스 메모리에 대한 외부 쓰기에 대한 메모리 콜백을 받지 못합니다. 이는 파일에서 읽거나 소켓에서 읽을 때 가장 흔합니다. 커널이 메모리를 지정된 사용자 모드 버퍼에 쓰므로 전통적인 계측에서는 이벤트가 보이지 않습니다.
    • Microsoft TTD도 일반적으로 동일한 동작을 보이며, 시스템 호출을 모델링하지 않고 해결하기 까다롭습니다.

질문: Binary Ninja / Ghidra / ... 로 포팅될 예정인가요?

  • A: 가능하지만 당장은 아닙니다(상당한 인센티브가 없는 한). 연구 중심 프로젝트로서 주요 동기는 프로그램 실행을 구성하고 탐색하는 새로운 전략을 개발하는 데 있으며, 포팅이 아닙니다.

질문: 제 조직이 이 프로젝트를 지원하고 싶습니다. 어떻게 도울 수 있나요?

  • A: 자금이 없으면 이 프로젝트에 투자할 수 있는 시간이 제한됩니다. 귀 조직이 여기에 제시된 아이디어에 관심이 있고 전담 연구개발을 후원할 자본을 제공할 수 있다면 문의해 주세요.

향후 작업

시간과 동기 자금이 허락된다면 향후 작업에는 다음이 포함될 수 있습니다:

  • 트레이스에서 라이브러리 호출 필터링/응집
  • 레지스터/스택 보기를 위한 포인터 분석(예: 주석)
  • 네이티브 TraceFile 및 TraceReader 구현(예: 더 크고 빠른 트레이스)
  • 탐색 기록 + 북마크 보기(아마도 2-in-1?)
  • 더 풍부한 트레이스 정보, 관련 이벤트의 더 적극적인 인덱싱(예: 함수 호출)
  • 트레이스 지도 제작, 트레이스 지리의 요약 및 표현 개선
  • 'CPU 아키텍처' 선택/감지를 약간 덜 하드코딩되도록 개선
  • 더 많은 즉시 사용 가능한 트레이싱 브리지, DynamoRIO, TTD, RR, QEMU, Bochs, ...
  • Hex-Rays / 디컴파일된 뷰 지원(기본 보기 동기화 외)
  • 트레이스 자동 로드 또는 반복 작업을 위한 워크플로 개선
  • 차분 분석, 고수준 '트레이스 차이 비교'
  • 스레드 및 퀀텀의 더 나은 탐색 및 분석
  • '멀티 모듈' 트레이스(예: 전체 시스템 트레이스) 탐색 지원 개선
  • Binary Ninja 지원
  • ... ?

외부 기여, 이슈 및 기능 요청을 환영합니다. 향후 릴리스에서 고려되길 원하신다면 이 리포지토리의 develop 브랜치로 풀 리퀘스트를 보내주세요.

작성자

Markus Gaasedelen (@gaasedelen)

도구 다운로드