freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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调用 # 代码跟踪 # 系统调用
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录