吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5118|回复: 12
收起左侧

[Android 原创] 如何通过c#使用frida

[复制链接]
kratos__bubu 发表于 2021-9-11 17:49
本帖最后由 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个全局变量

[C#] 纯文本查看 复制代码
        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脚本
[/font]
[font=Impact]        public static DeviceManager deviceManager { get; set; }//设备管理器 用于批量hook设备

     然后我们看一下他是怎么使用的,后面的代码就和他不怎么一样了 因为他是wpf 我用的控制台测试.
      获取所有设备:
[C#] 纯文本查看 复制代码
        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);//这里就一一打印出来了
            }
        }

    获取设备的进程:
[C#] 纯文本查看 复制代码
        public static  void getProcess()
        {
            var devices = deviceManager.EnumerateDevices();//这里这个EnumerateDevices()方法是个数组应该是根据索引获取设备但是不管我设置索引还是全部枚举
            foreach (var item in devices)//所以我们这里就不用devices[0]这样去获取还是直接foreach
            {
                Device device = item;
                var processes = item.EnumerateProcesses();
                foreach (var proc in processes)
                {
                    Console.WriteLine(proc);
                }
            }
            
        }

       附加设备实现交互:
[Asm] 纯文本查看 复制代码
        public static void injectApp(string pattern)
        {
            var devices = deviceManager.EnumerateDevices();//这pattern就是模式的意思 所以为了方便我都写一个方法了
            var count = devices.Length;
            Device device = devices[count];
            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(); 这个就是脱离附加

        }

         重新启动附加:
[C#] 纯文本查看 复制代码
        public static void resumeProc()
        {
            var devices = deviceManager.EnumerateDevices();
            var count = devices.Length;
            Device device = devices[count];
            device.Resume(999);//pid
        }


         调用js脚本:
[Asm] 纯文本查看 复制代码
        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!!!!!!!!!!!!!!!!!!!





免费评分

参与人数 6吾爱币 +7 热心值 +6 收起 理由
XhyEax + 3 + 1 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
dzc999 + 1 + 1 谢谢@Thanks!
menghen + 1 + 1 我很赞同!
芽衣 + 1 用心讨论,共获提升!
zyjia + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

tkme 发表于 2024-5-10 22:19
c#使用frida  这个类库很有意思,就是文档质料太少了,无从下手,官网Git 源码不是C# 看不懂,尴尬,期待楼主更新,提供更多这个类库的使用教程
 楼主| kratos__bubu 发表于 2021-9-12 11:36
Hmily 发表于 2021-9-12 08:27
@kratos__bubu 图片贴的有问题,编辑上传论坛本地贴到正文吧。

我这没有贴图片 老哥

点评

我看到图中有2个图?末尾就有一个没显示?  详情 回复 发表于 2021-9-12 12:20
HGZz 发表于 2021-9-11 23:00
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个图?末尾就有一个没显示?

好了 完事了 我也不知道为啥有两个图
isver2 发表于 2021-9-12 23:21
感谢分享。
nuller 发表于 2021-9-15 15:50
不错,感谢分享。
xcbr2014 发表于 2022-2-8 16:38
大佬 frida 那个版本?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 09:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表