TinyTracer - 언팩을 위한 API/명령어 트레이서 치트시트
TinyTracer (hasherezade 작성)는 Intel Pin을 기반으로 구축한 동적 추적 도구다. 타겟 실행 파일을 실행하고 API 호출과 선택된 명령어의 트레이스로그를 생성하며, 각 이벤트를 모듈에 상대적인 오프셋 (RVA)으로 로깅하여 재배치된 코드도 출력이 의미 있게 유지된다. Pin은 낮은 수준에서 계측하기 때문에 TinyTracer는 패커 스텁이 사용하는 대부분의 안티-디버그 트릭의 영향을 받지 않는다. 이는 샘플의 **원래 진입점 (OEP)**을 정확히 찾고 실제로 무엇을 하는지 보는 데 탁월하다.
승인된 멀웨어 분석용. 신뢰할 수 없는 샘플은 고립된 VM/샌드박스에서만 실행하라.
요구사항
- Intel Pin (동적 바이너리 계측 프레임워크)
- Windows (x86/x64) 분석 VM
- TinyTracer의 컴파일된
TinyTracer.dll (Pintool)
설치
| 단계 | 방법 |
|---|
| Pin 가져오기 | Intel Pin 다운로드 및 PIN_ROOT 설정 |
| TinyTracer 가져오기 | 릴리스 다운로드 또는 Pintool 빌드 |
| 헬퍼 스크립트 | 번들된 run_me.bat / 인스톨러 헬퍼 사용 |
| 확인 | 알려진 EXE에 대해 실행 및 .tag/로그 출력 확인 |
트레이스 실행
# 개념적 호출 (번들된 헬퍼 또는 pin 직접 사용)
pin.exe -t TinyTracer.dll -o output.tag -- target.exe
| 플래그 | 목적 |
|---|
-t TinyTracer.dll | TinyTracer를 Pintool로 로드 |
-o FILE | 트레이스로그 (.tag) 경로 |
-m MODULE | 모듈로 추적 제한 |
-b | 기본 블록 / 더 세밀한 이벤트 추적 |
-- target args | 추적할 프로그램 및 해당 인수 |
트레이스로그 포함 사항
| 항목 | 의미 |
|---|
RVA;called: FUNC | API 호출, 모듈-상대 주소 |
| Section transitions | 섹션 간 실행 이동 (언팩) |
| TLS callbacks | 조기 안티-분석/실행 훅 |
| Sub-calls | 선택적으로, 내부 호출 대상 |
RVA 기반 로깅이 핵심이다: 패커가 언팩하고 새 코드로 점프한 후에도, 항목은 모듈에 앙커로 남아 있어 디스어셈블러로 다시 매핑할 수 있다.
OEP 찾기
고전적 사용: 패커 스텁이 끝난 후 실행이 내려오는 곳을 보자.
| 단계 | 찾을 것 |
|---|
| 1 | TinyTracer 아래에서 패킹된 샘플 실행 |
| 2 | 이전에 기록되지 않은 섹션으로의 점프 보기 |
| 3 | 첫 번째 “실제” API 버스트 (GetModuleHandle 등) 언팩된 코드 표시 |
| 4 | RVA 참고 — 해당 영역이 OEP 후보 |
| 5 | 해당 시점에 덤프 (예: PE-sieve와 함께) 및 정적 분석 |
도구 키트와의 통합
일반적인 워크플로우
# 샘플 API 사용의 행동 추적
pin -t TinyTracer.dll -o sample.tag -- sample.exe
# → 의심스러운 API 시퀀스 (암호화, 네트워크, 주입)에 대해 sample.tag 검토
# 알려지지 않은 패커를 위한 OEP 사냥
# 1) 추적, 2) 언팩된 코드로 섹션 전환 찾기,
# 3) PE-sieve로 덤프, 4) 깨끗한 바이너리 분석
TinyTracer vs 관련 방법
| 측면 | TinyTracer | x64dbg (수동) | API Monitor |
|---|
| 근거 | Pin 계측 | 대화형 디버거 | API 훅킹 |
| 안티-디버그 저항 | 높음 | ScyllaHide 필요 | 중간 |
| 출력 | RVA 트레이스로그 | 대화형 | 라이브 API 로그 |
| 최고 | 자동 OEP/행동 추적 | 직접 스텝핑 | API 호출 보기 |
자료