跳到主要内容

多态dll文件

默认情况下Assembly.Load需要传入标准的dll文件,意味着恶意破解者有办法获得完整的原始dll文件,或者加载恶意的第三方dll,这给开发者带来巨大的安全风险。 即使对dll文件进行加密,恶意破解者只要hook了Assembly.Load入口位置,仍然可以dump出完整的原始dll文件。

obfuz通过支持多态dll文件,有效对抗这种dump或者篡改dll的行为。

特性

  • 全新的dll文件结构,无法再被ILSpy等常规dll反编译工具打开。
  • 全新的metadata结构,无法再被轻易还原为原始的CLI metadata数据。
  • 支持dll文件结构和metadata结构随机化,几十个metadata结构和几百个元数据字段完全随机化,每个开发者的最终dll结构都不一样,巨幅提高恶意破解者的破解成本。
  • 支持禁止加载标准的dll文件,阻止通过调用Assembly.Load加载恶意dll。

设置

ObfuzSettings.PolymorphicDllSettings中包含多态dll相关设置,详细见文档设置

提示

HybridCLR自v8.4.0版本起支持自定义dll文件结构,要开启多态dll支持,要求HybridCLR版本不低于v8.4.0

codeGenerationSecretKey

codeGenerationSecretKey是生成多态dll代码时使用的随机化密钥。请不要使用默认值,长度在10以上并且使用较复杂的字符组合。

修改codeGenerationSecretKey后会生成完全不同的dll文件结构,这个文件结构固化在二进制代码中,在发布App后完全固定。 发布热更新dll时请不要修改这个值,会导致加载失败!

建议是发布新App包时更换这个值。如果同时存在多个版本的App包,并想使用相同的多态dll,请保持codeGenerationSecretKey一致。

disableLoadStandardDll

是否禁止加载标准结构的dll。开启此项后Assembly.Load或者RuntimeApi.LoadMetadataForAOTAssembly必须传入多态dll,如果传入标准dll,会返回错误。

开启此选项可以有效对抗恶意破解者运行时注入第三方dll,因为它们很难构造出符合多态dll结构的dll,大幅提高注入成本。

让HybridCLR支持多态dll

已经在HybridCLR/ObfuzExtension/GenerateAll命令中插入了生成多态dll代码的调用。只要PolymorphicDllSettings.enable为true就会自动在GenerateAll时 生成相关代码。

如果想主动调用生成,可以调用ObfuscateUtil::GeneratePolymorphicCodes(string libil2cppDir)函数。

生成多态dll

调用ObfuscateUtil::GeneratePolymorphicDll(string originalDllPath, string outputDllPath)生成多态dll。

普通热更新程序集、DHE程序集、补充元数据程序集都可以使用多态dll。