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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
drltrace — Drltrace는 Windows 및 Linux 애플리케이션을 위한 라이브러리 호출 추적기입니다. | Kitploit
도구/GitHubGitHub/mxmssh/drltrace
Dynamic Analysis (Sandboxing)Reverse EngineeringDebuggersMalware AnalysisBinary Analysis
GitHubmxmssh/drltrace

drltrace

Drltrace는 Windows 및 Linux 애플리케이션을 위한 라이브러리 호출 추적기입니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Drltrace

Windows 테스트 빌드 build status

Linux 테스트 빌드 Build Status

Drltrace는 Windows 및 Linux 애플리케이션을 위한 동적 API 호출 추적기입니다. Drltrace는 DynamoRIO 동적 바이너리 계측 프레임워크 위에 구축되었습니다. Drltrace는 원래 Derek Bruening에 의해 구현되었으며 DynamoRIO 및 DrMemory 프레임워크와 함께 배포되었습니다. 이 저장소에는 맬웨어 분석에 사용하기 위한 추가 스크립트 및 자료와 함께 독립 실행형 버전의 drltrace가 포함되어 있습니다. 릴리스 빌드는 여기에서 다운로드할 수 있습니다.

사용법

drltrace의 사용법은 매우 간단합니다. 사용자는 다음과 같이 로그 디렉터리와 대상 프로세스 이름을 지정해야 합니다:

root@kitploit:~
drltrace -logdir . -- calc.exe

이게 전부입니다. 도구는 대상 프로세스에 필요한 DLL을 주입하고 계측을 시작하며, 동시에 대상 프로세스에서 실행되는 모든 라이브러리 호출에 대한 정보를 기록합니다:

root@kitploit:~
~~43600~~ msvcrt.dll!__wgetmainargs
    arg 0: 0x010d2364
    arg 1: 0x010d2368
    and return to module id:0, offset:0x193a
~~43600~~ ntdll.dll!EtwEventRegister
    arg 0: 0x002ff994
    arg 1: 0x010d1490
    and return to module id:0, offset:0x157e
~~43600~~ ntdll.dll!EtwEventSetInformation
    arg 0: 0x007b4b40
    arg 1: 0x00000033
    and return to module id:0, offset:0x15a1
~~43600~~ SHELL32.dll!ShellExecuteW
    arg 0: <null> (type=<unknown>, size=0x0)
    arg 1: <null> (type=wchar_t*, size=0x0)
    arg 2: calculator:// (type=wchar_t*, size=0x0)
    arg 3: <null> (type=wchar_t*, size=0x0)
    arg 4: <null> (type=wchar_t*, size=0x0)
    arg 5: 0x1 (type=int, size=0x4)
    and return to module id:0, offset:0x167d

출력 형식은 간단하며 외부 스크립트로 쉽게 구문 분석할 수 있습니다:

root@kitploit:~
~~[thread id]~~ [dll name]![api call name]
arg [arg #]: [value] (type=[Windows type name], size=[size of arg])
and return to module id:[module unique id], offset:[offset in memory]

-grepable 인수를 사용하면 grep으로 구문 분석할 수 있습니다. 이 인수는 함수 이름과 인수를 모두 한 줄에 출력합니다:

root@kitploit:~
~~4824~~ KERNELBASE.dll!CreateFileW {0: C:\Windows\Fonts\staticcache.dat (type=wchar_t*, size=0x0)} {1: 0x80000000 (type=DWORD, size=0x4)} {2: 0x3 (type=DWORD, size=0x4)} {3: 0x005cde8c (type=<unknown>*, size=0x0)} {4: 0x3 (type=DWORD, size=0x4)} {5: 0x80 (type=DWORD, size=0x4)}

모듈 고유 식별자 테이블은 로그 파일 끝에 출력됩니다:

root@kitploit:~
Module Table: version 3, count 70
Columns: id, containing_id, start, end, entry, checksum, timestamp, path
  0,   0, 0x010d0000, 0x010da000, 0x010d1b80, 0x0000f752, 0xb5fe3575,  C:\Windows\SysWOW64\calc.exe
  1,   1, 0x6d4c0000, 0x6d621000, 0x6d563940, 0x00136d65, 0x59ce1b0b,  C:\Users\Max\Downloads\drltrace\drltrace\dynamorio\lib32\release\dynamorio.dll
  2,   2, 0x73800000, 0x73975000, 0x7380dbf7, 0x00000000, 0x59ce1b0f,  C:\Users\Max\Downloads\drltrace\drltrace\bin\release/drltracelib.dll
  3,   3, 0x742f0000, 0x742fa000, 0x742f2a00, 0x0000c877, 0x0adc52c1,  C:\Windows\System32\CRYPTBASE.dll
  4,   4, 0x74300000, 0x74320000, 0x7430c9b0, 0x0002c617, 0x245970b4,  C:\Windows\System32\SspiCli.dll
  5,   5, 0x74410000, 0x74431000, 0x74416900, 0x0002a940, 0x88a53c1d,  C:\Windows\System32\GDI32.dll
  6,   6, 0x74440000, 0x74500000, 0x7446fb20, 0x000cc410, 0xd343d532,  C:\Windows\System32\RPCRT4.dll
  7,   7, 0x74500000, 0x74525000, 0x745047d0, 0x00026737, 0xa39c8991,  C:\Windows\System32\IMM32.DLL
  8,   8, 0x74550000, 0x745c7000, 0x7456e8a0, 0x00081857, 0x73b971e1,  C:\Windows\System32\advapi32.dll
  9,   9, 0x748f0000, 0x74929000, 0x748febd0, 0x00045303, 0xa58be652,  C:\Windows\System32\cfgmgr32.dll
 10,  10, 0x74930000, 0x75c78000, 0x74aa09d0, 0x01377aa6, 0x4b39926b,  C:\Windows\System32\SHELL32.dll

Drltrace는 라이브러리 간 호출을 쉽게 필터링하고 -only_from_app 옵션을 지정하여 대상 애플리케이션의 메인 모듈(또는 힙)에서 수행된 API 호출만 출력할 수 있습니다. 이는 대용량 로그를 생성하는 애플리케이션의 경우 매우 유용합니다. 보다 세밀한 제어를 위해 -filter 옵션을 사용하면 필터 구성 파일을 지정하여 특정 허용 목록 함수를 필터링하거나 차단 목록 함수를 무시할 수 있습니다(예제는 filter.config 파일 참조). Drltrace에는 특정 라이브러리의 API 호출을 필터링하거나 잠재적으로 흥미로운 API 호출 및 문자열만 출력하는 여러 유용한 외부 스크립트도 있습니다.

라이선스

Drltrace 메인 모듈은 BSD 라이선스로 배포됩니다.

drltrace에 필요한 일부 파일은 LGPL 라이선스로 배포됩니다. 자세한 내용은 소스 파일을 참조하세요.

동기

맬웨어 분석은 쉬운 작업이 아닙니다. Themida 및 Armadillo와 같은 정교한 소프트웨어 패커와 맬웨어 작성자가 작성한 수많은 무명 패커는 물론 코드 및 데이터 암호화로 인해 이러한 샘플의 정적 리버스 엔지니어링이 상당히 어려워지며(경우에 따라 완전히 불가능해짐) 맬웨어 분석가의 삶을 복잡하게 만듭니다. 이러한 경우 API 호출 추적은 실제 악성 의도를 이해하는 데 필요한 시간을 크게 줄이고 보호된 악성 코드에 대한 많은 기술적 세부 정보를 밝혀낼 수 있습니다.

전통적인 API 후킹 기술이 여러 솔루션에서 성공적으로 구현되었지만, 이 접근 방식은 맬웨어 작성자에 의해 잘 연구되었으며 쉽게 탐지되거나 우회될 수 있습니다. 또한 이러한 도구는 독점 제품으로서 독립형 중량 GUI 애플리케이션으로 배포되므로 기존 맬웨어 분석 워크플로우에 통합하기 어려운 경우가 많습니다.

Linux 세계를 보면 ltrace라는 훌륭한 도구가 있습니다. 단일 bash 명령을 사용하여 특정 실행 파일의 전체 API 호출 추적을 쉽게 얻을 수 있습니다.

왜 Windows에는 (Linux의 ltrace와 같은) 이러한 도구가 없으며, 또한 최신 맬웨어에서 사용하는 안티-리서치 트릭에 대해 투명한 도구는 없을까요?

이를 가능하게 하는 기술이 있습니다: 동적 바이너리 계측(DBI)입니다. DBI는 계측 코드를 삽입하여 런타임 시 바이너리 애플리케이션의 동작을 분석하는 기술입니다.

그러나 맬웨어 분석에 DBI를 적용하는 것은 언패킹 자동화와 명령어, 기본 블록, 함수 호출 추적에 대한 몇 가지 개념 증명에 지나치게 제한되어 있습니다. 우리가 아는 한, drltrace는 DBI를 기반으로 한 최초의 API 호출 추적 도구로서 실제 맬웨어 분석에 사용될 수 있습니다. 우리는 위키에서 drltrace가 IDA나 디버거를 시작하지 않고도 몇 분 만에 정교한 악성 샘플의 많은 내부 기술 세부 정보를 밝혀낼 수 있었던 여러 맬웨어 분석 예제를 제공했습니다.

Drltrace가 대단한 이유

  • 시간 기반 안티-리서치 기술에 탐지되지 않고 악성 샘플을 분석할 수 있을 만큼 빠릅니다.
  • x86 및 x64(향후 ARM)를 지원합니다.
  • Windows 및 Linux(향후 macOS)를 지원합니다.
  • 자체 수정 코드를 지원합니다.
  • 모든 유형의 라이브러리 연결(정적 및 동적)을 지원합니다.
  • 표준 안티-리서치 접근 방식(안티-후킹, 안티-디버깅, 안티-에뮬레이션)으로 탐지되지 않습니다.
  • 사용자는 새로운 함수 프로토타입을 쉽게 추가하여 drltrace가 이전에 알려지지 않은 API 호출(비시스템 DLL도 포함)에 대한 자세한 정보를 출력하도록 지시할 수 있습니다. 외부 구성 파일이 사용됩니다.
  • 자신의 목적에 맞게 사용 및 수정하기 쉽습니다(추가 패키지 요구 사항 없음, 중량 GUI 인터페이스 없음).
  • 오픈 소스이며 코드가 명확하고 잘 문서화되어 있습니다. drltrace 위에 자신만의 고급 솔루션을 자유롭게 구축하고 사용할 수 있습니다.

명령줄 옵션

root@kitploit:~
 -logdir              [     .]  Log directory to print library call data
 -only_from_app       [ false]  Reports only library calls from the app
 -follow_children     [  true]  Trace child processes
 -print_ret_addr      [ false]  Print library call's return address
 -num_unknown_args    [     2]  Number of unknown libcall args to print
 -num_max_args        [     6]  Maximum number of arguments to print
 -default_config      [  true]  Use default config file.
 -config              [    ""]  The path to custom config file.
 -filter              [filter.config]  The path of the whitelist/blacklist file.
 -ignore_underscore   [ false]  Ignores library routine names starting with "_".
 -help                [ false]  Print this message.
 -version             [ false]  Print version number.
 -verbose             [     1]  Change verbosity.
 -use_config          [  true]  Use config file
 -grepable            [ false]  Grepable output

구성 파일 구문

Drltrace는 사용자가 특정 API 호출에 대한 인수를 어떻게 출력할지 설명할 수 있는 외부 구성 파일을 지원합니다.

root@kitploit:~
HANDLE|CreateRemoteThread|HANDLE|SECURITY_ATTRIBUTES*|size_t|THREAD_START_ROUTINE*|VOID*|DWORD|__out DWORD*

각 함수 인수는 |로 구분해야 합니다. 첫 번째 인수는 반환 유형, 두 번째 인수는 함수 이름 자체이며 나머지는 함수 인수입니다. 토큰 __out은 출력 인수를 표시하고 ___inout은 입력+출력 인수를 표시합니다.

맬웨어 분석 예제

복잡한 맬웨어 분석에 drltrace를 사용하는 방법에 대한 예제는 Wiki 페이지에서 확인할 수 있습니다.

로그 시각화

로그 파일 작업을 더 쉽게 하기 위해 api_calls_viz.py라는 스크립트를 구현했습니다. 이 스크립트는 각 픽셀 색상이 고유한 API 호출을 나타내는 RGB 이미지를 생성하는 데 사용할 수 있습니다. 예를 들어 아래 그림은 WannaCry 맬웨어의 로그 파일을 나타냅니다.

API calls picture

그림의 큰 녹색 영역은 파일 확장자(예: docx, xls, py)를 선택하여 암호화하는 데 사용되는 API 호출(wcscmp/wcsicmp)을 나타냅니다. 보라색 영역은 디스크의 파일과 폴더를 열거하고 암호화하는 데 사용되는 API 호출(FindFirstFile/FindNextFile/CryptEncrypt)을 나타냅니다.

이 스크립트는 또한 생성된 RGB 이미지의 HTML 표현을 생성할 수 있으며, 각 요소를 선택하여 API 호출 이름을 표시할 수 있습니다.

API calls picture

Raw HTML File.

자세한 내용은 api_calls_viz 디렉터리를 참조하세요.

빌드 방법

자세한 매뉴얼은 Wiki 페이지에서 확인할 수 있습니다.

OS 지원

Windows, Linux (향후 macOS).

CPU 아키텍처 지원

x86, x64 (ARM도 리스트에 포함).

언어

C 및 C++ 표준 라이브러리 (로그 처리 스크립트는 Python으로 작성).

기술적 세부 사항

우리는 동적 바이너리 계측 프레임워크 DynamoRIO 위에 API 호출 추적기를 구현하기로 결정했습니다. Drltrace는 DynamoRIO에게 LoadLibrary 호출의 계측을 수행하도록 요청하여 대상 프로세스에서 새 라이브러리가 로드되는 것을 처리할 수 있게 합니다. 프로세스가 새 라이브러리를 로드하려고 하면 DynamoRIO는 제어 흐름을 drltracelib.dll로 리디렉션합니다. 그러면 drltrace는 새로 로드된 DLL에서 내보낸 함수를 열거하고 각 함수에 대해 특별한 콜백을 등록합니다. 따라서 맬웨어가 특정 내보낸 함수를 호출하면 drltrace의 콜백이 이 함수 전에 실행되어 함수 이름 및 인수와 같은 필요한 모든 정보를 기록할 수 있습니다. 함수 후에 다른 콜백을 등록하여 실행 결과를 저장할 수도 있습니다.

왜 Intel Pin이 아닌가? 다음과 같은 이유로 DynamoRIO를 사용하기로 결정했습니다:

  1. DynamoRIO의 소스 코드는 github.com에서 제공되며 BSD 라이선스로 배포되는 반면 Intel Pin은 독점 소프트웨어입니다.
  2. 개발 당시 DynamoRIO의 기본 요구 사항 중 하나는 계측된 실행 파일에 대한 투명성이었습니다.
  3. DynamoRIO는 코드 변환에 기반한 다른 계측 기술을 사용하는 반면 Intel PIN은 특수 트램펄린을 사용하며, 이는 분석된 실행 파일에 대해 투명하지 않으며 맬웨어에 의해 탐지될 수 있습니다.

향후 작업

  1. drltrace는 표준 안티-리서치 트릭으로 탐지할 수 없지만, DBI 엔진 자체는 1, 2에서 보여준 바와 같이 탐지될 수 있습니다. DynamoRIO를 이러한 트릭에 대해 저항성 있게 만드는 것은 향후 작업의 중요한 경로입니다.
  2. 현재 drltrace는 원시 로그를 출력하고 중요한 문자열 및 라이브러리 호출을 출력하는 여러 스크립트를 제공합니다. 향후에는 (아마도 YARA 규칙을 적용하여) 맬웨어에서 지표가 되는 동작을 자동으로 선택할 수 있는 휴리스틱을 추가할 계획입니다.
  3. 현재 DynamoRIO는 ARM 아키텍처에 대한 베타 지원을 제공합니다. drltrace를 ARM에서 테스트하고 포팅해야 합니다.
  4. Drltrace는 맬웨어가 원격 프로세스에 코드를 주입하는 상황을 지원하지 않습니다. 이러한 경우 DynamoRIO에게 모든 새로 생성된 프로세스에 drltrace를 주입하도록 지시할 수 있습니다(drrun.exe의 -syswide_on 옵션). 그러나 향후에는 이러한 상황에 대한 특별 지원을 drltrace에 구현해야 합니다.

이슈 트래커에는 drltrace의 미래에 대한 자세한 내용이 포함되어 있습니다.

감사의 말

Maksim Shudrak https://github.com/mxmssh

Derek Bruening https://github.com/derekbruening

Joe Testa https://github.com/jtesta

도구 다운로드