freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Drltrace:针对Windows和Linux应用程序的库调用跟踪器
2024-08-03 19:58:48

关于Drltrace

Drltrace是适用于Windows和Linux应用程序的动态 API调用跟踪器。Drltrace建立在DynamoRIO动态二进制检测框架之上,Drltrace最初由Derek Bruening 实现,并与DynamoRIO和DrMemory框架一起分发。此存储库包含Drltrace的独立版本,以及有关如何使用它进行恶意软件分析的附加脚本和材料。

功能介绍

1、速度足够快,可以对恶意样本进行分析,而不会被基于时间的反研究技术检测到。

2、支持 x86 和 x64(未来将支持 ARM)。

3、支持 Windows 和 Linux(未来将支持 macOS)。

4、支持自修改代码。

5、支持所有类型的库连接(静态和动态)。

6、标准反研究方法(反挂钩、反调试和反模拟)无法检测到。

7、用户可以轻松添加新的函数原型来告诉 drltrace 如何打印有关以前未知的 API 调用(甚至有关非系统 DLL)的更多详细信息。使用外部配置文件。

8、易于使用并可根据您的需要进行修改(无需额外的包要求,无需重量级的 GUI 界面)。

9、开源,代码清晰且文档齐全。您可以在 drltrace 上自由构建和使用自己的高级解决方案。

工具安装

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/mxmssh/drltrace.git

或者直接访问该项目的【Releases页面】下载最新版本的预编译Drltrace。

命令行选项

-logdir[.]                 打印库调用数据的日志目录

-only _from_app[false]    仅报告来自应用程序的库调用

-follow_children[true]     跟踪子进程

-print_ret_addr[false]     打印库调用的返回地址

-num_unknown_args[2]  要打印的未知libcall参数的数量

-num_max_args[6]      要打印的最大参数数

-default_config[true]    使用默认配置文件

-config[“”]             自定义配置文件的路径

-filter[filter.config]       白名单/黑名单文件的路径

-ignore_underscore[false]忽略以“_”开头的库例程名称

-help[false]             打印此消息

-version[false]          打印版本号

-verbose[1]            开启verbose模式

-use_config[true]       使用配置文件

-grepable[false]        可查询输出

配置文件语法

Drltrace支持外部配置文件,用户可以在其中描述Drltrace如何打印某些API调用的参数:

HANDLE|CreateRemoteThread|HANDLE|SECURITY_ATTRIBUTES*|size_t|THREAD_START_ROUTINE*|VOID*|DWORD|__out DWORD*

每个函数参数应该用 分隔|。第一个参数是返回类型,第二个参数是函数名称本身,其余的是函数参数。标记__out用于标记输出参数,___inout用于标记输入+输出参数。

工具运行演示

drltrace 的使用非常简单,用户需要指定一个日志目录和目标进程的名称,方式如下:

drltrace -logdir . -- calc.exe

就这样,该工具将在目标进程中注入所需的 DLL,启动检测,同时记录在目标进程中执行的所有库调用的信息:

~~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

输出的格式很简单,可以通过外部脚本轻松解析:

~~[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]

grep结合参数使用时,可以进行解析-grepable;这会将函数名称和参数全部打印在一行上:

~~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)}

模块唯一标识符表打印在日志文件的末尾:

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

运行截图

许可证协议

本项目的开发与发布遵循BSD-3-Clause开源许可协议。

项目地址

Drltrace:【GitHub传送门

参考资料

http://www.dynamorio.org/

https://www.youtube.com/watch?v=VGmvx2B5qdo

# 系统安全 # 追踪溯源 # API调用 # 代码跟踪 # 系统调用
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录