Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
DotNetHookerToolkit — 基于Frida的.NET Framework注入器和托管方法挂钩工具包,用于运行时跟踪、原生入口点解析和Windows进程的动态分析。 | Kitploit
工具/GitHubGitHub/sensepost/dotnethookertoolkit
动态分析 (沙盒)代码分析漏洞利用逆向工程调试器渗透测试二进制分析
GitHubsensepost/dotnethookertoolkit

DotNetHookerToolkit

基于Frida的.NET Framework注入器和托管方法挂钩工具包,用于运行时跟踪、原生入口点解析和Windows进程的动态分析。

查看仓库
115个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

InjectorCli + ManagedHookHostProj

本仓库包含两个设计协同使用的项目:

  • InjectorCli:一个基于 frida-clr(Frida.dll)的 .NET Framework 4.8 控制台注入器。
  • ManagedHookHostProj:一个 .NET Framework 4.8 辅助 DLL,具有原生导出(通过 3F .NET DllExport),用于将托管方法解析为原生入口点,使 Frida 能够附加。
  • TestTarget32:一个用于测试挂钩的示例 .NET Framework 4.8 程序。

这些项目面向 Windows,假定你正在检测自己拥有或有权测试的进程。

为什么需要两个项目

Frida 挂钩的是原生代码地址。在 .NET Framework 上,托管方法会通过 JIT 编译生成本地代码,但:

  • Frida 没有为 .NET Framework 提供稳定的“按名称挂钩托管方法”API。
  • 方法地址在 JIT 编译之前是未知的。

因此,整体模式是:

  1. 使用 InjectorCli 附加/生成目标进程,并加载一个 Frida JavaScript agent。
  2. 在目标进程内部,使用 ManagedHookHostProj.dll 来:
    • 通过反射查找托管方法。
    • 强制其 JIT 编译(RuntimeHelpers.PrepareMethod)。
    • 返回该方法的原生入口点(GetFunctionPointer)。
  3. 在 agent 中,调用 Interceptor.attach(entrypoint, ...) 来跟踪调用、记录参数,(可选)改变行为。

它们如何协同工作(数据流)

InjectorCli(C#)

  • 创建 Frida.DeviceManager 并选择一个设备。
  • 生成或附加到一个进程。
  • 从你的 JavaScript 文件创建 Frida.Script 并加载它。
  • 通过 script.Message 打印来自 agent 的消息。

Agent(JavaScript)

  • 可以直接挂钩常规 Win32 API(例如 CreateFileW、MessageBoxW)。
  • 可以选择通过 Module.load() 加载托管辅助 DLL。
  • 通过 NativeFunction 调用导出的辅助函数(例如 ResolveMethod)。
  • 使用辅助管理的 UTF-16 缓冲区(DescribeObjectUtf16 + FreeUtf16),而不是解析 CLR 字符串布局。
  • 在解析失败时,可以通过 GetLastErrorUtf16 查询辅助诊断信息。
  • 使用返回的地址来附加挂钩。

ManagedHookHostProj(带导出的 C# 类库)

  • 在目标进程的 CLR 内运行。
  • 使用反射定位你希望挂钩的方法(通过方法名 + 可选的参数签名)。
  • 强制 JIT 编译并返回原生入口点地址。
  • 提供安全的原始读写导出函数,用于处理 by-ref 值(ReadInt32 / WriteInt32 / WriteBool)。
  • 暴露线程局部的辅助诊断信息(GetLastErrorUtf16、ClearLastError)。

快速开始(32 位目标)

为了演示所有组件的用法,我们假定目标进程编译为32 位(WoW64)CPU 架构。

1) 构建 x86 版本的 frida-clr

  • 你需要一份x86 的 Frida.dll 来注入 x86 目标进程。
  • 示例命令(在 Visual Studio 开发人员命令提示符中执行):
root@kitploit:~
cd C:\path\to\frida-clr
configure.bat --prefix="%CD%\dist-x86" --build=windows-x86-md

cd build

make.bat

make.bat install

确认你已得到:

  • dist-x86\bin\Frida.dll(PE32)

2) 构建 x86 版本的 InjectorCli

  • 在 Visual Studio 中打开 InjectorCli.sln,并将生成目标设置为 Release | x86。

  • 或者在开发人员命令提示符中执行:

root@kitploit:~
msbuild \InjectorCli\InjectorCli.sln /p:Configuration=Release /p:Platform=x86
  • 如果你的 Frida.dll 不在 dist-x86\bin\Frida.dll 路径下,请相应更新 InjectorCli.csproj 中的引用。

3) (可选)构建 x86 版本的 ManagedHookHostProj

  • 在 Visual Studio 中打开 ManagedHookHostProj.sln,并将生成目标设置为 Release | x86。

  • 或者在开发人员命令提示符中执行:

root@kitploit:~
msbuild \ManagedHookHostProj\ManagedHookHostProj.sln /p:Configuration=Release /p:Platform=x86
  • 然后,你可以在开发人员命令提示符中运行以下命令来验证导出:
root@kitploit:~
dumpbin /exports examples\ManagedHookHostProj\bin\Release\ManagedHookHostProj.dll

注意:在 x86 和 StdCall 调用约定下,你可能会看到修饰后的导出名称(例如 _ResolveMethod@16)。提供的 agent 脚本包含一个回退机制,可以定位修饰后的名称。

4) 运行:原生追踪(不需要托管辅助 DLL)

  • 附加到现有 PID:
root@kitploit:~
FridaClrInjector.exe --pid 1234 --script hooks\hook_createfilew.js
  • 挂起生成进程,注入,然后恢复:
root@kitploit:~
FridaClrInjector.exe --spawn "C:\Windows\SysWOW64\notepad.exe" --script hooks\hook_messagebox.js

5) 运行:托管方法解析 + 追踪(使用辅助 DLL)

  • 首先编辑 hook_managed.js,设置:

    • helperDllPath 为已生成的 ManagedHookHostProj.dll
    • targetAssemblyPath、targetTypeName、targetMethodName、paramSig
  • 然后运行:

root@kitploit:~
FridaClrInjector.exe --pid 1234 --script "C:\path\to\hook_managed.js"

限制

  • 内联:在 Release 构建中,小型方法可能会被内联,导致挂钩无法触发。
  • 重载:使用 paramSig 选择正确的重载,否则可能挂钩到错误的方法。
  • 位数必须匹配:x86 目标需要 x86 注入器 + x86 Frida.dll + x86 辅助 DLL。
  • 原始托管引用不稳定:旧版的辅助导出函数(MakeString/Box*/DescribeObject)应仅作为兼容性使用。

更多文档

  • 注入器文档:

    • Injector README
    • 工作原理
    • 故障排除
  • 辅助 DLL 文档:

    • Helper DLL README
    • 工作原理
    • 故障排除
  • 示例测试目标文档:

    • TestTarget32 README
    • 运行测试用例
下载工具