开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 31192|回复: 8
收起左侧

[C#源码] c#实现InlineHook

[复制链接]
结帖率:100% (1/1)
发表于 2019-7-5 11:14:54 | 显示全部楼层 |阅读模式   山西省大同市
本帖最后由 123456ytr 于 2019-7-5 12:45 编辑

csharp_InlineHook

net 实现InlineHook
https://github.com/1694439208/csharp_InlineHook
csharp_InlineHook

目录

背景介绍

csharp_InlineHook,是一个可以将托管dll注入到非托管进程hook。

项目介绍

此项目设计初衷是提供一个可方便扩展的hook库。

写此库之前查阅大量的资料并只有两个实现
一个是esayhook 缺点是不支持任意点hook,只能hook系统api
一个是网友实现的只支持托管进程hook

本项目可以支持InlineHook 任意点hook 函数或者流程

使用非托管dll当作跳板用于加载非托管dll实现注入
剩下的hook全部在非托管实现
c++部分只是为了加载crl环境,加载c# dll,其余部分都是直接在net写的,hook和回调都在c#

使用说明

net可以直接编译,

dllmain.cpp自己新建项目编译   

使用样例

Inline_Hook.InlineHook(3212659,5, byteSource.ToArray(), getInt(Method),11+10,"接收消息",(obj) =>{
                StringBuilder sb = new StringBuilder();
                sb.Append("接收消息:");
                int a = 0x68;
                try
                {
                    if (obj.ESP == 0)
                        return;
                    int MsgPtr = NativeAPI.ReadMemoryValue(obj.ESP);
                    if (MsgPtr == 0)
                        return;
                    MsgPtr = NativeAPI.ReadMemoryValue(MsgPtr);
                    if (MsgPtr == 0)
                        return;
                    MsgPtr = NativeAPI.ReadMemoryValue(MsgPtr + 0x68);
                    if (MsgPtr == 0)
                        return;
                    int len = NativeAPI.lstrlenW(MsgPtr);
                    if (len == 0)
                        return;
                    sb.Append(NativeAPI.ReadMemoryStrValue(MsgPtr, len*2+2));
                    sb.Append("\r\n");
                    listBox1.Items.Add(sb.ToString());
                }
                catch (Exception es)
                {
                    File.AppendAllText("error.txt", es.Message);
                }
            });

549875165.png

其他

时间仓促,功能简陋,望您包涵。特别希望看到该项目对您哪怕一点点的帮助。任意的意见和建议,欢迎随意与我沟通,联系方式:

项目的Bug和改进点,可在OSChina上以issue的方式直接提交给我。

评分

参与人数 1好评 +1 精币 +8 收起 理由
赵六 + 1 + 8 支持开源~!感谢分享

查看全部评分

结帖率:0% (0/1)

签到天数: 9 天

发表于 2024-10-28 11:15:32 | 显示全部楼层   北京市北京市
C#原来还可以这样
回复 支持 反对

使用道具 举报

签到天数: 15 天

发表于 2021-5-11 17:58:04 | 显示全部楼层   重庆市重庆市
这个不错不错
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 1 天

 楼主| 发表于 2020-3-23 10:42:54 | 显示全部楼层   山西省大同市
keysk123 发表于 2019-7-7 20:48
牛逼啊 大佬 ,问下你获取WeChatWin.dll模块的句柄是怎么实现的,我在从c#里获取weChat的进程然后遍历模块 ...

利用了托管c++
  1. //获取模块基址
  2. DWORD getModuleAddress(System::String^ name)
  3. {
  4.         //String2WLPSTR(name)
  5.         //L"WeChatWin.dll"
  6.         
  7.         Netaddress = (PF)Marshal::GetFunctionPointerForDelegate(WeChetHook::getWeChetHook()).ToPointer();
  8.         return (DWORD)LoadLibrary(L"WeChatWin.dll");

  9. }
复制代码

github 看源码原理就是注入进程之后,相当于取本进程得dll地址
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2020-3-22 01:58:02 | 显示全部楼层   广西壮族自治区贺州市
原来c#专区那么干货
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2019-7-22 11:10:57 | 显示全部楼层   陕西省西安市
66666666666666
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2019-7-13 04:38:45 | 显示全部楼层   湖北省十堰市
支持开源!大佬就是大佬!
回复 支持 反对

使用道具 举报

发表于 2019-7-7 20:48:20 | 显示全部楼层   四川省成都市
牛逼啊 大佬 ,问下你获取WeChatWin.dll模块的句柄是怎么实现的,我在从c#里获取weChat的进程然后遍历模块,没有找到WeChatWin.dll,好像被隐藏了
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2019-7-7 18:44:04 | 显示全部楼层   广西壮族自治区贺州市
很好  大佬开源
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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