CN116302205A - 引擎资源的加载方法、装置、设备及存储介质 - Google Patents

引擎资源的加载方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN116302205A
CN116302205A CN202310333686.5A CN202310333686A CN116302205A CN 116302205 A CN116302205 A CN 116302205A CN 202310333686 A CN202310333686 A CN 202310333686A CN 116302205 A CN116302205 A CN 116302205A
Authority
CN
China
Prior art keywords
preset
game
resource
encryption
data block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202310333686.5A
Other languages
English (en)
Inventor
李志力
张为兰
舒文
蔡墉锴
闫双龙
冯永健
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202310333686.5A priority Critical patent/CN116302205A/zh
Publication of CN116302205A publication Critical patent/CN116302205A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明实施例提供了引擎资源的加载方法、装置、设备及存储介质,所述方法包括:获取游戏资源,游戏资源基于加密标识告知是否加密预设加密数据块;在加载游戏资源时,获取游戏加载链路的预设函数;调用预设函数执行预设解密策略,基于加密标识和预设加密数据块,对游戏资源进行加载。基于直接将解密策略插入到游戏中,以在游戏资源加载时执行所插入的解密策略,以及基于对预设加密数据块的加密避免文件整件的加密,减少对游戏资源进行加密/解密时的性能消耗,还可以基于加密标识的是否存在对无论是本地游戏资源还是网络下发资源的加密进行相应的解密操作,在减少解密性能消耗的情况下,保证游戏安全包以及网络下发的游戏资源的安全。

Description

引擎资源的加载方法、装置、设备及存储介质
技术领域
本发明涉及通信技术领域,特别是涉及一种引擎资源的加载方法、一种引擎资源的加载装置、相应的一种电子设备以及相应的一种计算机存储介质。
背景技术
Unity引擎(为一款游戏引擎)通常可用于游戏资源的开发与维护,AB文件(AssetBundle,资源包)属于游戏资源中非常重要的资源,若不对其进行加密将会易于被第三方解包工具或者Unity引擎直接加载,导致对该文件进行修改达到破解游戏的目的,因此需要对Unity的AB资源进行加密。
然而,在AB资源的相关技术中,主要表现为不支持网络下发的资源加密和/或对文件整件进行加密,以及基于放于本地的加密资源在打开游戏时就进行解密,对游戏性能的影响非常大。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种引擎资源的加载方法、一种引擎资源的加载装置、相应的一种电子设备以及相应的一种计算机存储介质。
本发明实施例公开了一种引擎资源的加载方法,所述方法包括:
获取游戏资源,所述游戏资源基于加密标识告知是否加密预设加密数据块;
在加载所述游戏资源时,获取游戏加载链路的预设函数;
调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载。
本发明实施例还公开了一种引擎资源的加载装置,所述装置包括:
游戏资源获取模块,用于获取游戏资源,所述游戏资源基于加密标识告知是否加密预设加密数据块;
预设函数获取模块,用于在加载所述游戏资源时,获取游戏加载链路的预设函数;
游戏资源加载模块,用于调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载。
本发明实施例还公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现任一项所述引擎资源的加载方法。
本发明实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现任一项所述引擎资源的加载方法。
本发明实施例包括以下优点:
在本发明实施例中,通过在加载所获取的游戏资源时,调用游戏加载链路的预设函数执行预设解密策略,基于游戏资源中用于告知是否加密预设加密数据块的加密标识以及预设加密数据块对游戏资源进行加载,不仅可以基于直接对游戏安装包进行操作,直接将解密策略插入到游戏中,以在游戏资源加载时执行所插入的解密策略,以及基于对预设加密数据块的加密避免文件整件的加密,减少对游戏资源进行加密/解密时的性能消耗,还可以基于加密标识的是否存在对无论是本地游戏资源还是网络下发资源的加密进行相应的解密操作,在减少解密性能消耗的情况下,保证游戏安全包以及网络下发的游戏资源的安全。
附图说明
图1是本发明的一种引擎资源的加载方法实施例的步骤流程图;
图2是本发明实施例提供的游戏资源的解密流程示意图;
图3是本发明的另一种引擎资源的加密方法实施例的步骤流程图;
图4是本发明实施例提供的游戏资源的加密流程示意图;
图5是本发明实施例提供的加载引擎资源的应用场景示意图;
图6是本发明的一种引擎资源的加载装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
为便于本领域技术人员理解本申请,下面对本发明下述各实施例中涉及的术语或名词做出解释:
InlineHook:是C/C++代码的一种hook方式,主要表现为通过直接修改运行时内存的方式替换指令,完全手工地完成代码逻辑插入以及跳回操作,以达到在原始函数中插入逻辑的目的,该方式在理论上可以HookNative的任意函数。
UnityAB资源:UnityAssetBundle,是将资源使用Unity提供的一种用于存储资源的压缩格式打包后的集合,主要可以存储任何一种Unity可以识别的资源,例如模型,纹理图、音频、场景等资源,是Unity游戏重要的资源,可以简称为AB文件。
CRC:Cyclicredundancycheck,循环冗余校验,是一种根据网上数据包或计算机文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后可能出现的错误。通常而言,生成的数字在传输或者存储之前计算出来并且附加到数据后面,用于进行检验确定数据是否发生变化。
Unity引擎通常可用于游戏资源的开发与维护,AB文件属于游戏资源中非常重要的资源,若不对其进行加密将会易于被第三方解包工具或者Unity引擎直接加载,导致对该文件进行修改达到破解游戏的目的,因此需要对Unity的AB资源进行加密。
在AB资源的相关技术中,Unity官方针对普通AB文件提供的是偏移加密,其只需要将文件头的偏移内容删除即可读取文件内容,对文件的安全保护强度非常低;而针对Addressables打包方式的AB,其所提供的加密方式主要表现为直接对整个文件进行加密,这种方式将会造成性能上的损耗,其损耗主要表现在解密资源,同时该加密资源内容将会存储至本地,解密过程中不仅占用CPU(CentralProcessingUnit,中央处理器),也将会耗费额外的内存空间;目前市面上并没有公开针对UnityAB资源的通用加密方式,且大多安全厂商提供的加密方案要么不支持网络下发的资源加密,要么只支持某些特定的API(ApplicationProgrammingInterface,应用程序接口),或者性能很差,以及在打开游戏时就进行解密,对游戏运行性能的影响非常大。
本发明实施例的核心思想在于可以通过InlineHook技术对携带有或者能够用于执行预设解密策略的预设函数在原始函数中的插入,实现在游戏加载链路的原始函数中对预设解密策略/逻辑的插入,供于在加载游戏资源时对所插入的预设解密策略/逻辑的执行,达到对游戏资源保护的目的;以及,可以基于对字节所占大小较小的预设加密数据块进行的加密,其所占字节大小不受AB资源大小的影响,使得后续在运行/加载游戏资源时直接在内存中进行解密的操作,并不会对游戏运行性能产生非常大的损耗,不会对游戏运行造成影响。
进一步的,通过在对UnityAB资源进行加密时对其二进制文件中某处固定标识进行加密标识的替换,并对用于进行加密的目标数据的循环冗余校验计算,便于对网络所发下的AB资源基于加密标识的存在以及循环冗余校验的通过,执行所插入的预设解密策略/逻辑,在除了支持游戏安装包里的资源文件的加密以外,保证网络下发AB资源未加密与加密两种情况的安全加载,不仅解决UnityAB资源的安全问题,防止游戏资源、模型被破解与篡改,给游戏带来巨大损失,且还可以在保护资源安全的情况下,降低对游戏性能的影响。
参照图1,示出了本发明的一种引擎资源的加载方法实施例的步骤流程图,侧重于引擎资源的加载过程,即引擎资源的解密过程,具体可以包括如下步骤:
步骤101,获取游戏资源,游戏资源基于加密标识告知是否加密预设加密数据块;
所加载的引擎资源可以是游戏资源,通常可以表现为UnityAB资源,此时所获取的UnityAB资源可以是游戏安装包里的资源文件,也可以是网络下发的AB资源,对此,本发明实施例不加以限制。
具体地,所获取的游戏资源可以是加密或者未加密的游戏资源,其游戏资源的加密是否,可以基于游戏资源中加密标识的是否存在进行判定。通常而言,UnityAB资源是Unity游戏中重要的资源,即通常获取的是加密后的游戏资源,在实际应用中,游戏资源的加密可以基于对预设加密数据块所进行的加密实现。
那么,在一种优选的实施例中,在获取游戏资源之前,还可以表现为对游戏资源进行加密,以将加密后的游戏资源上传至服务端或者对本地游戏安装包实现更新加密。
在具体实现中,可以获取游戏资源的资源文件,所获取的资源文件包括文件头参数,此时可以对文件头参数进行解析,确定预设加密数据块的位置以及目标数据的大小,然后基于预设加密数据块的位置和目标数据的大小,确定用于进行加密的目标数据,并对目标数据进行加密。进一步的,还可以通过在对UnityAB资源进行加密时对其二进制文件中某处固定标识进行加密标识的替换,并对用于进行加密的目标数据的循环冗余校验计算,便于对网络所发下的AB资源基于加密标识的存在以及循环冗余校验的通过,执行所插入的预设解密策略/逻辑,在除了支持游戏安装包里的资源文件的加密以外,保证网络下发AB资源未加密与加密两种情况的安全加载,不仅解决UnityAB资源的安全问题,防止游戏资源、模型被破解与篡改,给游戏带来巨大损失,且还可以在保护资源安全的情况下,降低对游戏性能的影响。
步骤102,在加载游戏资源时,获取游戏加载链路的预设函数;
所获取的UnityAB资源可以是游戏安装包里的资源文件,也可以是网络下发的AB资源,在获取游戏资源之后,可以对所获取的游戏资源进行加载。具体表现为在加载游戏资源时,可以获取游戏加载链路的预设函数,以便基于对预设函数的调用,实现对游戏资源的加载。
预设函数可以携带有用于插入至游戏加载链路的原始函数中的预设解密策略/逻辑,预设函数能够用于执行所插入的预设解密策略/逻辑,供于在加载游戏资源时对所插入的预设解密策略/逻辑的执行,达到对游戏资源保护的目的。
具体的,对于预设函数的确定,由于Unity引擎是没有开源的,在实际应用中可以对Unity引擎进行大量的黑盒分析,对Unity引擎中所能够运用到的加载链路函数进行逐个试验,确定安全可靠的预设函数,然后可以通过InlineHook技术对携带有或者能够用于执行预设解密策略的预设函数在原始函数中的插入,实现在游戏加载链路的原始函数中对预设解密策略/逻辑的插入。需要说明的是,对于黑盒分析的具体过程以及加载链路函数的试验过程,本发明实施例不加以限制。
步骤103,调用预设函数执行预设解密策略,基于加密标识和预设加密数据块,对游戏资源进行加载。
对游戏资源的加载过程,包括对游戏资源的解密过程,对解密后的游戏资源的解析过程,以及对解析后的游戏资源的加载过程。
在本发明的一种实施例中,对游戏资源的解密过程,可以基于调用预设函数执行预设解密策略实现。
具体的,可以在加载游戏资源时,以及在解析游戏资源之前,可以从游戏加载链路中确定用于解析游戏资源的原始函数,对原始函数进行拦截操作,以便于通过调用预设函数执行预设解密策略,实现对游戏资源的加载。其中,预设函数可以携带有用于插入至游戏加载链路的原始函数中的预设解密策略/逻辑,预设函数能够用于执行所插入的预设解密策略/逻辑,具体可以表现为基于InlineHook技术直接修改原始函数,将携带有预设解密策略/逻辑的预设函数插入原始函数,进一步实现对预设解密策略/逻辑在原始函数中的插入。
如图2所示,示出了本发明实施例提供的游戏资源的解密流程示意图,其在游戏加载AB文件,并调用hook函数hook预设函数并插入预设解密逻辑/策略之后,其所调用预设函数所执行的预设解密策略,具体可以表现为基于加密标识和预设加密数据块,对游戏资源进行解密。
需要说明的是,预设函数可以基于大量的黑盒测试进行确定,其预设函数可以是AB资源加载链路上的一个函数,能够在游戏加载链路上读取目标数据的关键函数,即为用于加载目标数据的加载链路函数。只有当该函数加载的数据正确,资源才能被加载,由于该函数不在导出函数中,也不在plt表中,只能通过该方式hook进行hook实现,并在目标数据被加密的情况下,需要通过此预设函数实现对目标数据的解密。
其具体的解密过程,首先可以表现为加密检验过程,即校验标识以及CRC校验过程,其所校验的标识可以指的是用于告知是否加密预设加密数据块的加密标识。响应游戏资源具有加密标识,则表示当前所获取的游戏资源为进行加密后的游戏资源,此时可以获取游戏资源中的预设加密数据块,并对预设加密数据块进行数据校验,响应预设加密数据块的数据校验通过,可以对游戏资源进行解密。
预设加密数据块可以包括用于进行加密的目标数据以及用于校验数据完整性的校验数据。其中,目标数据可以指的是AB文件的核心/关键数据,其通常所占的字节大小很小,进一步使得在内存中直接进行解密时对解密性能造成的损耗几乎可以忽略不计,保证解密过程中不会对游戏运行性能产生影响;校验数据的生成主要表现为对目标数据所进行的CRC,即循环冗余校验计算实现,所得到的计算结果通常可以位于目标数据之后的末尾位置。
在对预设加密数据块进行数据校验的过程中,可以表现为对预设加密数据块中的目标数据进行循环冗余校验,得到第二计算结果,此时若第二计算结果和预设加密数据块中的校验数据相同,则可以判定预设加密数据块的数据校验通过,然后可以如图2所示执行解密策略/逻辑。其解密策略/逻辑,主要表现为在预设函数被调用时,unity引擎解析该数据前,对该块数据使用与加密算法相对应的解密算法进行还原,以让游戏资源能够顺利完成加载。
解密后的游戏资源的解析过程,可以基于执行原始函数实现,即可以执行原始函数对解密后的游戏资源进行解析,得到解析后的游戏资源以便加载解析后的游戏资源。具体可以表现为基于InlineHook技术实现对原始函数的回跳,即可以在拦截原始函数并执行所插入的逻辑之后,再次跳回至原始函数以执行原始函数的原始逻辑,基于原始函数的原始逻辑实现在游戏开发者无需单独接入,对游戏安装包进行直接操作的情况下的游戏运行与加载。
在本发明实施例中,通过在加载所获取的游戏资源时,调用游戏加载链路的预设函数执行预设解密策略,基于游戏资源中用于告知是否加密预设加密数据块的加密标识以及预设加密数据块对游戏资源进行加载,不仅可以基于直接对游戏安装包进行操作,直接将解密策略插入到游戏中,以在游戏资源加载时执行所插入的解密策略,以及基于对预设加密数据块的加密避免文件整件的加密,减少对游戏资源进行加密/解密时的性能消耗,还可以基于加密标识的是否存在对无论是本地游戏资源还是网络下发资源的加密进行相应的解密操作,在减少解密性能消耗的情况下,保证游戏安全包以及网络下发的游戏资源的安全。
参照图3,示出了本发明的另一种引擎资源的加载方法实施例的步骤流程图,侧重于引擎资源的加密过程,具体可以包括如下步骤:
步骤301,获取游戏资源的资源文件,资源文件包括文件头参数;
在本发明实施例中,可以通过InlineHook技术对携带有或者能够用于执行预设解密策略的预设函数在原始函数中的插入,实现在游戏加载链路的原始函数中对预设解密策略/逻辑的插入,供于在加载游戏资源时对所插入的预设解密策略/逻辑的执行,达到对游戏资源保护的目的。
在本发明的一种实施例中,前述对所插入的预设解密策略/逻辑的执行,以及对游戏资源的加载,建立在实现对游戏资源的加密的情况下。
对于对游戏资源的加载过程,如图4所示,示出了本发明实施例提供的游戏资源的加密流程示意图,可以获取游戏资源的资源文件,通常为AB文件,以便对AB文件中所具有的文件头参数进行解析,实现后续对游戏资源的加密过程。
需要说明的是,所进行的加密可以是针对游戏安装包里的资源文件进行加密,也可以是针对网络下发的AB资源进行加密,本发明实施例对此不加以限制。示例性的,其资源文件主要可以通过扫描AB文件所在的目录,读取文件的前七个字节是否与AB文件的标识UnityFS批匹配,以提取出所有的AB文件。
步骤302,对文件头参数进行解析,确定预设加密数据块的位置以及目标数据的大小;
在实际应用中,可以遍历找到的AB文件,对文件头参数Header的解析,以确定预设加密数据块的位置以及目标数据的大小。
步骤303,基于预设加密数据块的位置和目标数据的大小,确定用于进行加密的目标数据,并对目标数据进行加密。
对游戏资源的加密过程,侧重于对用于进行加密的目标数据的确定,所确定的目标数据,可以指的是AB文件的核心/关键数据,其通常所占的字节大小很小,以便基于对字节大小很小的目标数据的加密,实现对游戏资源的加密,其所占字节大小不受AB资源大小的影响,进一步使得在内存中直接进行解密时对解密性能造成的损耗几乎可以忽略不计,保证解密过程中不会对游戏运行性能产生影响。
对于目标数据的确定过程,可以表现为将资源文件的文件偏移指向文件头参数之后,确定目标数据的起始位置,然后基于目标数据的起始位置和目标数据的第一数据块大小,确定用于进行加密的目标数据。具体的,可以获取用于告知是否加密预设加密数据块的第二数据块大小,第二数据块大小相应位置的数据用于在对目标数据进行加密后替换为加密标识,将资源文件的文件偏移指向文件头参数后的第二数据块大小之后的目标数据块位置,作为目标数据的起始位置。
示例性地,在解析完文件头参数Header后,可以进行16位对齐,将资源文件的文件偏移,即文件的指针指向Header的后面以指向当前操作的文件位置,确定预设加密数据块的位置,将其所指向的Header的后面的数据作为预设加密数据块;然后可以基于所获取的第二数据块大小替换预设加密数据块的前第二数据块大小,例如前四字节的固定标识为加密标识,再按照第一数据块大小读取该块数据(即目标数据)进行加密。
在实际应用中,其对目标数据的加密方式,可以通过采用对称加密算法对该块目标数据进行加密,加密后的数据可以表现为无法识别的一串二进制数据。
需要说明的是,预设加密数据库的位置以及数据块大小在不同的unity版本存在区别,不能直接指向某一固定位置,需要按照实际的AB文件的格式进行解析确定,对此,本发明实施例不加以限制。
在一种优选的实施例中,预设加密数据块还可以包括用于校验数据完整性的校验数据,在对目标数据进行加密之后,还可以对目标数据进行循环冗余校验,得到第一计算结果,此时可以将第一计算结果作为用于校验数据完整性的校验数据,将校验数据存储至预设加密数据块的预设位置的数据块中。
其中,预设位置通常可以为目标数据在预设加密数据块中相应位置的数据末尾位置。
示例性地,在对目标数据进行加密后,可以对加密后的目标数据进行循环冗余校验CRC(用于校验数据是否完整,是否是加密过的数据)计算,计算结果可以表现为整型值、字节为16位的数据,由于目标数据的末尾位置具有足够的剩余空间可存储该数据,此时可以将计算的结果存储至目标数据的末尾位置,该计算值可用于校验数据的完整性。
在一种优选的实施例中,在对游戏资源完成加密之后,可以将加密后的游戏资源上传至服务端或者对本地游戏安装包实现更新加密,以便后续对所获取的游戏资源进行解密,表现为在加载所获取的游戏资源时,调用游戏加载链路的预设函数执行预设解密策略,基于游戏资源中用于告知是否加密预设加密数据块的加密标识以及预设加密数据块对游戏资源进行加载。
在本发明实施例中,不仅可以基于直接对游戏安装包进行操作,直接将解密策略插入到游戏中,以在游戏资源加载时执行所插入的解密策略,以及基于对预设加密数据块的加密避免文件整件的加密,减少对游戏资源进行加密/解密时的性能消耗,还可以基于加密标识的是否存在对无论是本地游戏资源还是网络下发资源的加密进行相应的解密操作,在减少解密性能消耗的情况下,保证游戏安全包以及网络下发的游戏资源的安全。
参照图5,示出了本发明实施例提供的加载引擎资源的应用场景示意图,涉及服务端以及一个客户端或者多个客户端,例如客户端1、客户端2等,其中,客户端可以负责对AB文件进行加密以及对从服务端所下载的AB文件进行解密,假设客户端1能够对AB文件进行加密,然后将加密后的AB文件上传至服务端,那么客户端2从服务端所下载的AB文件为加密后的AB文件,此时可以在游戏加载的同时对加密后的AB文件进行解密,以完成对游戏的加载。
在实际应用中,示例性的,对AB文件进行的加密过程可以经由加密工具实现,对AB文件进行的解密过程可以经由通过hook技术基于预设函数在引擎中所插入的预设解密策略/逻辑实现。
具体的,客户端1采用加密工具所实现的加密过程,可以表现为可以遍历找到的AB文件,对文件头参数Header的解析,以确定预设加密数据块的位置以及目标数据的大小;所确定的目标数据,可以指的是AB文件的核心/关键数据,其通常所占的字节大小很小,以便基于对字节大小很小的目标数据的加密,实现对游戏资源的加密,其所占字节大小不受AB资源大小的影响,进一步使得在内存中直接进行解密时对解密性能造成的损耗几乎可以忽略不计,保证解密过程中不会对游戏运行性能产生影响。此时可以对所确定的目标数据进行加密,预设加密数据块还可以包括用于校验数据完整性的校验数据,在对目标数据进行加密之后,还可以对目标数据进行循环冗余校验以及在对目标数据进行加密后将相应位置的数据替换为加密标识,并将校验数据存储至预设加密数据块的预设位置的数据块中,以便后续客户端2在将加密后的AB文件从服务端进行下载并进行解密加载时,能够基于加密标识告知是否加密AB文件中的预设加密数据块,以及基于校验数据进行加密校验。
客户端2在引擎加载游戏过程中所实现的解密过程,可以表现为在加载游戏资源时,可以获取游戏加载链路的预设函数,预设函数可以携带有用于插入至游戏加载链路的原始函数中的预设解密策略/逻辑,此时可以调用预设函数执行预设解密策略,基于对游戏资源的解密,进行对AB文件相应游戏资源的加载。具体可以表现为加密检验过程,即校验标识以及CRC校验过程,其所校验的标识可以指的是用于告知是否加密预设加密数据块的加密标识。响应游戏资源具有加密标识,则表示当前所获取的游戏资源为进行加密后的游戏资源,此时可以获取游戏资源中的预设加密数据块,并对预设加密数据块进行数据校验,响应预设加密数据块的数据校验通过,可以对游戏资源进行解;解密后的游戏资源的解析过程,可以基于执行原始函数实现,即可以执行原始函数对解密后的游戏资源进行解析,得到解析后的游戏资源以便加载解析后的游戏资。具体可以表现为基于InlineHook技术实现对原始函数的回跳,即可以在拦截原始函数并执行所插入的逻辑之后,再次跳回至原始函数以执行原始函数的原始逻辑,基于原始函数的原始逻辑实现在游戏开发者无需单独接入,对游戏安装包进行直接操作的情况下的游戏运行与加载。
在本发明实施例中,通过InlineHook技术对携带有或者能够用于执行预设解密策略的预设函数在原始函数中的插入,实现在游戏加载链路的原始函数中对预设解密策略/逻辑的插入,供于在加载游戏资源时对所插入的预设解密策略/逻辑的执行,达到对游戏资源保护的目的;以及,可以基于对字节所占大小较小的预设加密数据块进行的加密,其所占字节大小不受AB资源大小的影响,使得后续在运行/加载游戏资源时直接在内存中进行解密的操作,并不会对游戏运行性能产生非常大的损耗,不会对游戏运行造成影响。
进一步的,通过在对UnityAB资源进行加密时对其二进制文件中某处固定标识进行加密标识的替换,并对用于进行加密的目标数据的循环冗余校验计算,便于对网络所发下的AB资源基于加密标识的存在以及循环冗余校验的通过,执行所插入的预设解密策略/逻辑,在除了支持游戏安装包里的资源文件的加密以外,保证网络下发AB资源未加密与加密两种情况的安全加载,不仅解决UnityAB资源的安全问题,防止游戏资源、模型被破解与篡改,给游戏带来巨大损失,且还可以在保护资源安全的情况下,降低对游戏性能的影响。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图6,示出了本发明的一种引擎资源的加载装置实施例的结构框图,具体可以包括如下模块:
游戏资源获取模块601,用于获取游戏资源,所述游戏资源基于加密标识告知是否加密预设加密数据块;
预设函数获取模块602,用于在加载所述游戏资源时,获取游戏加载链路的预设函数;
游戏资源加载模块603,用于调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载。
在本发明的一种实施例中,在所述获取游戏资源之前,所述装置还可以包括如下模块:
游戏资源加密模块,用于对所述游戏资源进行加密;
游戏资源加密模块可以包括如下子模块:
资源文件获取子模块,用于获取所述游戏资源的资源文件,所述资源文件包括文件头参数;
文件头参数解析子模块,用于对所述文件头参数进行解析,确定预设加密数据块的位置以及所述目标数据的大小;
目标数据加密子模块,用于基于所述预设加密数据块的位置和所述目标数据的大小,确定用于进行加密的目标数据,并对所述目标数据进行加密。
在本发明的一种实施例中,目标数据加密子模块可以包括如下单元:
起始位置确定单元,用于将所述资源文件的文件偏移指向所述文件头参数之后,确定所述目标数据的起始位置;
目标数据确定单元,用于基于所述目标数据的起始位置和所述目标数据的第一数据块大小,确定用于进行加密的目标数据。
在本发明的一种实施例中,起始位置确定单元可以包括如下子单元:
第二数据块大小获取子单元,用于获取用于告知是否加密预设加密数据块的第二数据块大小;所述第二数据块大小相应位置的数据用于在对所述目标数据进行加密后替换为加密标识;
起始位置确定子单元,用于将所述资源文件的文件偏移指向所述文件头参数后的第二数据块大小之后的目标数据块位置,作为所述目标数据的起始位置。
在本发明的一种实施例中,所述预设加密数据块还包括用于校验数据完整性的校验数据,在对所述目标数据进行加密之后,游戏资源加密模块还可以包括如下子模块:
冗余校验计算子模块,用于对所述目标数据进行循环冗余校验,得到第一计算结果;
校验数据生成子模块,用于将所述第一计算结果作为用于校验数据完整性的校验数据,将所述校验数据存储至所述预设加密数据块的预设位置的数据块中;所述预设位置为所述目标数据在所述预设加密数据块中相应位置的数据末尾位置。
在本发明的一种实施例中,游戏资源加载模块603可以包括如下子模块:
游戏资源解密子模块,用于调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行解密;
游戏资源解析子模块,用于对解密后的游戏资源进行解析,并对解析后的游戏资源进行加载。
在本发明的一种实施例中,游戏资源解密子模块可以包括如下单元:
预设加密数据块获取单元,用于响应所述游戏资源具有所述加密标识,获取所述游戏资源中的预设加密数据块;
数据校验单元,用于对所述预设加密数据块进行数据校验;
游戏资源解密单元,用于响应所述预设加密数据块的数据校验通过,对所述游戏资源进行解密。
在本发明的一种实施例中,所述预设加密数据块包括用于进行加密的目标数据以及用于校验数据完整性的校验数据;数据校验单元可以包括如下子单元:
冗余校验计算子单元,用于对所述预设加密数据块中的目标数据进行循环冗余校验,得到第二计算结果;
数据校验子单元,用于在所述第二计算结果和所述预设加密数据块中的校验数据相同时,判定所述预设加密数据块的数据校验通过。
在本发明的一种实施例中,游戏资源解密子模块可以包括如下单元:
原始函数确定单元,用于在加载所述游戏资源时,以及在解析所述游戏资源之前,从游戏加载链路中确定用于解析所述游戏资源的原始函数;
原始函数拦截单元,用于对所述原始函数进行拦截操作,调用所述预设函数以执行所述预设解密策略。
在本发明的一种实施例中,游戏资源解析子模块可以包括如下单元:
游戏资源解析单元,用于执行所述原始函数对解密后的游戏资源进行解析,得到解析后的游戏资源并记载所述解析后的游戏资源。
在本发明实施例中,本发明实施例提供的引擎资源的加载装置,通过在加载所获取的游戏资源时,调用游戏加载链路的预设函数执行预设解密策略,基于游戏资源中用于告知是否加密预设加密数据块的加密标识以及预设加密数据块对游戏资源进行加载,不仅可以基于直接对游戏安装包进行操作,直接将解密策略插入到游戏中,以在游戏资源加载时执行所插入的解密策略,以及基于对预设加密数据块的加密避免文件整件的加密,减少对游戏资源进行加密/解密时的性能消耗,还可以基于加密标识的是否存在对无论是本地游戏资源还是网络下发资源的加密进行相应的解密操作,在减少解密性能消耗的情况下,保证游戏安全包以及网络下发的游戏资源的安全。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,包括:
包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述引擎资源的加载方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述引擎资源的加载方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种引擎资源的加载方法、一种引擎资源的加载装置、相应的一种电子设备以及相应的一种计算机存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种引擎资源的加载方法,其特征在于,所述方法包括:
获取游戏资源,所述游戏资源基于加密标识告知是否加密预设加密数据块;
在加载所述游戏资源时,获取游戏加载链路的预设函数;
调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载。
2.根据权利要求1所述的方法,其特征在于,在所述获取游戏资源之前,还包括:
对所述游戏资源进行加密;
所述对所述游戏资源进行加密,包括:
获取所述游戏资源的资源文件,所述资源文件包括文件头参数;
对所述文件头参数进行解析,确定预设加密数据块的位置以及所述目标数据的大小;
基于所述预设加密数据块的位置和所述目标数据的大小,确定用于进行加密的目标数据,并对所述目标数据进行加密。
3.根据权利要求2所述的方法,其特征在于,所述基于所述预设加密数据块的位置和所述目标数据的大小,确定用于进行加密的目标数据,包括:
将所述资源文件的文件偏移指向所述文件头参数之后,确定所述目标数据的起始位置;
基于所述目标数据的起始位置和所述目标数据的第一数据块大小,确定用于进行加密的目标数据。
4.根据权利要求3所述的方法,其特征在于,所述将所述资源文件的文件偏移指向所述文件头参数之后,确定所述目标数据的起始位置,包括:
获取用于告知是否加密预设加密数据块的第二数据块大小;所述第二数据块大小相应位置的数据用于在对所述目标数据进行加密后替换为加密标识;
将所述资源文件的文件偏移指向所述文件头参数后的第二数据块大小之后的目标数据块位置,作为所述目标数据的起始位置。
5.根据要求2所述的方法,其特征在于,所述预设加密数据块还包括用于校验数据完整性的校验数据,在对所述目标数据进行加密之后,所述方法还包括:
对所述目标数据进行循环冗余校验,得到第一计算结果;
将所述第一计算结果作为用于校验数据完整性的校验数据,将所述校验数据存储至所述预设加密数据块的预设位置的数据块中;所述预设位置为所述目标数据在所述预设加密数据块中相应位置的数据末尾位置。
6.根据权利要求1所述的方法,其特征在于,所述调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载,包括:
调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行解密;
对解密后的游戏资源进行解析,并对解析后的游戏资源进行加载。
7.根据权利要求6所述的方法,其特征在于,所述基于所述加密标识和所述预设加密数据块,对所述游戏资源进行解密,包括:
响应所述游戏资源具有所述加密标识,获取所述游戏资源中的预设加密数据块;
对所述预设加密数据块进行数据校验;
响应所述预设加密数据块的数据校验通过,对所述游戏资源进行解密。
8.根据权利要求7所述的方法,其特征在于,所述预设加密数据块包括用于进行加密的目标数据以及用于校验数据完整性的校验数据;
所述对所述预设加密数据块进行数据校验,包括:
对所述预设加密数据块中的目标数据进行循环冗余校验,得到第二计算结果;
若所述第二计算结果和所述预设加密数据块中的校验数据相同,则判定所述预设加密数据块的数据校验通过。
9.根据权利要求6所述的方法,其特征在于,所述调用所述预设函数执行预设解密策略,包括:
在加载所述游戏资源时,以及在解析所述游戏资源之前,从游戏加载链路中确定用于解析所述游戏资源的原始函数;
对所述原始函数进行拦截操作,调用所述预设函数以执行所述预设解密策略;
所述对解密后的游戏资源进行解析,并对解析后的游戏资源进行加载,包括:
执行所述原始函数对解密后的游戏资源进行解析,得到解析后的游戏资源并记载所述解析后的游戏资源。
10.一种引擎资源的加载装置,其特征在于,所述装置包括:
游戏资源获取模块,用于获取游戏资源,所述游戏资源基于加密标识告知是否加密预设加密数据块;
预设函数获取模块,用于在加载所述游戏资源时,获取游戏加载链路的预设函数;
游戏资源加载模块,用于调用所述预设函数执行预设解密策略,基于所述加密标识和所述预设加密数据块,对所述游戏资源进行加载。
11.一种电子设备,其特征在于,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至9中任一项所述引擎资源的加载方法。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至9中任一项所述引擎资源的加载方法。
CN202310333686.5A 2023-03-29 2023-03-29 引擎资源的加载方法、装置、设备及存储介质 Pending CN116302205A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310333686.5A CN116302205A (zh) 2023-03-29 2023-03-29 引擎资源的加载方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310333686.5A CN116302205A (zh) 2023-03-29 2023-03-29 引擎资源的加载方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN116302205A true CN116302205A (zh) 2023-06-23

Family

ID=86779759

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310333686.5A Pending CN116302205A (zh) 2023-03-29 2023-03-29 引擎资源的加载方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN116302205A (zh)

Similar Documents

Publication Publication Date Title
CN110008757B (zh) 一种物联网终端固件更新中数据保护方法及系统
Ma et al. Cdrep: Automatic repair of cryptographic misuses in android applications
CN112217835B (zh) 报文数据的处理方法、装置、服务器和终端设备
US20140150096A1 (en) Method for assuring integrity of mobile applications and apparatus using the method
CN108363580A (zh) 应用程序安装方法、装置、计算机设备和存储介质
CN108683502B (zh) 一种数字签名验证方法、介质及设备
CN112887388B (zh) 基于沙箱环境的数据处理系统
CN104219198B (zh) 一种WebApp的防篡改方法
CN110968872A (zh) 文件漏洞的检测处理方法、装置、电子设备及存储介质
CN109241707A (zh) 应用程序的混淆方法、装置和服务器
CN106709281B (zh) 补丁发放和获取方法、装置
CN110069415B (zh) 用于软件测试过程中的软件完整性校验及软件测试方法
CN108170461A (zh) 差分升级包生成方法、差分升级方法及装置
CN111897789B (zh) 一种日志生成方法及装置
CN111953475B (zh) 一种代码漏洞的修复方法及设备
CN106888094B (zh) 一种签名方法及服务器
CN108763934B (zh) 数据处理方法及装置、存储介质、服务器
CN112035803A (zh) 一种基于Windows平台软件的保护方法及装置
CN115391750B (zh) 一种算法授权方法、装置、电子设备和存储介质
CN111291001A (zh) 计算机文件的读取方法、装置、计算机系统及存储介质
CN116302205A (zh) 引擎资源的加载方法、装置、设备及存储介质
CN110147655A (zh) 应用程序的安全防护系统及方法
CN115248767A (zh) 远程代码测试方法、装置、设备及存储介质
CN111522555A (zh) apk文件的加固方法、解密方法及相关装置
CN116647732B (zh) 一种基于智能电视盒安全的更新配置方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination