一:背景
1. 讲故事
为什么要开这么一个系列,是因为他可以对 .NET SDK 中的方法进行外挂,这种技术对解决程序的一些疑难杂症特别有用,在.NET高级调试 领域下大显神威,在我的训练营里也是花了一些篇幅来说这个,今天我准备用10篇左右来详细聊一聊,供学员和同行们欣赏,详细的文档参考:https://harmony.pardeike.net/articles/intro.html
二:harmony 解读
1. 概念
Harmony 是一个用于在运行时修补、替换和装饰 .NET 方法的库,兼容主流平台,比如 PC、Mac、Linux的32位和64位系统。它的注入模型图如下:

这张图很好理解,就是对你想要 hook 的方法,harmony 会对应生成一个动态方法,然后将 需要hook的原方法的il代码全部copy走,同时根据你的配置情况,在il代码之前和il代码之后 配置一个 AOP 逻辑,当然有需要的话,还可以对原方法的 il 代码借助 Transpilers 组件进行修改,总之非常强大。
2. harmony 有哪些注入点
用 harmony 做外挂,肯定要知道注入的一些点位,常见的有:
- 前缀补丁(Prefix)和后缀补丁(Postfix)
前缀补丁和后缀补丁非常好理解,就是我们理解的 AOP 功能,前者在原始方法执行前执行,后者是在原始方法执行后执行。
- 转译器补丁(Transpiler)
如果基本的 AOP 功能不能满足,这时候就必须更精细化的控制,对,就是直接修改 copy 之后的 il 代码,这个就比较🐂👃了,
- 终结器补丁(Finalizer)
如果构建出来的AOP补丁逻辑会抛异常的话,你又不想让这些异常污染正常的业务代码逻辑,这时候就可以用 终结器补丁 了,相当于对外屏蔽了人家不关心的东西,哈哈,否则容易造成恐慌。
- 反向补丁(Reverse Patch)
如果说 AOP 是纵向扩展,那反向补丁就是横向扩展,它的原理就是在 DynamicMethod 方法之前生成一个动态代码(Proxy),后续再跟大家详细聊。
三:案例场景介绍
1. 案例背景
说了这么说,还是说一些比较实际的案例可能大家更感兴趣,我的一个 .NET 程序平时都是好好的,不知道为啥线程突然就暴涨到了1000+,现在很惶恐,不知道是什么逻辑导致的,我用 windbg 观察后发现是都是普通的 Thread 类,输出如下:
0:013>

最低0.47元/天 解锁文章
2135

被折叠的 条评论
为什么被折叠?



