CN107704279B - 一种数据加载方法以及装置 - Google Patents
一种数据加载方法以及装置 Download PDFInfo
- Publication number
- CN107704279B CN107704279B CN201610645732.5A CN201610645732A CN107704279B CN 107704279 B CN107704279 B CN 107704279B CN 201610645732 A CN201610645732 A CN 201610645732A CN 107704279 B CN107704279 B CN 107704279B
- Authority
- CN
- China
- Prior art keywords
- original
- operation function
- dynamic link
- link library
- loading
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种数据加载方法以及装置,其中方法包括:当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;根据所述原始加载操作函数将所述原始动态链接库加载至内存中。采用本发明,可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据加载方法以及装置。
背景技术
Android(安卓)是开源的手机操作系统,不同的手机厂商可以对Android系统做不同的定制,因此,Android系统具备多样性和个性化的特点。例如,某些手机厂商可以修改Android默认的一些底层的动态链接库(动态链接库即为.so(shared object,共享对象)文件),使得手机在对某些应用程序进行初始化时,将会重定向到与修改后的动态链接库对应的修改后的加载操作函数,并由该修改后的加载操作函数将该修改后的动态链接库加载至内存。但是有些手机厂商对动态链接库的修改可能并不完善,从而导致应用程序在间接使用到这些修改后的动态链接库的时候,就可能出现程序崩溃的情况,从而导致应用程序在不同Android手机上的兼容性较差。
发明内容
本发明实施例提供一种数据加载方法以及装置,可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
本发明实施例提供了一种数据加载方法,包括:
当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;
根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
根据所述原始加载操作函数将所述原始动态链接库加载至内存中。
相应地,本发明实施例还提供了一种数据加载装置,包括:
重定向模块,用于当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;
调用模块,用于根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
加载模块,用于根据所述原始加载操作函数将所述原始动态链接库加载至内存中。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据预设修正操作函数调用与原始动态链接库对应的原始加载操作函数,以实现将对篡改后的加载操作函数的调用修改为对原始加载操作函数的调用;最后再根据原始加载操作函数将原始动态链接库加载至内存中,从而可以避免将篡改后的动态链接库加载至内存。由于在初始化应用程序时可以基于预设修正操作函数加载原始动态链接库,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据加载方法的流程示意图;
图2是本发明实施例提供的另一种数据加载方法的流程示意图;
图3是本发明实施例提供的一种数据加载方法的时序示意图;
图4是本发明实施例提供的一种数据加载装置的结构示意图;
图5是本发明实施例提供的一种调用模块的结构示意图;
图6是本发明实施例提供的另一种数据加载装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参见图1,是本发明实施例所提供的一种数据加载方法的流程示意图,所述方法可以包括:
S101,当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;
具体的,当检测到对某应用程序(如浏览器应用)的启动操作时,需要对应用程序的内核进行初始化,在初始化的过程中通常需要加载相应的动态链接库(即.so文件),此时将会生成对原始动态链接库的加载指令。为了避免因将篡改后的动态链接库加载至内存而导致应用程序出现崩溃的情况,于是本发明实施例预先创建了一个预设动态链接库插件,并在GOT(Global Offset Table,全局偏移表)中查找所述原始动态链接库的偏移量(所述偏移量具体为所述原始动态链接库被加载至内存中所属的全局偏移量),根据HOOK技术(HOOK技术可以为一种底层的通用Hack技术)和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中。在将预设动态链接库插件设置为系统默认机制之后,当检测到对原始动态链接库的加载指令时,系统可以通知与应用程序对应的DVM(Android操作系统上的Dalvik虚拟机)重定向至所述预设动态链接库插件中的所述预设修正操作函数。
S102,根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
S103,根据所述原始加载操作函数将所述原始动态链接库加载至内存中;
具体的,若对原始加载操作函数的调用关系没有被篡改,则重定向到所述预设修正操作函数后,可以根据所述预设修正操作函数成功调用到与所述原始动态链接库对应的原始加载操作函数,此时将可以成功通过所述原始加载操作函数将所述原始动态链接库加载至内存中。由于原始动态链接库可以使应用程序的运行变得更加稳定,因此,通过上述的方法将对篡改后的动态链接库的加载重新修改回对原始动态链接库的加载,使得应用程序的运行变得更加稳定。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据预设修正操作函数调用与原始动态链接库对应的原始加载操作函数,以实现将对篡改后的加载操作函数的调用修改为对原始加载操作函数的调用;最后再根据原始加载操作函数将原始动态链接库加载至内存中,从而可以避免将篡改后的动态链接库加载至内存。由于在初始化应用程序时可以基于预设修正操作函数加载原始动态链接库,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
请参见图2,是本发明实施例所提供的另一种数据加载方法的流程示意图,所述方法可以包括:
S201,当检测到对应用程序的启动操作时,查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令;
具体的,当检测到对某应用程序(如浏览器应用)的启动操作时,需要对应用程序的内核进行初始化,在初始化的过程中通常需要加载相应的动态链接库(即.so文件),此时将查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令。
S202,根据所述加载指令通知与所述应用程序对应的DVM重定向到预设动态链接库插件中的预设修正操作函数;
具体的,为了避免因将篡改后的动态链接库加载至内存而导致应用程序出现崩溃的情况,于是本发明实施例预先创建了一个预设动态链接库插件,并在GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中,所述预设动态链接库插件可以为一种新增的DL(Dynamic Loader,动态输入程序)模块。在将预设动态链接库插件设置为系统默认机制之后,当检测到对原始动态链接库的加载指令时,系统可以通知与应用程序对应的DVM重定向至所述预设动态链接库插件中的所述预设修正操作函数。
其中,所述原始动态链接库可以存放于原始DL模块,所述原始DL模块是Android系统中用于动态加载所述原始动态链接库的基础模块,所述原始DL模块还包括原始加载操作函数和dlsym函数,所述原始加载操作函数即为dlopen函数,所述dlopen函数是用于将所述原始动态链接库打开并加载到内存的操作函数,所述dlsym函数是用于获取函数地址的函数。
S203,根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的句柄handle;
S204,将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数;
S205,根据所述原始加载操作函数将所述原始动态链接库加载至内存中;
具体的,若对原始加载操作函数的调用关系也被篡改(即原始的dlopen函数也被篡改了),那么为了避免所述预设修正操作函数在调用所述原始加载操作函数时被重定向到与篡改后的动态链接库对应的篡改后的加载操作函数中,于是本发明实施例在重定向到所述预设修正操作函数后,可以通过所述预设修正操作函数调用与所述原始动态链接库对应的dlsym函数(即调用所述原始DL模块中的dlsym函数),并根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle,然后再将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数(无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数),进而通过所述原始加载操作函数将所述原始动态链接库加载至内存中。由于原始动态链接库可以使应用程序的运行变得更加稳定,因此,通过上述的方法将对篡改后的动态链接库的加载重新修改回对原始动态链接库的加载,使得应用程序的运行变得更加稳定。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle,并将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数,最后再根据原始加载操作函数将原始动态链接库加载至内存中。由于无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数,从而可以避免将篡改后的动态链接库加载至内存。由于加载原始动态链接库可以使应用程序的运行变得更加稳定,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
请参见图3,是本发明实施例所提供的一种数据加载方法的时序示意图,所述方法可以包括:
S301,应用程序内核发送对libhook的加载指令到DVM;
S302,所述应用程序内核发送对原始动态链接库的加载指令到所述DVM;
具体的,S301和S302步骤可以同时执行。在S301步骤之前,可以预先创建一个预设动态链接库插件(即libhook),并在GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述libhook中,所述libhook可以为一种新增的DL模块。当检测到对某应用程序(如浏览器应用)的启动操作时,需要对应用程序的内核进行初始化,在初始化的过程中通常需要加载相应的动态链接库(即.so文件),此时将查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令,同时为了避免因将篡改后的动态链接库加载至内存而导致应用程序出现崩溃的情况,可以进一步生成对libhook的加载指令,并将对所述原始动态链接库的加载指令和对libhook的加载指令一并发送至所述应用程序对应的DVM。
其中,原始动态链接库可以存放于libdll中(所述libdll是一种原始DL模块),所述libdll模块还包括原始加载操作函数和dlsym函数,所述原始加载操作函数即为dlopen函数,所述dlopen函数是用于将所述原始动态链接库打开并加载到内存的操作函数,所述dlsym函数是用于获取函数地址的函数。例如,所述原始动态链接库可以为libmttwebcore.so,即所述libdll包括libmttwebcore.so。
S303,所述DVM重定向到libhook中的预设修正操作函数;
具体的,所述DVM可以根据对libhook的加载指令,重定向到libhook中的预设修正操作函数,所述DVM还可以将对所述原始动态链接库的加载指令转发至所述libhook。
S304,所述libhook根据所述预设修正操作函数查找libdll中的原始加载操作函数的handle;
具体的,所述libhook中的所述预设修正操作函数可以根据对所述原始动态链接库的加载指令,调用与所述原始动态链接库对应的dlsym函数(即调用所述libdll中的dlsym函数),并根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle。
S305,所述libhook将所述handle转换为函数指针;
S306,所述libhook根据函数指针调用所述libdll中的原始加载操作函数;
具体的,所述libhook将所述handle转换为函数指针后,可以通过所述函数指针调用所述libdll中的原始加载操作函数。
S307,所述libdll根据原始加载操作函数加载原始动态链接库;
具体的,调用出所述libdll中的原始加载操作函数后,所述libdll可以通过原始加载操作函数将原始动态链接库加载到内存中。例如,当调用出所述libdll中的dlopen函数(即原始加载操作函数)时,所述libdll可以通过所述dlopen函数打开libmttwebcore.so(即原始动态链接库),并将libmttwebcore.so加载至内存。由于无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数(即避免了将篡改后的动态链接库加载至内存),而且原始动态链接库可以使应用程序的运行变得更加稳定,因此,通过上述的方法将对篡改后的动态链接库的加载重新修改回对原始动态链接库的加载,使得应用程序的运行变得更加稳定。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle,并将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数,最后再根据原始加载操作函数将原始动态链接库加载至内存中。由于无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数,从而可以避免将篡改后的动态链接库加载至内存。由于加载原始动态链接库可以使应用程序的运行变得更加稳定,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
请参见图4,是本发明实施例提供的一种数据加载装置的结构示意图。所述数据加载装置1可以应用于具有Android操作系统的终端中,所述数据加载装置1可以包括:重定向模块10、调用模块20、加载模块30、加载指令模块50、创建设置模块40;
所述创建设置模块40,用于创建预设动态链接库插件,并在GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中;
其中,所述预设动态链接库插件可以为一种新增的DL模块。
所述加载指令模块50,用于当检测到对应用程序的启动操作时,查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令;
具体的,当检测到对某应用程序(如浏览器应用)的启动操作时,需要对应用程序的内核进行初始化,在初始化的过程中通常需要加载相应的动态链接库(即.so文件),此时所述加载指令模块50将查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令。
所述重定向模块10,用于当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;
具体的,由于预设动态链接库插件被设置为系统默认机制,所以检测到对原始动态链接库的加载指令时,所述重定向模块10可以根据所述加载指令通知与应用程序对应的DVM重定向至所述预设动态链接库插件中的所述预设修正操作函数,即所述重定向模块10不会直接重定向到与篡改后的动态链接库对应的篡改后的加载操作函数。
其中,所述原始动态链接库可以存放于原始DL模块,所述原始DL模块是Android系统中用于动态加载所述原始动态链接库的基础模块,所述原始DL模块还包括原始加载操作函数和dlsym函数,所述原始加载操作函数即为dlopen函数,所述dlopen函数是用于将所述原始动态链接库打开并加载到内存的操作函数,所述dlsym函数是用于获取函数地址的函数。
所述调用模块20,用于根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
所述加载模块30,用于根据所述原始加载操作函数将所述原始动态链接库加载至内存中;
具体的,若对原始加载操作函数的调用关系没有被篡改,则所述重定向模块10重定向到所述预设修正操作函数后,所述调用模块20可以根据所述预设修正操作函数成功调用到与所述原始动态链接库对应的原始加载操作函数(即所述调用模块20可以直接调用所述原始DL模块中的dlopen函数),此时所述加载模块30将可以成功通过所述原始加载操作函数将所述原始动态链接库加载至内存中。由于原始动态链接库可以使应用程序的运行变得更加稳定,因此,通过将对篡改后的动态链接库的加载重新修改回对原始动态链接库的加载,使得应用程序的运行变得更加稳定。
进一步的,请一并参见图5,是上述图4中的调用模块20的结构示意图,所述调用模块20可以包括:查找单元201、转换调用单元202;
所述查找单元201,用于根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle;
所述转换调用单元202,用于将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数;
具体的,若对原始加载操作函数的调用关系也被篡改(即原始的dlopen函数也被篡改了),那么为了避免所述预设修正操作函数在调用所述原始加载操作函数时被重定向到与篡改后的动态链接库对应的篡改后的加载操作函数中,则所述调用模块20不能再直接调用所述原始DL模块中的dlopen函数(因为直接调用dlopen函数的话,会再被重定向到与篡改后的动态链接库对应的篡改后的加载操作函数),因此,在这种情况下需要通过所述查找单元201和所述转换调用单元202来调用所述原始加载操作函数。即在所述重定向模块10重定向到所述预设修正操作函数后,所述查找单元201可以通过所述预设修正操作函数调用与所述原始动态链接库对应的dlsym函数(即调用所述原始DL模块中的dlsym函数),所述查找单元201再根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle,然后所述转换调用单元202可以将所述handle转换为函数指针,所述转换调用单元202再根据所述函数指针调用所述原始加载操作函数。由此可见,无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数,所以通过所述查找单元201和所述转换调用单元202可以保证所调用到的加载操作函数始终为原始的dlopen函数,进而可以保证始终将原始动态链接库加载至内存中。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle,并将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数,最后再根据原始加载操作函数将原始动态链接库加载至内存中。由于无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数,从而可以避免将篡改后的动态链接库加载至内存。由于加载原始动态链接库可以使应用程序的运行变得更加稳定,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
请参见图6,是本发明实施例提供的另一种数据加载装置的结构示意图。如图6所示,所述数据加载装置1000可以应用于具有Android操作系统的终端中,所述数据加载装置1000可以包括:至少一个处理器1001,例如CPU,至少一个网络接口1004,用户接口1003,存储器1005,至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图6所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。
在图6所示的数据加载装置1000中,用户接口1003主要用于为用户提供输入的接口,获取用户输出的数据;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现
当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;
根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
根据所述原始加载操作函数将所述原始动态链接库加载至内存中。
在一个实施例中,所述处理器1001在执行根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数时,具体执行以下步骤:
根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的句柄handle;
将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数。
在一个实施例中,所述处理器1001在执行根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle时,具体执行以下步骤:
根据所述预设修正操作函数调用与所述原始动态链接库对应的dlsym函数,并根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle。
在一个实施例中,所述处理器1001在执行当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数之前,还执行以下步骤:
当检测到对应用程序的启动操作时,查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令;
则所述处理器1001在执行根据所述加载指令重定向到预设修正操作函数时,具体执行以下步骤:
根据所述加载指令通知与所述应用程序对应的DVM重定向到预设动态链接库插件中的预设修正操作函数。
在一个实施例中,所述处理器1001在执行当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数之前,还执行以下步骤:
创建预设动态链接库插件,并在全局偏移表GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中。
本发明实施例通过预先设置用于修改对篡改后的加载操作函数的调用关系的预设修正操作函数,使得在检测到对原始动态链接库的加载指令时,可以根据加载指令重定向到预设修正操作函数,并根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle,并将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数,最后再根据原始加载操作函数将原始动态链接库加载至内存中。由于无论所述原始加载操作函数的调用关系是否被篡改,只要基于所述函数指针始终可以调用到所述原始加载操作函数,从而可以避免将篡改后的动态链接库加载至内存。由于加载原始动态链接库可以使应用程序的运行变得更加稳定,所以可以避免应用程序出现崩溃,并提高应用程序在不同Android手机上的兼容性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
Claims (10)
1.一种数据加载方法,其特征在于,包括:
当检测到对应用程序的启动操作时,查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令;
当检测到对原始动态链接库的加载指令时,根据所述加载指令通知与所述应用程序对应的DVM重定向到预设动态链接库插件中的预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;设置在所述预设动态链接库插件中的所述预设修正操作函是用于调用与所述原始动态链接库对应的原始加载操作函数;
根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
根据所述原始加载操作函数将所述原始动态链接库加载至内存中。
2.如权利要求1所述的方法,其特征在于,所述根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,包括:
根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的句柄handle;
将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数。
3.如权利要求2所述的方法,其特征在于,所述根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle,具体包括:
根据所述预设修正操作函数调用与所述原始动态链接库对应的dlsym函数,并根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle。
4.如权利要求1所述的方法,其特征在于,在所述当检测到对原始动态链接库的加载指令时,根据所述加载指令重定向到预设修正操作函数的步骤之前,还包括:
创建预设动态链接库插件,并在全局偏移表GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中。
5.一种数据加载装置,其特征在于,包括:
加载指令模块,用于当检测到对应用程序的启动操作时,查找用于初始化所述应用程序的原始动态链接库,并生成对所述原始动态链接库的加载指令;
重定向模块,用于当检测到对原始动态链接库的加载指令时,根据所述加载指令通知与所述应用程序对应的DVM重定向到预设动态链接库插件中的预设修正操作函数;所述预设修正操作函数是用于修改对篡改后的加载操作函数的调用关系的函数;设置在所述预设动态链接库插件中的所述预设修正操作函是用于调用与所述原始动态链接库对应的原始加载操作函数;
调用模块,用于根据所述预设修正操作函数调用与所述原始动态链接库对应的原始加载操作函数,以实现将对所述篡改后的加载操作函数的调用修改为对所述原始加载操作函数的调用;
加载模块,用于根据所述原始加载操作函数将所述原始动态链接库加载至内存中。
6.如权利要求5所述的装置,其特征在于,所述调用模块包括:
查找单元,用于根据所述预设修正操作函数查找与所述原始动态链接库对应的原始加载操作函数的handle;
转换调用单元,用于将所述handle转换为函数指针,根据所述函数指针调用所述原始加载操作函数。
7.如权利要求6所述的装置,其特征在于,
所述查找单元,具体用于根据所述预设修正操作函数调用与所述原始动态链接库对应的dlsym函数,并根据所述dlsym函数查找与所述原始动态链接库对应的原始加载操作函数的handle。
8.如权利要求5所述的装置,其特征在于,还包括:
创建设置模块,用于创建预设动态链接库插件,并在GOT中查找所述原始动态链接库的偏移量,根据HOOK技术和所述原始动态链接库的偏移量设置用于调用与所述原始动态链接库对应的原始加载操作函数的预设修正操作函数,并将所述预设修正操作函数设置在所述预设动态链接库插件中。
9.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与所述存储器、所述网络接口相连,其中,所述网络接口用于提供网络通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行权利要求1-4任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行权利要求1-4任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610645732.5A CN107704279B (zh) | 2016-08-08 | 2016-08-08 | 一种数据加载方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610645732.5A CN107704279B (zh) | 2016-08-08 | 2016-08-08 | 一种数据加载方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107704279A CN107704279A (zh) | 2018-02-16 |
CN107704279B true CN107704279B (zh) | 2020-12-29 |
Family
ID=61168358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610645732.5A Active CN107704279B (zh) | 2016-08-08 | 2016-08-08 | 一种数据加载方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107704279B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108415739B (zh) * | 2018-02-28 | 2020-04-14 | 腾讯科技(深圳)有限公司 | 一种动态链接库函数的钩挂方法、装置和存储介质 |
CN111427548B (zh) * | 2020-03-18 | 2023-03-31 | 成都中科合迅科技有限公司 | 一种基于进程的插件式开发方法和系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908119A (zh) * | 2010-08-12 | 2010-12-08 | 浙江中控软件技术有限公司 | 一种动态链接库dll文件的处理方法和装置 |
CN102999354A (zh) * | 2012-11-15 | 2013-03-27 | 北京奇虎科技有限公司 | 文件加载方法和装置 |
CN103198244A (zh) * | 2013-03-26 | 2013-07-10 | 北京深思数盾科技有限公司 | 保护动态链接库的方法 |
CN103198255A (zh) * | 2013-04-03 | 2013-07-10 | 武汉大学 | 一种Android软件敏感行为监控与拦截方法及系统 |
CN104268472A (zh) * | 2014-09-11 | 2015-01-07 | 腾讯科技(深圳)有限公司 | 还原被第三方动态库修改函数地址的方法和装置 |
CN104765624A (zh) * | 2014-01-06 | 2015-07-08 | 腾讯科技(深圳)有限公司 | 虚拟机应用程序的更新处理方法和装置 |
CN105487849A (zh) * | 2014-12-22 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种调用dll未知导出函数的方法及系统 |
-
2016
- 2016-08-08 CN CN201610645732.5A patent/CN107704279B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101908119A (zh) * | 2010-08-12 | 2010-12-08 | 浙江中控软件技术有限公司 | 一种动态链接库dll文件的处理方法和装置 |
CN102999354A (zh) * | 2012-11-15 | 2013-03-27 | 北京奇虎科技有限公司 | 文件加载方法和装置 |
CN103198244A (zh) * | 2013-03-26 | 2013-07-10 | 北京深思数盾科技有限公司 | 保护动态链接库的方法 |
CN103198255A (zh) * | 2013-04-03 | 2013-07-10 | 武汉大学 | 一种Android软件敏感行为监控与拦截方法及系统 |
CN104765624A (zh) * | 2014-01-06 | 2015-07-08 | 腾讯科技(深圳)有限公司 | 虚拟机应用程序的更新处理方法和装置 |
CN104268472A (zh) * | 2014-09-11 | 2015-01-07 | 腾讯科技(深圳)有限公司 | 还原被第三方动态库修改函数地址的方法和装置 |
CN105487849A (zh) * | 2014-12-22 | 2016-04-13 | 哈尔滨安天科技股份有限公司 | 一种调用dll未知导出函数的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107704279A (zh) | 2018-02-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6740373B2 (ja) | ページコンポーネント動的レイアウト | |
CN108027741B (zh) | 基于补丁升级的文件处理方法、装置、终端以及存储介质 | |
WO2016177341A1 (zh) | 接口调用方法、装置及终端 | |
CN107526598B (zh) | 一种网络页面跳转控制方法及系统 | |
US10282185B2 (en) | Method and apparatus for firmware virtualization | |
CN103777967A (zh) | 页面返回方法、页面生成方法和装置 | |
CN110113391B (zh) | 一种客户端上线方法、装置及一种客户端运行方法、装置 | |
CN105094777B (zh) | 实现应用截屏的方法及装置 | |
US20140258891A1 (en) | Electronic device, storage medium and method for processing information | |
US10191751B2 (en) | Information processing device for generating application programming interface information | |
CN108647032B (zh) | 应用加载方法及装置、计算机装置和计算机可读存储介质 | |
WO2020177429A1 (zh) | 在应用中嵌入代码的方法、装置及电子设备 | |
US20140164942A1 (en) | Method and system to layout applications on multiple platforms | |
CN113138768B (zh) | 应用程序包生成方法、装置、电子设备以及可读存储介质 | |
CN104965723A (zh) | 应用程序的运行方法及装置 | |
CN111026439A (zh) | 应用程序的兼容方法、装置、设备及计算机存储介质 | |
CN111078256B (zh) | 自动化测试环境的升级方法、终端及可读存储介质 | |
CN107704279B (zh) | 一种数据加载方法以及装置 | |
CN112214250B (zh) | 一种应用程序组件的加载方法和装置 | |
CN111158689A (zh) | 跨系统的ui应用生成方法、设备及计算机可读存储介质 | |
CN113342447A (zh) | 基于Flutter的页面生成方法、装置、设备及存储介质 | |
CN115002548B (zh) | 电视平台应用接口调用方法、装置、终端设备及存储介质 | |
CN108009084B (zh) | 一种混合移动应用的测试方法、装置及系统 | |
US20150154314A1 (en) | Method, apparatus and terminal for webpage content browsing | |
CN106775790B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |