利索能及
我要发布
收藏
专利号: 2023114831847
申请人: 广东技术师范大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-06-16
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,包括以下步骤:S1:对元数据表进行初始化;

S101:解析输入.NET程序集的元数据,得到元数据的表流,字符串堆,Blob堆;

S102:把类和成员的关系组成树状结构;类的数据结构里面包含方法列表,字段列表,子类列表;

S103:初始化完成,将实例方法转换到静态方法;

S2:遍历每一个实例类的成员,将非静态成员转化为静态成员,将所有静态成员开始移动到随机创建的类中,完成成员关系重排;

S3:重新遍历每一个类的成员,静态成员的转移的过程中,进行泛型参数的转发,将静态字段、静态方法移动到随机创建的类中,完成静态成员的转移;

S4:重新遍历每一个类的成员,统一处理字段的类型,方法的参数、返回成员类型,对相应字段的类型进行替换,将方法的参数排序随机化,修复对方法的参数的引用,完成成员类型的隐藏;

S5:重新遍历每一个实例类的成员,将实例字段的访问方式进行替换,完成实例成员的字段隐藏。

2.根据权利要求1所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,成员包括方法、字段;

类的数据结构里面包含方法列表,字段列表,子类列表。

3.根据权利要求2所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,S2中,将非静态成员转化为静态成员的具体步骤如下:S201:判断实例类的成员是否为静态成员;若是实例成员,进入S202;若是静态成员,进入S204;

S202:筛选掉实例成员中的实例字段、虚方法,保留非虚实例方法;

S203:将非虚实例方法的this参数添加到参数列表,转换为静态方法;将转换后的静态方法的引用操作码进行修改;完成静态成员的转换;

S204:将静态成员移动到随机创建的类中。

4.根据权利要求2所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,S3中,泛型参数的转发的具体步骤如下:S301:若是静态字段,将其移动到随机创建的类中;若是静态字段的类型包含泛型参数,转发泛型参数;

S302:若是静态方法,将其移动到随机创建的类中;若是静态方法的参数类型包含泛型参数或静态方法的返回类型包含泛型参数,转发泛型参数;

S303:完成静态成员的转移,此随机创建的类为静态类。

5.根据权利要求2所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,S4中,对相应类型进行替换的方法如下:若类型为引用类型,将其替换为System.Object;若类型为枚举类型,替换为对应的基元类型;对其他类型不进行处理。

6.根据权利要求2所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,将实例字段的访问方式进行替换的方法如下:提取实例字段,创建随机结构体,在随机结构体中嵌入实例字段,将访问该实例字段替换为访问随机结构体中的一个字段。

7.根据权利要求3所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,将转换后的静态方法的引用操作码进行修改的方法如下:调用实例方法使用的是callvirt操作码,由于转变为了静态方法,将引用处修改为call操作码。

8.根据权利要求4所述的一种基于成员结构混淆的.NET平台代码保护方法,其特征在于,泛型指不代表具体类型,表示符合约束的任意类型;

泛型参数表示这个任意类型,当泛型参数被实例化,这个泛型参数就被替换为实例化使用的具体类型。

9.一种基于成员结构混淆的.NET平台代码保护系统,应用于权利要求1~8任一项所述的基于成员结构混淆的.NET平台代码保护方法,其特征在于,包括:初始化模块、成员关系重排模块、静态成员转移模块、成员类型隐藏模块、实例成员字段隐藏模块;

所述的初始化模块用于对元数据表进行初始化;

所述的成员关系重排模块用于遍历每一个实例类的成员,将非静态成员转化为静态成员,将所有静态成员开始移动到随机创建的类中,完成成员关系重排;

所述的静态成员转移模块用于重新遍历每一个类的成员,静态成员的转移的过程中,进行泛型参数的转发,将静态成员中的静态字段、静态方法移动到随机创建的类中,完成静态成员的转移;

所述的成员类型隐藏模块用于重新遍历每一个类的成员,统一处理字段的类型,方法的参数、返回类型,对相应类型进行替换,将方法的参数排序随机化,修复对方法的参数的引用,完成成员类型的隐藏;

所述的实例成员字段隐藏模块用于重新遍历每一个实例类的成员,将实例字段的访问方式进行替换,完成实例成员的字段隐藏。