
Инжектор .NET Framework на основе Frida и инструментарий для перехвата управляемых методов для трассировки во время выполнения, разрешения нативных точек входа и динамического анализа процессов Windows.
Этот репозиторий содержит два проекта, которые предназначены для совместного использования:
Frida.dll)Эти проекты ориентированы на Windows и предполагают, что вы инструментируете процессы, которыми владеете или имеете разрешение на тестирование.
Frida перехватывает адреса нативного кода. В .NET Framework управляемые методы JIT-компилируются в нативный код, однако:
Итак, общая схема такова:
InjectorCli, чтобы присоединиться/запустить цель и загрузить Frida JavaScript-агент.ManagedHookHostProj.dll, чтобы:
RuntimeHelpers.PrepareMethod)GetFunctionPointer)Interceptor.attach(entrypoint, ...) для трассировки вызовов/логирования аргументов / (опционально) изменения поведения.InjectorCli (C#)
Frida.DeviceManager и выбирает устройствоFrida.Script из вашего JavaScript-файла и загружает егоscript.MessageAgent (JavaScript)
CreateFileW, MessageBoxW)Module.load()ResolveMethod) через NativeFunctionDescribeObjectUtf16 + FreeUtf16) вместо разбора строковых макетов CLRGetLastErrorUtf16 при сбое разрешенияManagedHookHostProj (C#-библиотека классов с экспортами)
ReadInt32 / WriteInt32 / WriteBool)GetLastErrorUtf16, ClearLastError)Для иллюстрации работы всех компонентов предположим, что целевой процесс скомпилирован для 32-битной архитектуры (WoW64).
frida-clr x86Frida.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 (x86)Откройте InjectorCli.sln в Visual Studio и установите конфигурацию сборки Release | x86.
Или из командной строки разработчика:
msbuild \InjectorCli\InjectorCli.sln /p:Configuration=Release /p:Platform=x86
Frida.dll находится не по пути dist-x86\bin\Frida.dll, обновите ссылку в InjectorCli.csproj соответствующим образом.ManagedHookHostProj (x86)Откройте ManagedHookHostProj.sln в Visual Studio и установите конфигурацию сборки Release | x86.
Или из командной строки разработчика:
msbuild \ManagedHookHostProj\ManagedHookHostProj.sln /p:Configuration=Release /p:Platform=x86
dumpbin /exports examples\ManagedHookHostProj\bin\Release\ManagedHookHostProj.dll
Примечание: на x86 + StdCall вы можете увидеть декорированные имена экспортов (например, _ResolveMethod@16). Предоставленный скрипт агента включает запасной вариант для поиска декорированных имён.
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:
Документация тестового примера: