Skip to content

Commit 7b456b2

Browse files
committed
新增移除常量字段 pass的文档
1 parent 7f73dcd commit 7b456b2

File tree

5 files changed

+91
-7
lines changed

5 files changed

+91
-7
lines changed

docs/manual/configuration.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,14 @@ Obfuz提供了极其丰富的配置选项和灵活的混淆规则配置文件,
121121
|Encryption level|加密级别,取值范围为`[1, 4]`,默认为1。 加密级别越高,加密越复杂,解密也会越耗时。|
122122
|Rule Files| 加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见[常量混淆](./const-encryption)|
123123

124+
### Remove Const Field Settings
125+
126+
移除const常量字段相关设置。支持通过规则文件精细地控制要保留哪些const字段。补充文档见[移除常量字段](./remove-const-field)
127+
128+
|选项|描述|
129+
|-|-|
130+
|Rule Files| 加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见[移除常量字段](./remove-const-field)|
131+
124132
### Eval Stack Obfus Settings
125133

126134
执行栈的混淆设置。支持通过规则文件非常精细地控制范围和加密效果。补充文档见[执行栈混淆](./eval-stack-obfuscation)

docs/manual/field-encryption.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ class A
7878
<obfuz>
7979
<assembly name="Obfus1">
8080
<type name="*">
81-
<field name="a" encrypt="1"/>
82-
<field name="a" encrypt="0"/>
81+
<field name="a"/>
82+
<field name="b"/>
8383
</type>
8484
</assembly>
8585
</obfuz>
@@ -108,5 +108,4 @@ assembly的子元素只能为type。
108108

109109
|属性|可空|默认值|描述|
110110
|-|-|-|-|
111-
|name|||类型名的通配字符串,如果为空表示匹配所有类型|
112-
|encrypt||0|是否加密此字段|
111+
|name|||被加密的字段名。字段名的通配字符串,如果为空表示匹配所有类型|

docs/manual/obfuscation-pass.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ Obfuz的混淆(或加密)流程的执行方式为先判定对目标是否启
2222

2323
- Symbol Obfuscation(符号混淆)
2424
- Const Encryption(常量加密)
25+
- Remove Const Field (移除const常量字段)
2526
- Eval Stack Obfusaction (局部与临时变量混淆)
2627
- Expr Obfusaction (表达式混淆)
2728
- Field Encryption(字段加密)
@@ -32,8 +33,6 @@ Obfuz的混淆(或加密)流程的执行方式为先判定对目标是否启
3233

3334
后续将会支持的Obfuscation Pass有:
3435

35-
- Expression Obfusaction(表达式混淆)
36-
- ControlFlow Obfuscation(控制流混淆)
3736
- 加水印
3837
- Anti-Debugger、Anti-Damper、Anti-Dumping
3938

@@ -100,7 +99,7 @@ enable与disable属性用于设置当前规则中开启或者禁用哪些Pass。
10099

101100
- 如果值以`+`开关,则表示是在父节点上启用的pass上进行增量修改。
102101
- 如果没有以`+`开启,则表示在`ObfuscationPassSettings.EnabledPasses`的值的基础上启用或者禁用某些Pass。
103-
- PASS_NAME的取值可以为`ConstEncrypt、FieldEncrypt、SymbolObfus、CallObfus、ExprObfus、ControlFlowObfus、EvalStackObfus`等Pass类型。详见`Obfuz.ObfusPasses.ObfuscationPassType`类定义。
102+
- PASS_NAME的取值可以为`ConstEncrypt、RemoveConstField、FieldEncrypt、SymbolObfus、CallObfus、ExprObfus、ControlFlowObfus、EvalStackObfus`等Pass类型。详见`Obfuz.ObfusPasses.ObfuscationPassType`类定义。
104103

105104
例如,假设EnabledPass=`SymbolObfus|ConstEncrypt|FieldEncrypt`,使用以下配置。
106105

docs/manual/remove-const-field.md

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# 移除常量字段
2+
3+
const常量字段大多数情况下只在源码中有意义,编译为dll时会inline对常量字段的访问,即编译后的代码并不会引用const字段。
4+
因此移除const字段并不会引发代码错误,除非需要反射访问该字段。
5+
6+
移除const字段可以减少混淆后的代码的有效信息,因此混淆时默认会移除这些字段。
7+
8+
## 设置
9+
10+
`ObfuzSettings.RemoveConstFieldSettings`中包含相关设置,详细见文档[设置](./configuration)
11+
12+
## `[ObfuzIgnore]`
13+
14+
`[ObfuzIgnore(ObfuzScope.Field)]`影响的常量字段不会被移除。
15+
16+
例如下面的ConstEncryptTestClass类的removedField会被移除,而preservedField和preservedField2字段都会被保留。
17+
18+
```csharp
19+
class ConstEncryptTestClass
20+
{
21+
// This const field should be removed by the obfuscator.
22+
public const int removedField = 1;
23+
24+
[ObfuzIgnore(ObfuzScope.Field)]
25+
public const int preservedField = 2;
26+
27+
[ObfuzIgnore]
28+
public const int preservedField2 = 2;
29+
}
30+
```
31+
32+
## 规则文件
33+
34+
支持通过规则文件精细地控制保留哪些常量字段。`RemoveConstFieldSettings.RuleFiles`选项中可以配置0-N个规则文件。
35+
规则文件的相对路径为项目目录,有效的规则文件路径类似这样:`Assets/XXX/YYY.xml`
36+
37+
出现在规则文件中的字段**不会被移除**
38+
39+
配置示例如下:
40+
41+
```xml
42+
43+
<?xml version="1.0" encoding="UTF-8"?>
44+
45+
<obfuz>
46+
<assembly name="Obfus1">
47+
<type name="Tests.RemoveConstField.ConstEncryptTestClass">
48+
<field name="preservedField2"/>
49+
</type>
50+
</assembly>
51+
</obfuz>
52+
```
53+
54+
- 顶层tag必须是obfuz
55+
- 次级tag必须是assembly
56+
57+
### assembly
58+
59+
|属性|可空|默认值|描述|
60+
|-|-|-|-|
61+
|name|||程序集名,必须在混淆程序集列表中|
62+
63+
assembly的子元素只能为type。
64+
65+
### type
66+
67+
|属性|可空|默认值|描述|
68+
|-|-|-|-|
69+
|name|||类型名的通配字符串,如果为空表示匹配所有类型。嵌套类型使用`/`划分声明所在类型和被包围的子类型,如`test.ClassA/ClassB`|
70+
71+
由于字段加密只能作用于字段,因此type的子元素只能为field。
72+
73+
### field
74+
75+
|属性|可空|默认值|描述|
76+
|-|-|-|-|
77+
|name|||要保留的常量字段名。字段名的通配字符串,如果为空表示匹配所有类型。|

sidebars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const sidebars: SidebarsConfig = {
5959
'manual/obfuscation-instincts',
6060
'manual/symbol-obfuscation',
6161
'manual/const-encryption',
62+
'manual/remove-const-field',
6263
'manual/field-encryption',
6364
'manual/eval-stack-obfuscation',
6465
'manual/expr-obfuscation',

0 commit comments

Comments
 (0)