freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

HookCase:一款针对maxOS的逆向工程安全分析工具
2024-12-09 22:12:05
所属地 广西

关于HookCase

HookCase是一款针对maxOS的逆向工程安全分析工具,广大研究人员可以利用该工具在macOS上或对操作系统本身进行安全调试或执行逆向工程分析。

该工具重新实现并扩展了 Apple 的DYLD_INSERT_LIBRARIES功能。它可用于挂钩任何模块中的任何方法(甚至是未导出的方法,甚至是那些在其自己的模块的符号表中没有条目的方法)。在单个操作中,它可以应用于父进程及其所有子进程,无论子进程是否继承了其父进程的环境。它支持观察点。因此,HookCase 比DYLD_INSERT_LIBRARIES的功能强大得多,而且它也没有 Apple 对DYLD_INSERT_LIBRARIES的限制。

HookCase 可在 OS X 10.9(Mavericks)到 macOS 15(Sequoia)上运行。

工具要求

1、XCode

2、对应macOS版本相匹配的SDK

3、LLVM 3.9.0 Clang或LLVM 4.0.0 Clang

工具安装

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

git clone https://github.com/steven-michaud/HookCase.git

OS X 10.10

从命令行运行nvram boot-args以查看是否已经有一些启动参数。然后运行以下命令:

sudo nvram boot-args="<existing-boot-args> kext-dev-mode=1"

重新启动计算机。

OS X 10.11及更高版本上

重新启动计算机,在听到 Mac 启动声音后立即按下Command-R ,进入恢复分区。看到 Apple 标志时松开这些键。

选择实用程序-终端,然后在命令行中运行下列命令之一。第一个命令完全禁用 SIP。第二个命令启用除防止加载未签名的内核扩展之外的所有功能。第三个命令还禁用文件系统保护。

csrutil disable

csrutil enable --without kext

csrutil enable --without kext --without fs

退出终端并重新启动计算机。

现在复制HookCase.kext到/usr/local/sbin/目录。可能需要创建此目录,确保它归root:wheel拥有:

sudo cp -R HookCase.kext /usr/local/sbin

macOS 10.15 及更低版本

在 macOS 10.15 (Catalina) 及以下版本中,只需一个命令即可加载HookCase.kext到内核:

sudo kextutil /usr/local/sbin/HookCase.kext

因为它没有使用内核扩展签名证书进行签名,所以会看到以下错误(或类似的错误):

Diagnostics for HookCase.kext:

Code Signing Failure: code signature is invalid

kext-dev-mode allowing invalid signature -67050 0xFFFFFFFFFFFEFA16

for kext "HookCase.kext"

kext signature failure override allowing invalid signature -67050

0xFFFFFFFFFFFEFA16 for kext "/usr/local/sbin/HookCase.kext"

运行kextstat看看它是否确实加载。

HookCase.kext要从内核卸载,请运行以下命令:

sudo kextunload -b org.smichaud.HookCase

macOS 11及更高版本

在 macOS 11 (Big Sur) 及更高版本中,情况更加复杂。从此版本的 macOS 开始,HookCase 需要keepsyms=1启动参数。第三方内核扩展必须先加载到“辅助 kext 集合”中,然后才能加载到内核中。在此过程中,需要明确授予HookCase.kext加载权限,然后重新启动计算机。macOS 11 还使用一组新的命令行实用程序来加载和卸载内核扩展。

按照以下方法更改启动参数。为此,需要至少暂时禁用 SIP,重新启动计算机以使更改生效。

sudo nvram boot-args="keepsyms=1"

在终端提示符下运行以下命令:

sudo kmutil load -p /usr/local/sbin/HookCase.kext

几秒钟后,将出现“系统扩展已更新”对话框,告知HookCase 系统扩展已更新。单击“打开安全首选项”按钮,在“安全和隐私”偏好设置面板中,首先“单击锁进行更改”,然后单击 HookCase 旁边的“允许”按钮。将出现另一个对话框,告诉你“需要重新启动才能使用新的系统扩展”。默认选项是“现在不”,最好选择此选项。如果立即重新启动,可能会出现奇怪的情况。我通常会关闭所有打开的应用程序,然后重新启动。

计算机重新启动后,打开终端提示符并再次输入以下命令。它应该立即加载 HookCase.kext到内核中。

sudo kmutil load -p /usr/local/sbin/HookCase.kext

运行kextstat看看它是否确实加载。

运行以下命令之一HookCase.kext从内核卸载:

sudo kmutil unload -p /usr/local/sbin/HookCase.kext

sudo kumtil unload -b org.smichaud.HookCase

工具使用

动态修复钩子

HC_INSERT_LIBRARY=/full/path/to/hook.dylib /Applications/Safari.app/Contents/MacOS/Safari

事件查看

HC_INSERT_LIBRARY=/full/path/to/hook.dylib /Applications/Safari.app/Contents/MacOS/Safari

观察点watchpoint

HC_INSERT_LIBRARY=/full/path/to/hook.dylib "/Applications/Firefox Nightly.app/Contents/MacOS/firefox"

项目地址

HookCase:【GitHub传送门

参考资料

https://forums.developer.apple.com/thread/17452

https://books.google.com/books?id=K8vUkpOXhN4C&pg=PA73&lpg=PA73&dq=%22dyld+interposing%22+Singh.

http://developer.apple.com/technotes/tn2004/tn2124.html

https://developer.apple.com/library/mac/navigation/

# 逆向工程 # 逆向分析 # macOS # macOS系统 # macOS安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录