在应用中嵌入代码的方法、装置及电子设备与流程

文档序号:18008919发布日期:2019-06-25 23:44阅读:223来源:国知局
本发明涉及代码集成
技术领域
:,具体涉及一种在应用中嵌入代码的方法、装置及电子设备。
背景技术
::sdk(softwaredevelopmentkit,软件开发工具包)通常指软件工程师为特定的软件包、软件框架、硬件平台或者操作系统等建立应用软件时的开发工具的集合。技术人员在开发应用程序时,可以将sdk接入应用中,直接使用sdk提供的功能。因此,在应用中嵌入sdk有助于丰富应用程序的功能,满足用户多方面的需求。现有技术(cn107463359a)公开了一种在iosipa包中植入代码的便捷方法,具体地:(1)添加sdk的钩子脚本:在ios工程源码中将钩子脚本加入到工程代码中,通过打包工具生成ipa(iphoneapplication)发布包;(2)植入代码:将ipa包进行解压,将需要引入的代码编译成动态库,添加到framework目录中;(3)重签名,并重新打包成新ipa;(4)动态调用,新ipa包运行时,通过钩子脚本与动态库动态衔接,调用植入代码的功能。该方式能够减少sdk接入的工作量。然而,发明人在实现本发明的过程中发现现有技术存中缺乏一种能够根据指定的加载顺序嵌入sdk,使嵌入了sdk的应用在运行时能够按照该指定的加载顺序动态调用sdk代码的方案。技术实现要素:鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种在应用中嵌入代码的方法、装置及电子设备。根据本发明的一个方面,提供了一种在应用中嵌入代码的方法,包括:将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息;根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改;根据已修改的可执行文件生成更新应用文件。可选地,sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息;动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。可选地,对代码段中原始动态库的位置信息的序号信息进行修改具体包括:根据动态库的段落号信息以及偏移信息计算符号指针信息,根据符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。可选地,sdk的加载信息具体包括以下中的至少一个:文件路径信息、名称信息。可选地,方法进一步包括:对更新应用文件进行重签名认证处理。可选地,方法应用于ios应用,则方法执行之前,进一步包括:将ios应用的程序应用文件进行解压,提取ios应用的可执行文件;方法进一步包括:对更新应用文件进行重签名认证处理。根据本发明的另一方面,提供了一种在应用中嵌入代码的装置,包括:集成模块,适于将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息;第一修改模块,适于根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;第二修改模块,适于对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改;应用文件生成模块,适于根据已修改的可执行文件生成更新应用文件。可选地,sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息;动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。可选地,第二修改模块进一步适于:根据动态库的段落号信息以及偏移信息计算符号指针信息,根据符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。可选地,sdk的加载信息具体包括以下中的至少一个:文件路径信息、名称信息。可选地,其中,装置进一步包括:提取模块,适于将ios应用的程序应用文件进行解压,提取ios应用的可执行文件;重签名模块,适于对更新应用文件进行重签名认证处理。根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行上述在应用中嵌入代码的方法对应的操作。根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如上述在应用中嵌入代码的方法对应的操作。根据本发明提供的在应用中嵌入代码的方法、装置及电子设备,方法包括:将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息;根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改;根据已修改的可执行文件生成更新应用文件。该方式能够脱离源码针对任一应用按照指定的加载顺序嵌入sdk,使得新添加了sdk的应用在运行时能够按照指定的加载顺序动态调用sdk代码,兼容性更高。上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。附图说明通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:图1示出了根据本发明一个实施例的在应用中嵌入代码的方法的流程示意图;图2示出了根据本发明另一个实施例的在应用中嵌入代码的方法的流程示意图;图3示出了根据本发明另一个实施例的在应用中嵌入代码的装置的结构示意图;图4示出了根据本发明实施例的一种电子设备的结构示意图。具体实施方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1示出了根据本发明一个实施例的在应用中嵌入代码的方法的流程示意图,如图1所示,该方法包括:步骤s101,将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息。将sdk集成到应用中,在应用的可执行文件的加载命令中查找动态库信息列表,根据预设加载顺序,在动态库信息列表中插入sdk的加载信息,例如sdk的文件路径和名称等等。其中,预设加载顺序也就是嵌入的代码的运行顺序,例如可以让嵌入的代码最先运行或者按照其他指定的顺序运行,本领域技术人员可以根据实际需要对预设加载顺序进行设置。步骤s102,根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改。首先,读取可执行文件中的动态库加载信息,例如重定向信息、静态绑定信息等等;然后,根据嵌入的sdk的文件信息,例如动态库名称、文件存放路径、文件大小信息以及结构信息等,修改动态库加载信息的偏移量和长度。步骤s103,对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改。由于新添加了sdk,需要修改可执行文件中的动态库绑定信息,具体修改原始动态库的加载序号信息和原始动态库对应的代码在文件中的偏移地址信息。同时,还需要修改代码段中原始动态库的位置信息的序号。步骤s104,根据已修改的可执行文件生成更新应用文件。利用已修改的可执行文件对原始可执行文件进行替换,并根据已修改的可执行文件重新打包生成更新应用文件。在后续过程中,启动该更新应用时,根据已修改的动态库信息列表,新添加的sdk会按照上述预设加载顺序植入的代码。根据本实施例所提供的在应用中嵌入代码,首先将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息;然后,根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;其次,对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改;最后根据已修改的可执行文件生成更新应用文件。该方式能够脱离源码针对任一应用按照指定的加载顺序嵌入sdk,使得新添加了sdk的应用运行时能够按照指定的加载顺序动态调用sdk代码,兼容性更高。图2示出了根据本发明另一个实施例的在应用中嵌入代码的方法的流程示意图,本实施例中以ios应用为例进行说明,如图2所示,该方法包括:步骤s201,将ios应用的程序应用文件进行解压,提取ios应用的可执行文件,将sdk集成到应用中。将ios应用的ipa安装包进行解压,提取mach-o文件(可执行文件),并将sdk集成在应用中。步骤s202,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息。将sdk集成到应用中,在应用的可执行文件的加载命令中查找动态库信息列表,根据预设加载顺序,在动态库信息列表中插入sdk的加载信息,例如sdk的文件路径和名称等等。其中,预设加载顺序也就是嵌入的代码的运行顺序,例如可以让嵌入的代码最先运行或者按照其他指定的顺序运行,本领域技术人员可以根据实际需要对预设加载顺序进行设置。需要特别指出的是:现有技术将sdk插入到系统库之后,由于优先加载了系统库以及应用本身的所添加的第三方库,可能会导致新添加的sdk部分功能不能正常加载而导致闪退。因此,现有技术中缺乏一种能够优先加载新添加的sdk的技术方案。本实施例所提供的方法能够使新添加的sdk按照任意的加载顺序加载,其中,当预设加载顺序具体为首位加载顺序(即最先加载)时,就能够解决上述因系统库以及应用本身所添加的第三方库优先加载导致的错误崩溃问题。具体地,在可执行文件的加载命令中查找动态库信息的列表,按照预设加载顺序,在动态库信息的列表中插入sdk的加载信息,其中,sdk的加载信息包括以下中的至少一个:文件路径信息、名称信息。步骤s203,根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改。读取可执行文件中的动态库加载信息,然后,根据sdk的文件信息,修改动态加载信息的偏移量信息和长度信息,其中,动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息。以添加payegissharkiv.framework为例,其中通过文件路径“@executable_path/frameworks/payegissharkiv.framework/payegissharkiv”计算可得加载命令中增加的偏移长度为96,通过遍历重定向信息和静态绑定信息表中opcode和immediate的值,可得重定向信息表增加为0,静态绑定信息表增加长度为6,补齐0位后得到增加长度为16。步骤s204,对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改。遍历可执行文件中的动态库绑定信息,由于新添加了sdk,需要修改原始动态库的加载序号和原始动态库对应的代码在可执行文件中的偏移地址。以预设加载顺序为首位加载顺序为例,简单地来讲,原始动态库共有10个,序号分别为1、2、3……10,在所有原始动态库之前加入sdk对应的动态库,那么新添加的动态库的序号为1,原始动态库的序号依次修改为2、3、4……11,同时,还需要对原始动态库对应的代码在可执行文件中的偏移地址进行修改。步骤s205,根据动态库的段落号信息以及偏移信息计算符号指针信息,根据符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。根据动态库的段落号信息以及偏移信息计算出的符号指针信息,可以得到代码段下原始动态库的起始位置信息以及调用代码位置信息,然后对原始动态库的起始位置信息以及调用代码位置信息的序号进行修改。步骤s206,根据已修改的可执行文件生成更新应用文件,对更新应用文件进行重签名认证处理。将已修改的可执行文件对原始可执行文件进行替换,并根据已修改的可执行文件重新打包生成更新应用文件,使用重签名工具进行重新签名认证。在后续过程中,启动该更新应用时,根据已修改的动态库信息的列表,添加的sdk会按照预设加载顺序调植入的代码。由此可知,本实施例的方法可总结为以下几个处理阶段:(1)解压提取阶段。(2)可执行文件修改处理阶段,具体修改可执行文件的加载信息以及绑定信息等。(3)重打包阶段,具体用已修改的可执行文件替换原始可执行文件生成新的应用文件,并对新的应用文件进行重签名形成新的ipa包。由此可知,根据本实施例的方法能够脱离源码,针对任一应用按照指定的加载顺序嵌入sdk,例如安全组件(签名校验、二次打包检测、越狱检测、防注入等)、动态监控租金、调试模块等等,使得应用运行时能够按照指定的加载顺序调用sdk代码,应用场景广。其中当指预设加载顺序为首位加载顺序时,还能够解决现有技术中存在的sdk插入系统库以后,由于其他库信息被优先加载而导致新添加的sdk出现错误甚至崩溃,兼容性更好。图3示出了根据本发明另一个实施例的在应用中嵌入代码的装置的结构示意图,如图3所示,该装置包括:集成模块、第一修改模块、第二修改模块以及应用文件生成模块。其中,集成模块31,适于将sdk集成到应用中,按照预设加载顺序在应用的可执行文件的动态库信息列表中嵌入sdk的加载信息;第一修改模块32,适于根据sdk的文件信息,对可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;第二修改模块33,适于对可执行文件包含的原始动态库的加载序号信息和原始动态库对应的代码在可执行文件中的偏移地址信息进行修改,以及对代码段中原始动态库的位置信息的序号信息进行修改;应用文件生成模块34,适于根据已修改的可执行文件生成更新应用文件。在一种可选的方式中,sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息;动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。在一种可选的方式中,第二修改模块32进一步适于:根据动态库的段落号信息以及偏移信息计算符号指针信息,根据符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。在一种可选的方式中,sdk的加载信息具体包括以下中的至少一个:文件路径信息、名称信息。在一种可选的方式中,上述在应用中嵌入代码的装置进一步包括:提取模块,适于将ios应用的程序应用文件进行解压,提取ios应用的可执行文件;重签名模块,适于对更新应用文件进行重签名认证处理。上述各个模块的具体结构和工作原理可参照方法实施例中相应步骤的描述,此处不再赘述。本申请实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的在应用中嵌入代码的方法。图4示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(communicationsinterface)404、存储器(memory)406、以及通信总线408。其中:处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。处理器402,用于执行程序410,具体可以执行上述在应用中嵌入代码的方法实施例中的相关步骤。具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。处理器402可能是中央处理器cpu,或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。存储器406,用于存放程序410。存储器406可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。程序410具体可以用于使得处理器402执行上述任意方法实施例中的在应用中嵌入代码的方法。程序410中各步骤的具体实现可以参见上述在应用中嵌入代码的方法实施例中的相应步骤和单元中对应的描述,在此不赘述。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的电子设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。本发明公开了:a1.一种在应用中嵌入代码的方法,包括:将sdk集成到应用中,按照预设加载顺序在所述应用的可执行文件的动态库信息列表中嵌入所述sdk的加载信息;根据所述sdk的文件信息,对所述可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;对所述可执行文件包含的原始动态库的加载序号信息和所述原始动态库对应的代码在所述可执行文件中的偏移地址信息进行修改,以及对代码段中所述原始动态库的位置信息的序号信息进行修改;根据已修改的可执行文件生成更新应用文件。a2.根据a1所述的方法,其中,所述sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息;所述动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。a3.根据a1所述的方法,其中,所述对代码段中所述原始动态库的位置信息的序号信息进行修改具体包括:根据动态库的段落号信息以及偏移信息计算符号指针信息,根据所述符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对所述原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。a4.根据a1所述的方法,其中,所述sdk的加载信息具体包括以下中的至少一个:文件路径信息、名称信息。a5.根据a1-a4中任一项所述的方法,其中,所述方法应用于ios应用,则所述方法执行之前,进一步包括:将ios应用的程序应用文件进行解压,提取所述ios应用的可执行文件;所述方法进一步包括:对所述更新应用文件进行重签名认证处理b6.一种在应用中嵌入代码的装置,包括:集成模块,适于将sdk集成到应用中,按照预设加载顺序在所述应用的可执行文件的动态库信息列表中嵌入所述sdk的加载信息;第一修改模块,适于根据所述sdk的文件信息,对所述可执行文件包含的动态库加载信息的偏移量信息和长度信息进行修改;第二修改模块,适于对所述可执行文件包含的原始动态库的加载序号信息和所述原始动态库对应的代码在所述可执行文件中的偏移地址信息进行修改,以及对代码段中所述原始动态库的位置信息的序号信息进行修改;应用文件生成模块,适于根据已修改的可执行文件生成更新应用文件。b7.根据b6所述的装置,其中,所述sdk的文件信息具体包括以下中的至少一个:动态库名称信息、文件存放路径信息、文件大小信息、结构信息;所述动态库加载信息具体包括以下中的至少一个:重定向信息、静态绑定信息。b8.根据b6所述的装置,其中,所述第二修改模块进一步适于:根据动态库的段落号信息以及偏移信息计算符号指针信息,根据所述符号指针信息确定原始动态库的起始位置信息以及调用代码位置信息;对所述原始动态库的起始位置信息以及调用代码位置信息的序号信息进行修改。b9.根据b6所述的装置,其中,所述sdk的加载信息具体包括以下中的至少一个:文件路径信息、名称信息。b10.根据b6-b9中任一项所述的装置,其中,所述装置进一步包括:提取模块,适于将ios应用的程序应用文件进行解压,提取所述ios应用的可执行文件;重签名模块,适于对所述更新应用文件进行重签名认证处理。c11.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如a1-a5中任一项所述的在应用中嵌入代码的方法对应的操作。d12.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如a1-a5中任一项所述的在应用中嵌入代码的方法对应的操作。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1