本仓库包含两个设计协同使用的项目:
Frida.dll)的 .NET Framework 4.8 控制台注入器。这些项目面向 Windows,假定你正在检测自己拥有或有权测试的进程。
Frida 挂钩的是原生代码地址。在 .NET Framework 上,托管方法会通过 JIT 编译生成本地代码,但:
因此,整体模式是:
InjectorCli 附加/生成目标进程,并加载一个 Frida JavaScript agent。ManagedHookHostProj.dll 来:
RuntimeHelpers.PrepareMethod)。GetFunctionPointer)。Interceptor.attach(entrypoint, ...) 来跟踪调用、记录参数,(可选)改变行为。InjectorCli(C#)
Frida.DeviceManager 并选择一个设备。Frida.Script 并加载它。script.Message 打印来自 agent 的消息。Agent(JavaScript)
CreateFileW、MessageBoxW)。Module.load() 加载托管辅助 DLL。NativeFunction 调用导出的辅助函数(例如 ResolveMethod)。DescribeObjectUtf16 + FreeUtf16),而不是解析 CLR 字符串布局。GetLastErrorUtf16 查询辅助诊断信息。ManagedHookHostProj(带导出的 C# 类库)
ReadInt32 / WriteInt32 / WriteBool)。GetLastErrorUtf16、ClearLastError)。为了演示所有组件的用法,我们假定目标进程编译为32 位(WoW64)CPU 架构。
frida-clrFrida.dll 来注入 x86 目标进程。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)InjectorCli在 Visual Studio 中打开 InjectorCli.sln,并将生成目标设置为 Release | x86。
或者在开发人员命令提示符中执行:
msbuild \InjectorCli\InjectorCli.sln /p:Configuration=Release /p:Platform=x86
Frida.dll 不在 dist-x86\bin\Frida.dll 路径下,请相应更新 InjectorCli.csproj 中的引用。ManagedHookHostProj在 Visual Studio 中打开 ManagedHookHostProj.sln,并将生成目标设置为 Release | x86。
或者在开发人员命令提示符中执行:
msbuild \ManagedHookHostProj\ManagedHookHostProj.sln /p:Configuration=Release /p:Platform=x86
dumpbin /exports examples\ManagedHookHostProj\bin\Release\ManagedHookHostProj.dll
注意:在 x86 和 StdCall 调用约定下,你可能会看到修饰后的导出名称(例如 _ResolveMethod@16)。提供的 agent 脚本包含一个回退机制,可以定位修饰后的名称。
FridaClrInjector.exe --pid 1234 --script hooks\hook_createfilew.js
FridaClrInjector.exe --spawn "C:\Windows\SysWOW64\notepad.exe" --script hooks\hook_messagebox.js
首先编辑 hook_managed.js,设置:
helperDllPath 为已生成的 ManagedHookHostProj.dlltargetAssemblyPath、targetTypeName、targetMethodName、paramSig然后运行:
FridaClrInjector.exe --pid 1234 --script "C:\path\to\hook_managed.js"
paramSig 选择正确的重载,否则可能挂钩到错误的方法。Frida.dll + x86 辅助 DLL。MakeString/Box*/DescribeObject)应仅作为兼容性使用。注入器文档:
辅助 DLL 文档:
示例测试目标文档: