kratos__bubu 发表于 2021-9-11 17:49

如何通过c#使用frida

本帖最后由 kratos__bubu 于 2021-9-12 12:27 编辑

HOW TO USE FRIDA WITH C#?
起因:
       习惯花括号语言之后,一直想找找关于FRIDA 的.NET BINDINGS的文章奈何我去百度去谷歌文章少之又少,无奈只好下载dll自己来琢磨踩坑.顺便借鉴一下作者oleavr写的:
https://github.com/riverar/frida-clr(他是用wpf写的),我们来看一下他是如何写的。

发展:

         首先导入dll,这里我们需要导入两个dll一个frida的dll(https://github.com/frida/frida/releases)下载clr版本的,然后导入winbase(C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\WindowsBase.dll)因为有个命名空间依赖此dll(System.Windows.Threading;)
            接着我们看一下他源码如何写的:      

         他先定义了5个全局变量

      public static ObservableCollection<Frida.Device> Devices { get; private set; }//这看名就知道是获取设备
      public static ObservableCollection<Frida.Process> Processes { get; private set; } //这看名就知道是获取进程
      public static Session Session { get; set; }//拿到交互会话
      public static Script Script { get; set; }//js脚本

      public static DeviceManager deviceManager { get; set; }//设备管理器 用于批量hook设备
   然后我们看一下他是怎么使用的,后面的代码就和他不怎么一样了 因为他是wpf 我用的控制台测试.
      获取所有设备:
      public static void getDevices()
      {
            Devices = new ObservableCollection<Frida.Device>();
            Processes = new ObservableCollection<Frida.Process>();
            deviceManager = new Frida.DeviceManager(Dispatcher.CurrentDispatcher);//他原先的写法是直接写了个Dispatcher类 但是我报错 所以我看了下他的方法这样写就没问题
            var devices = deviceManager.EnumerateDevices();//枚举所有的设备
            
            foreach (var item in devices)
            {
                Console.WriteLine(item);//这里就一一打印出来了
            }
      }
    获取设备的进程:
      public staticvoid getProcess()
      {
            var devices = deviceManager.EnumerateDevices();//这里这个EnumerateDevices()方法是个数组应该是根据索引获取设备但是不管我设置索引还是全部枚举
            foreach (var item in devices)//所以我们这里就不用devices这样去获取还是直接foreach
            {
                Device device = item;
                var processes = item.EnumerateProcesses();
                foreach (var proc in processes)
                {
                  Console.WriteLine(proc);
                }
            }
            
      }
   附加设备实现交互:
      public static void injectApp(string pattern)
      {
            var devices = deviceManager.EnumerateDevices();//这pattern就是模式的意思 所以为了方便我都写一个方法了
            var count = devices.Length;
            Device device = devices;
            if (pattern== "Spawn")//这个spawn模式我也很迷吃,除了了前面几个参数一个是你要hook的应用,后面几个参数我也不知道干啥的我也望大佬告诉我
            {
                device.Spawn("C:\\Windows\\notepad.exe", new string[] { "C:\\Windows\\notepad.exe", "C:\\document.txt" }, new string[] { }, new string[] { }, "");
               
            }
            else if (pattern== "Attach")//这个就是直接根据pid去附加当然spawn和attach区别还是很大的 这个就不用我说了
            {
                device.Attach(999);//PID
            }
            else
            {
                Console.WriteLine("FUCK U MAN!!!!");
            }
            //session.Detach(); 这个就是脱离附加

      }
         重新启动附加:
      public static void resumeProc()
      {
            var devices = deviceManager.EnumerateDevices();
            var count = devices.Length;
            Device device = devices;
            device.Resume(999);//pid
      }

         调用js脚本:
      public static void useScript(string jscode)
      {
            if (!string.IsNullOrEmpty(jscode))
            {
                Script=Session.CreateScript(jscode);//jscode就是js脚本啦
                Script.Message += new Frida.ScriptMessageHandler(script_Message);//这个script_Message就是把js里面send 出来的字符串打印出来
            }
      }
      public static void script_Message(object sender, Frida.ScriptMessageEventArgs e)
      {
            if (sender == Script)
            {
                Console.WriteLine(String.Format("Message from Script: {0}", e.Message));
                Console.WriteLine(String.Format("Data: {0}", e.Data == null ? "null" : String.Join(", ", e.Data)));
            }
      }

结束:
    关于c#如何去使用frida差不多就这些了.

后面我也打算用c#写一款基于frida的图形化工具.那样使用起来方便很多.



wink!!!!!!!!!!!!!!!!!!!





tkme 发表于 2024-5-10 22:19

c#使用frida这个类库很有意思,就是文档质料太少了,无从下手,官网Git 源码不是C# 看不懂,尴尬,期待楼主更新,提供更多这个类库的使用教程:Dweeqw

kratos__bubu 发表于 2021-9-12 11:36

Hmily 发表于 2021-9-12 08:27
@kratos__bubu 图片贴的有问题,编辑上传论坛本地贴到正文吧。

我这没有贴图片 老哥

HGZz 发表于 2021-9-11 23:00

军长salute

Hmily 发表于 2021-9-12 08:27

@kratos__bubu 图片贴的有问题,编辑上传论坛本地贴到正文吧。

aliwinner 发表于 2021-9-12 09:37

学习一下,感谢分享!!

Hmily 发表于 2021-9-12 12:20

kratos__bubu 发表于 2021-9-12 11:36
我这没有贴图片 老哥

我看到图中有2个图?末尾就有一个没显示?

kratos__bubu 发表于 2021-9-12 12:28

Hmily 发表于 2021-9-12 12:20
我看到图中有2个图?末尾就有一个没显示?

好了 完事了 我也不知道为啥有两个图:$qqq:$qqq

isver2 发表于 2021-9-12 23:21

感谢分享。

nuller 发表于 2021-9-15 15:50

不错,感谢分享。

xcbr2014 发表于 2022-2-8 16:38

大佬 frida 那个版本?
页: [1] 2
查看完整版本: 如何通过c#使用frida