Unity Mono DLL的破解及保护

       Mono dll脚本是Unity前期包含现在还有很多游戏在使用的脚本方式,这种脚本可以使用工具(如dnspy)完全逆向。破解者改包和竞品分析的难度非常低。

      很多有安全意识的游戏都会自己修改mono源码的mono_image_open_from_data_with_name函数,对DLL脚本进行加密。

不过这种的加密方式缺点比较明显。会在加载前进行一次性解密,游戏运行过程中,内存中存在解密后完整的DLL。

只要使用现成的工具就可以把DLL从内存里面扣出来。

       如上图,使用GG修改器,使用9460301数值即可把所有的DLL脚本内存基础搜索出来。

       目前很多手游加固厂商都还是使用这种加固方式。

      第二代DLL加固,对DLL里面的函数进行加密,这种加密方式的优点是,使用的方法才会进行解密,不像整体加密那样,会一下子把完整的DLL解密到内存中。

      一般游戏运行过程中不会用到所有方法,这样内存中就不会存在一个完整的DLL

      方法解密的效果是下图所示:

原始未加密dnspy函数解析结果
函数加密后dnspy函数解析报错

        第二代DLL加固存在的缺点是解析工具还是可以看到函数名及部分函数。于是出现了第三代DLL加固。

        第三代加固我们称为DLL结构虚拟化。对DLL的文件结构进行自定义重构,并对文件结构数据进行高强度加密。处理完后,所有的工具都无法再解析出任何数据,对于专业的破解分析人员,要解密出里面的结构数据难度也是非常大。

标题虚拟化后dnspy无法识别DLL

        DLL脚本使用的数据结构跟windows下面的可执行文件一样,都是PE结构,未DLL结构虚拟化时,使用010Editor可以解析出正常的PE结构。

虚拟化后的DLL结构010 Editor无法正常解析

         FairGuard对DLL脚本同时使用第二代和第三代加密,确保游戏脚本的安全性。

         FairGuard是一家专注于游戏加固及反外挂的安全服务商。创始人专注于安全领域10多年,前网易易盾手游保护负责人,从0到1主导了易盾手游保护项目。

猜你喜欢

转载自blog.csdn.net/qq_46702493/article/details/106277885