Skip to content

Commit dd43484

Browse files
committed
支持多态dll。
1 parent 93c81f9 commit dd43484

File tree

8 files changed

+93
-7
lines changed

8 files changed

+93
-7
lines changed

docs/beginner/work-with-hybridclr.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
本工程演示如何将Obfuz与HybridCLR一起使用,完整示例项目参见[WorkWithHybridCLR](https://github.com/focus-creative-games/obfuz-samples/tree/main/WorkWithHybridCLR)
44

5-
详细文档见[与HybridCLR协同工作](../manual/work-with-hybridclr)
5+
详细文档见[与HybridCLR协同工作](../manual/hybridclr/work-with-hybridclr)
66

77
## 安装
88

docs/beginner/work-with-xlua.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
本工程演示如何将Obfuz与XLua一起使用,完整示例项目参见[WorkWithXLua](https://github.com/focus-creative-games/obfuz-samples/tree/main/WorkWithXLua)
44

5-
详细文档见[与XLua协同工作](../manual/work-with-xlua)
5+
详细文档见[与XLua协同工作](../manual/xlua/work-with-xlua)
66

77
## 安装
88

docs/manual/configuration.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,3 +166,13 @@ Obfuz提供了极其丰富的配置选项和灵活的混淆规则配置文件,
166166
|-|-|
167167
|Min Instruction Count Of Basic Block To Obfuscated|被混淆的[基本块](https://en.wikipedia.org/wiki/Basic_block)的最小指令数|
168168
|Rule Files| 加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见[函数调用混淆](./call-obfuscation)|
169+
170+
### PolyMorphic Dll Settings
171+
172+
多态dll相关设置。 补充文档见[多态dll文件](./hybridclr/polymorphic-dll)
173+
174+
|选项|描述|
175+
|-|-|
176+
|enable|是否开启多态dll支持。开启后会在`HybridCLR/ObfuzExtentions/GenerateAll`生成支持多态dll的代码。|
177+
|codeGenerationSecretKey| 生成多态dll代码时使用的随机化密钥|
178+
|**disableLoadStandardDll**|**是否禁止加载标准结构的dll**。开启此项后`Assembly.Load`或者`RuntimeApi.LoadMetadataForAOTAssembly`必须传入多态dll,如果传入标准dll,会返回错误。|
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# 多态dll文件
2+
3+
默认情况下`Assembly.Load`需要传入标准的dll文件,意味着恶意破解者有办法获得完整的原始dll文件,或者加载恶意的第三方dll,这给开发者带来巨大的安全风险。
4+
即使对dll文件进行加密,恶意破解者只要hook了`Assembly.Load`入口位置,仍然可以dump出完整的原始dll文件。
5+
6+
obfuz通过支持多态dll文件,有效对抗这种dump或者篡改dll的行为。
7+
8+
## 特性
9+
10+
- 全新的dll文件结构,无法再被ILSpy等常规dll反编译工具打开。
11+
- 全新的metadata结构,无法再被轻易还原为原始的CLI metadata数据。
12+
- **支持dll文件结构和metadata结构随机化**,几十个metadata结构和几百个元数据字段完全随机化,每个开发者的最终dll结构都不一样,巨幅提高恶意破解者的破解成本。
13+
- 支持禁止加载标准的dll文件,阻止通过调用`Assembly.Load`加载恶意dll。
14+
15+
## 设置
16+
17+
`ObfuzSettings.PolymorphicDllSettings`中包含多态dll相关设置,详细见文档[设置](../configuration)
18+
19+
:::tip
20+
21+
HybridCLR自v8.4.0版本起支持自定义dll文件结构,要开启多态dll支持,要求HybridCLR版本不低于`v8.4.0`
22+
23+
:::
24+
25+
### codeGenerationSecretKey
26+
27+
codeGenerationSecretKey是生成多态dll代码时使用的随机化密钥。**请不要使用默认值**,长度在10以上并且使用较复杂的字符组合。
28+
29+
修改codeGenerationSecretKey后会生成完全不同的dll文件结构,这个文件结构固化在二进制代码中,在发布App后完全固定。
30+
发布热更新dll时请**不要**修改这个值,会导致加载失败!
31+
32+
建议是发布新App包时更换这个值。如果同时存在多个版本的App包,并想使用相同的多态dll,请保持codeGenerationSecretKey一致。
33+
34+
### disableLoadStandardDll
35+
36+
是否禁止加载标准结构的dll。开启此项后Assembly.Load或者RuntimeApi.LoadMetadataForAOTAssembly必须传入多态dll,如果传入标准dll,会返回错误。
37+
38+
开启此选项可以有效对抗恶意破解者运行时注入第三方dll,因为它们很难构造出符合多态dll结构的dll,大幅提高注入成本。
39+
40+
## 让HybridCLR支持多态dll
41+
42+
已经在`HybridCLR/ObfuzExtension/GenerateAll`命令中插入了生成多态dll代码的调用。只要`PolymorphicDllSettings.enable`为true就会自动在`GenerateAll`
43+
生成相关代码。
44+
45+
如果想主动调用生成,可以调用`ObfuscateUtil::GeneratePolymorphicCodes(string libil2cppDir)`函数。
46+
47+
## 生成多态dll
48+
49+
调用`ObfuscateUtil::GeneratePolymorphicDll(string originalDllPath, string outputDllPath)`生成多态dll。
50+
51+
普通热更新程序集、DHE程序集、**补充元数据程序集**都可以使用多态dll。

docs/manual/work-with-hybridclr.md renamed to docs/manual/hybridclr/work-with-hybridclr.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ HybridCLR工作流并未考虑到代码混淆的情况,如果直接使用会
77
### 同时安装Obfuz和HybridCLR后dnlib插件冲突的问题
88

99
Obfuz和HybridCLR插件都包含了dnlib插件。对于Unity 2021及更早版本,当两个package中包含同名插件时会产生错误。
10-
解决办法为将这两个插件之一(不必两个都改为本地安装)改为本地安装,即将Obfuz或HybridCLR下载到本地,移除其中包含的dnlib.dll,再放到Packages目录下。
10+
解决办法为将HybridCLR下载到本地,移除其中包含的dnlib.dll,再放到Packages目录下。
1111

1212
### 被混淆的AOT程序集的裁剪问题
1313

@@ -38,3 +38,7 @@ obfuz4hybridclr提供了适合混淆工作流的GenerateAll命令,请在构建
3838
obfuz4hybridclr提供了同时完成编译和混淆热更新代码的命令,请替换`HybridCLR/Generate/ActiveBuildTarget``HybridCLR/Obfuz/Extension/CompileAndObfuscateDll`
3939

4040
如果是代码中调用`HybridCLR.Editor.Commands.CompileDllCommand.CompileDll`,则替换为`Obfuz4HybridCLR.PrebuildCommandExt.CompileAndObfuscateDll`
41+
42+
## 使用多态dll
43+
44+
多态dll是一种全新的支持随机化的自定义文件结构,可以有效对抗恶意破解和篡改。详细文档见[多态dll文件](./polymorphic-dll)

docs/manual/run-obfuscation-standalonely.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
:::warning
66
如果你正在使用HybridCLR,强烈使用`com.cod-philosphy.obfuz4hybridclr` package,因为它已经提供所有HybridCLR热更新需要的代码,使用更方便简单。
7-
详细文档见[与HybridCLR协同工作](./work-with-hybridclr)
7+
详细文档见[与HybridCLR协同工作](./hybridclr/work-with-hybridclr)
88
:::
99

1010
## 生成需要被混淆的dll

docs/manual/work-with-xlua.md renamed to docs/manual/xlua/work-with-xlua.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ xLua注册C#类型时并不是直接使用类型名字符串,而是调用了Ty
2020
但很显然,如果注册类型很多,极容易写错。另外随着类型名重构,也很有可能忘了同步修改这儿的代码。
2121

2222
幸运的是,`ObfuscationInstincts::RegisterReflectionType`提供一种非常便捷的注册方式,你使用`ObfuscationInstincts::RegisterReflectionType<My.TestClass>()`即可
23-
正确注册类型名与原始名的映射关系。这其中有一些黑科技,具体原理见[ObfuscationInstrincts](./obfuscation-instincts)
23+
正确注册类型名与原始名的映射关系。这其中有一些黑科技,具体原理见[ObfuscationInstrincts](../obfuscation-instincts)
2424

2525
:::warning
2626

sidebars.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,29 @@ const sidebars: SidebarsConfig = {
7171
'manual/serialization',
7272
'manual/reflection',
7373
'manual/impact-dll-size',
74-
'manual/work-with-hybridclr',
75-
'manual/work-with-xlua',
74+
{
75+
type: 'category',
76+
label: 'HybridCLR',
77+
link: {
78+
type: 'generated-index',
79+
slug: '/manual/hybridclr',
80+
},
81+
items: [
82+
'manual/hybridclr/work-with-hybridclr',
83+
'manual/hybridclr/polymorphic-dll',
84+
]
85+
},
86+
{
87+
type: 'category',
88+
label: 'xLua',
89+
link: {
90+
type: 'generated-index',
91+
slug: '/manual/xlua',
92+
},
93+
items: [
94+
'manual/xlua/work-with-xlua',
95+
]
96+
},
7697
'manual/deobfuscate-stacktrace',
7798
],
7899
},

0 commit comments

Comments
 (0)