本申请涉及通信领域,尤其涉及一种用于生成和运行so文件的技术。
背景技术:
随着社会的发展,各种智能设备已经成为人们生活和工作中不可或缺的电子设备。现有的智能设备中广泛使用安卓(android)操作系统,由于安卓系统为开源系统,安卓系统的源代码是面向用户开放的。在遵守gnu协议的前提下,任何人都可以免费使用,随意控制软件的运行方式,这就容易导致安卓应用程序中的核心代码容易被他人获取。so库文件是linux下动态链接库,相比dex文件,so文件安全性更高,反编译难度更大。大多数android的开发者喜欢把核心算法、重要协议等放在so库文件中,因此保护so是android安全保护的核心。
技术实现要素:
本申请的一个目的是提供一种用于生成和运行so文件的方法与设备。
根据本申请的一个方面,提供了一种用于生成so文件的方法,应用于第一用户设备,该方法包括:
读取待处理的原so文件,并对所述原so文件执行加密操作以生成第二文件;
获取第一文件,其中,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
将所述第一文件与第二文件进行打包,以生成目标so文件。
根据本申请的另一个方面,提供了一种用于运行so文件的方法,应用于第二用户设备,该方法包括:
获取目标应用的应用安装包,其中,所述应用安装包的安装目录中包括目标so文件,所述目标so文件包括第一文件与第二文件,其中,所述第二文件是将一原so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
安装所述目标应用并执行运行所述目标应用的操作。
根据本申请的一个方面,提供了一种用于生成so文件的第一用户设备,该设备包括:
一一模块,用于读取待处理的原so文件,并对所述原so文件执行加密操作以生成第二文件;
一二模块,用于获取第一文件,其中,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
一三模块,用于将所述第一文件与第二文件进行打包,以生成目标so文件。
根据本申请的一个方面,提供了一种用于运行so文件的第二用户设备,该设备包括:
二一模块,用于获取目标应用的应用安装包,其中,所述应用安装包的安装目录中包括目标so文件,所述目标so文件包括第一文件与第二文件,其中,所述第二文件是将一原so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
二二模块,用于安装所述目标应用并执行运行所述目标应用的操作。
根据本申请的一个方面,提供了一种用于生成和运行so文件的设备,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上所述任一方法的操作。
根据本申请的另一个方面,提供了存储指令的计算机可读介质,所述指令在被执行时使得系统进行如上所述任一方法的操作。
与现有技术相比,本申请中通过对so原文件进行加密,以及对so库本身加层,以使得java层调用so库中的函数时必须先经过该层,从而有效地隐藏了so库的接口,保护了so库中的内容,并且,本申请在so库加固的过程中注入各种风险检测的代码,以达到防止so库被破解,保护so库安全、从而到达反爬取的目的。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1示出根据本申请一个实施例的一种用于生成so文件的方法流程图,应用于第一用户设备;
图2示出根据本申请又一个实施例的一种用于生成so文件的方法流程图;
图3示出根据本申请又一个实施例的一种用于运行so文件的方法流程图,应用于第二用户设备;
图4示出根据本申请另一个实施例的一种用于运行so文件的方法流程图;
图5示出根据本申请一个实施例的一种用于生成so文件的第一用户设备的设备示意图;
图6示出根据本申请一个实施例的一种用于运行so文件的第二用户设备的设备示意图;
图7示出可被用于实施本发明中所述各个实施例的示例性系统。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flashram)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
本申请所指设备包括但不限于用户设备、网络设备、或用户设备与网络设备通过网络相集成所构成的设备。所述用户设备包括但不限于任何一种可与用户进行人机交互(例如通过触摸板进行人机交互)的移动电子产品,例如智能手机、平板电脑等,所述移动电子产品可以采用任意操作系统,如android操作系统、ios操作系统等。其中,所述网络设备包括一种能够按照事先设定或存储的指令,自动进行数值计算和信息处理的电子设备,其硬件包括但不限于微处理器、专用集成电路(asic)、可编程逻辑器件(pld)、现场可编程门阵列(fpga)、数字信号处理器(dsp)、嵌入式设备等。所述网络设备包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(cloudcomputing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、vpn网络、无线自组织网络(adhoc网络)等。优选地,所述设备还可以是运行于所述用户设备、网络设备、或用户设备与网络设备、网络设备、触摸终端或网络设备与触摸终端通过网络相集成所构成的设备上的程序。
当然,本领域技术人员应能理解上述设备仅为举例,其他现有的或今后可能出现的设备如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
在本申请的描述中,“多个”的含义是两个或者更多,除非另有明确具体的限定。
图1示出了根据本申请一个实施例的一种用于生成so文件的方法,应用于第一用户设备,所述方法包括步骤s101、步骤s102和步骤s103。
具体地,在步骤s101中,第一用户设备读取待处理的原so文件,并对所述原so文件执行加密操作以生成第二文件。其中,所述第一用户设备包括电脑等计算设备,且该第一用户设备中可以创建编译环境供后续编译生成apk(androidapplicationpackage,android应用程序包)安装包,原so文件是根据一个或者多个c或c 原文件生成的,可以包括核心代码(例如,核心函数、类等),该原so文件中的内容是用于编译生成目标应用的安装包的必要文件,也是所述安装包被安装之后运行时的必要文件。例如,第一用户设备被赋予权限读取待处理的原so文件,在一些实施例中,所述读取待处理的原so文件包括:调用c语言的第一函数以读取待处理的原so文件。例如,第一用户设备调用c语言标准库函数fopen和fgets来读取原so文件。
在一些实施例中,所述对所述原so文件执行加密操作以生成第二文件,包括:读取所述原so文件中的一个或者多个字节;对所述一个或者多个字节中每个字节执行幂运算,以生成第二文件。例如,通过对原so文件进行加密以防止原so文件被轻易获取,对该原so文件进行加密的加密算法不限由开发人员进行设定(例如,还可以是位移或者其他加密算法),在此,第一用户设备调用c语言的math库函数pow(x,y)做幂运算,(x为每个byte的int值,y取值为2、4、5、8、10之一)将原so文件中的每个二进制内容加密成新的内容,以生成加密后的原so文件,即第二文件。且该加密方法对应的解密方法在后续与第二文件同处一个文件中。
在步骤s102中,第一用户设备获取第一文件,其中,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中需要被java层调用的函数接口。例如,第一用户设备新建一第一文件,并在该文件中加入目标函数,其中,所述第一文件为c文件或c 文件,所述目标函数包括jni(javanativeinterface,java本地接口)初始函数,该jni初始函数(例如,jni_onload函数)用于当初始化so文件时被调用,所述目标函数可以实现第一功能以及第二功能,例如,将解密所述第二文件的方法写入第一文件中,并用第一功能来实现;第一文件中还定义了动态注册原so文件中需要被java层调用的若干个接口的方法,并用第二功能来实现,其中,动态注册的本质是当java层跟c层需要进行互相调用时把so库中的jni接口跟java层的native接口对应上,原so文件中的接口只有动态注册后才可以被java层调用,其中,原so文件位于c层。
在步骤s103中,第一用户设备将所述第一文件与第二文件进行打包,以生成目标so文件。例如,在得到第一文件以第二文件的基础上,第一用户设备将该两个文件进行打包以生成一个新的文件,即目标so文件,以便后续将该目标so文件放到打包工具指定的目录里,最后通过工具编译生成apk安装包,其中,该apk安装包中包括所述目标so文件,该apk安装包供后续上线运行使用。该生成的目标so文件可以避免被静态分析源码接口。
在一些实施例中,所述目标函数还用于启动目标业务线程,其中,所述目标业务线程用于实现模拟器环境监测,以及实现调试状态检测。例如,在所述目标函数中注入各种风险检测的代码,在后续apk上线运行后运行该风险检测的代码以检测当前是否存在风险。例如,该目标业务线程用于在后续apk上线运行后检测运行环境(例如,该apk是否运行于模拟器中),以及so文件是否处于调试状态。在上述检测环境下,以便后续运行apk安装包时避免被动态调试破解函数。
图2示出了根据本申请又一个实施例的一种用于生成so文件的方法流程图,一用户设备(例如,电脑)新建一文件,并在该文件中加入jni_onload函数,并在该函数内加入文件解码功能和动态注册jni功能,并加入安全检测线程,最终得到一个新的so层调用类proxyjni文件。同时通过工具读取需要加固的so的二进制文件(例如,是通过加固工具来完成的,就是读取存储介质上的文件,由系统自带的file类来实现),并对该文件进行加密处理,得到一个新的二进制文件块sochunk,将proxyjni文件和sochunk文件打包成一个新的so文件。
图3示出了根据本申请一个实施例的一种用于运行so文件的方法,应用于第二用户设备,所述方法包括步骤s201和步骤s202。
具体地,在步骤s201中,第二用户设备获取目标应用的应用安装包,其中,所述应用安装包的安装目录中包括目标so文件,所述目标so文件包括第一文件与第二文件,其中,所述第二文件是将一原so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的函数接口。其中,所述第二用户设备包括手机、平板等计算设备,且该第二用户设备中可以运行apk安装包(例如,该第二用户设备中运用安卓系统)。例如,第二用户设备获取一目标应用的安装包,其中,该安装包中包括目标so文件,其中,所述目标so文件是由第一文件与第二文件生成的,所述第二文件是将一so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得上述一so文件,所述第二功能包括动态注册该一so文件中的函数接口,所述目标函数为jni_onload函数。
在步骤s202中,第二用户设备安装所述目标应用并执行运行所述目标应用的操作。例如,在所述目标应用被安装后,响应于第二用户设备中的触发事件(例如,用户触发或者其他应用程序触发),第二用户设备打开所述目标应用后运行该目标应用。每一次目标应用开始运行后(例如,在运行前该目标应用的进程处于关闭状态),当存在java层需要调用so库中的内容时,不是直接向so库进行调用函数,而是通过第一文件(可以称为代理文件)直接调用原so文件中动态注册过的jni接口,从而保障了so库接口的安全,也并不影响目标应用的运行。
在一些实施例中,所述方法还包括步骤s203(未示出),在步骤s203中,第二用户设备在所述目标应用运行的过程中,读取所述第二文件的内容,并将所述第二文件还原成原so文件。每一次目标应用开始运行后,虚拟机在加载目标so文件的时候,会调用第一文件中的目标函数,执行第一功能和第二功能。例如,当目标应用启动后,存在上层业务需要加载so库时,第二用户设备中的虚拟机(例如,art、dalvik)会调用目标so文件中的jni_onload函数,并自动执行用jni_onload函数中的第一功能对第二文件进行解密获得一原so文件,其中,所述第一功能具有解密所述第二文件中加密算法的功能。为后续对该原so文件中的接口进行动态注册提供基础。在一些实施例中,所述将所述第二文件还原成原so文件,包括:调用c语言的第二函数对所述第二文件中的每个字节执行开方运算,以还原成原so文件。其中,所述目标so文件的jni_onload函数中包括解密所述第二文件的方法,例如,第二用户设备调用c语言的math库函数pow(x,y1),(x为第二文件中的二进制内容中每个byte(字节)的int值,y1为加密的时候y值的倒数即y1=1/y),以将现第二文件中的二进制内容还原为原so文件的内容。以便后续获取原so文件中的内容(例如,一些功能函数)。
在一些实施例中,所述方法还包括步骤s204(未示出),在步骤s204中,第二用户设备从所述原so文件中解析出多个jni接口;通过所述多个jni接口调用registernativemethods进行动态注册。例如,在从目标so文件中获取原so文件的基础上,第二用户设备读取原so文件中的section信息来获取多个jni接口,并调用registernativemethod方法对所述多个jni接口进行动态注册,其中,该registernativemethods是android提供的系统方法,专门用来注册jni函数的(即在此注册原so文件中的jni函数接口),在进行动态注册后,该原so文件中的多个jni接口后续就可以正确地被java层调用。
例如,图4示出了根据本申请一个实施例的一种用于运行so文件的方法流程图。在目标应用运行时,第二用户设备读取第二文件的文件块中的二进制内容,并对每一个byte进行开方运算,以得到新的二进制文件块(即原so文件),第二用户设备随后解析该新的二进制文件块中的jni接口,并调用jni接口registernativemethods方法动态注册接口。
在一些实施例中,所述方法还包括步骤s205(未示出),在步骤s205中,第二用户设备在所述目标应用运行的过程中,检测所述目标应用的运行是否满足预设条件,若未满足,执行终止运行所述目标应用。例如,在所述目标so文件中包括各种风险检测代码,其中,该些风险检测代码会在jni_onload函数被调用的时候执行。例如,调用系统函数pthread_create创建一个业务线程p1,该业务线程用于实现模拟器环境监测,以及实现调试状态检测。若检测到异常,立即调用系统函数_exit()来终止目标应用的运行,从而降低他人企图破解目标so文件中的各个函数的可能性。在一些实施例中,所述预设条件包括以下至少任一项:
1)所述目标应用运行于预设品牌的用户设备上;
例如,所述p1线程中包括实现模拟器环境检测的功能,调用系统函数__system_property_get获取品牌brand值,如果不是预设的手机品牌,即当前目标应用运行在非预设手机品牌的手机中,即目标应用并未被授权允许在该类手机上运行,判断当前运行环境存在风险,极有可能为模拟器。
2)所述目标应用运行于预设的设备上;例如,调用系统函数__system_property_get获取model值,如果为sdk,可以认为存在将目标应用的安装包运行在安卓模拟器中(例如,以模拟器的形式运行于电脑)),判断当前运行环境存在风险,极有可能为模拟器。
3)所述目标应用未处于调试状态。例如,调用系统函数gitpid()获取当前进程号pid,根据所述进程号调用系统函数fopen,打开/proc/pid/status文件,并调用系统函数fgets获取前述文件中的第6行以解析出tracerpid字段,如果tracerpid不等于0,就判断是调试模式,若tracerpid等于0,就判断目标应用未处于调试状态。当存在设备使用idaattach程序企图获取so文件时,在/proc/pid/status文件的tracerpid字段会写入调试程序的pid也就是说使用tracerpid反调试的原理就是检测这个字段是否为0,为0说明没有被调试,不为0说明正在被调试。
图5示出了根据本申请一个实施例的一种用于生成so文件的第一用户设备,所述第一用户设备包括一一模块101、一二模块102和一三模块103。
具体地,一一模块101,用于读取待处理的原so文件,并对所述原so文件执行加密操作以生成第二文件。其中,所述第一用户设备包括电脑等计算设备,且该第一用户设备中可以创建编译环境供后续编译生成apk(androidapplicationpackage,android应用程序包)安装包,原so文件是根据一个或者多个c或c 原文件生成的,可以包括核心代码(例如,核心函数、类等),该原so文件中的内容是用于编译生成目标应用的安装包的必要文件,也是所述安装包被安装之后运行时的必要文件。例如,第一用户设备被赋予权限读取待处理的原so文件。
一二模块102,用于获取第一文件,其中,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的函数接口。例如,第一用户设备新建一第一文件,并在该文件中加入目标函数,其中,所述第一文件为c文件或c 文件,所述目标函数包括jni(javanativeinterface,java本地接口)初始函数,该jni初始函数(例如,jni_onload函数)用于当初始化so文件时被调用,所述目标函数可以实现第一功能以及第二功能,例如,将解密所述第二文件的方法写入第一文件中,并用第一功能来实现;第一文件中还定义了动态注册原so文件中需要被java层调用的若干个接口的方法,并用第二功能来实现,其中,动态注册的本质是当java层跟c层需要进行互相调用,原so文件中的接口只有动态注册后才可以被java层调用,其中,原so文件位于c层。
一三模块103,用于将所述第一文件与第二文件进行打包,以生成目标so文件。例如,在得到第一文件以第二文件的基础上,第一用户设备将该两个文件进行打包以生成一个新的文件,即目标so文件,以便后续将该目标so文件放到打包工具指定的目录里,最后通过工具编译生成apk安装包,其中,该apk安装包中包括所述目标so文件,该apk安装包供后续上线运行使用。该生成的目标so文件可以避免被静态分析源码接口。
在一些实施例中,,所述读取待处理的原so文件包括:
调用c语言的第一函数以读取待处理的原so文件。相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,,所述对所述原so文件执行加密操作以生成第二文件,包括:
读取所述原so文件中的一个或者多个字节;
对所述一个或者多个字节中每个字节执行幂运算,以生成第二文件。相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,,所述目标函数还用于启动目标业务线程,其中,所述目标业务线程用于实现模拟器环境监测,以及实现调试状态检测。相关操作与图1所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
图6示出了根据本申请一个实施例的一种用于运行so文件的第二用户设备,所述第二用户设备包括二一模块201、二二模块202。
具体地,二一模块201,用于获取目标应用的应用安装包,其中,所述应用安装包的安装目录中包括目标so文件,所述目标so文件包括第一文件与第二文件,其中,所述第二文件是将一原so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口。其中,所述第二用户设备包括手机、平板等计算设备,且该第二用户设备中可以运行apk安装包(例如,该第二用户设备中运用安卓系统)。例如,第二用户设备获取一目标应用的安装包,其中,该安装包中包括目标so文件,其中,所述目标so文件是由第一文件与第二文件生成的,所述第二文件是将一so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得上述一so文件,所述第二功能包括动态注册该一so文件中的native函数接口,所述目标函数为jni_onload函数。
二二模块202,用于安装所述目标应用并执行运行所述目标应用的操作。例如,在所述目标应用被安装后,响应于第二用户设备中的触发事件(例如,用户触发或者其他应用程序触发),第二用户设备打开所述目标应用后运行该目标应用。每一次目标应用开始运行后(例如,在运行前该目标应用的进程处于关闭状态),当存在java层需要调用so库中的内容时,不是直接向so库进行调用函数,而是通过第一文件(可以称为代理文件)间接地向so库进行调用,从而保障了so库接口的安全,也并不影响目标应用的运行。
在一些实施例中,所述第二用户设备还包括二三模块203(未示出),二三模块203,用于在所述目标应用运行的过程中,读取所述第二文件的内容,并将所述第二文件还原成原so文件。相关操作与图3所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述将所述第二文件还原成原so文件,包括:
调用c语言的第二函数对所述第二文件中的每个字节执行开方运算,以还原成原so文件。相关操作与图3所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述第二用户设备还包括二四模块204(未示出),二四模块204,用于从所述原so文件中解析出多个jni接口;
通过所述多个jni接口调用registernativemethods进行动态注册。相关操作与图3所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,所述第二用户设备还包括二五模块205(未示出),二五模块205,用于在所述目标应用运行的过程中,检测所述目标应用的运行是否满足预设条件,若未满足,执行终止运行所述目标应用。相关操作与图3所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
在一些实施例中,,所述预设条件包括以下至少任一项:
所述目标应用运行于预设品牌的用户设备上;
所述目标应用运行于预设的设备上;
所述目标应用未处于调试状态。相关操作与图3所示实施例相同或相近,故不再赘述,在此以引用方式包含于此。
本申请还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机代码,当所述计算机代码被执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机程序产品,当所述计算机程序产品被计算机设备执行时,如前任一项所述的方法被执行。
本申请还提供了一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储器,用于存储一个或多个计算机程序;
当所述一个或多个计算机程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现如前任一项所述的方法。
图7示出了可被用于实施本申请中所述的各个实施例的示例性系统;
如图7所示在一些实施例中,系统300能够作为各所述实施例中的任意一个设备。在一些实施例中,系统300可包括具有指令的一个或多个计算机可读介质(例如,系统存储器或nvm/存储设备320)以及与该一个或多个计算机可读介质耦合并被配置为执行指令以实现模块从而执行本申请中所述的动作的一个或多个处理器(例如,(一个或多个)处理器305)。
对于一个实施例,系统控制模块310可包括任意适当的接口控制器,以向(一个或多个)处理器305中的至少一个和/或与系统控制模块310通信的任意适当的设备或组件提供任意适当的接口。
系统控制模块310可包括存储器控制器模块330,以向系统存储器315提供接口。存储器控制器模块330可以是硬件模块、软件模块和/或固件模块。
系统存储器315可被用于例如为系统300加载和存储数据和/或指令。对于一个实施例,系统存储器315可包括任意适当的易失性存储器,例如,适当的dram。在一些实施例中,系统存储器315可包括双倍数据速率类型四同步动态随机存取存储器(ddr4sdram)。
对于一个实施例,系统控制模块310可包括一个或多个输入/输出(i/o)控制器,以向nvm/存储设备320及(一个或多个)通信接口325提供接口。
例如,nvm/存储设备320可被用于存储数据和/或指令。nvm/存储设备320可包括任意适当的非易失性存储器(例如,闪存)和/或可包括任意适当的(一个或多个)非易失性存储设备(例如,一个或多个硬盘驱动器(hdd)、一个或多个光盘(cd)驱动器和/或一个或多个数字通用光盘(dvd)驱动器)。
nvm/存储设备320可包括在物理上作为系统300被安装在其上的设备的一部分的存储资源,或者其可被该设备访问而不必作为该设备的一部分。例如,nvm/存储设备320可通过网络经由(一个或多个)通信接口325进行访问。
(一个或多个)通信接口325可为系统300提供接口以通过一个或多个网络和/或与任意其他适当的设备通信。系统300可根据一个或多个无线网络标准和/或协议中的任意标准和/或协议来与无线网络的一个或多个组件进行无线通信。
对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器(例如,存储器控制器模块330)的逻辑封装在一起。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑封装在一起以形成系统级封装(sip)。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑集成在同一模具上。对于一个实施例,(一个或多个)处理器305中的至少一个可与系统控制模块310的一个或多个控制器的逻辑集成在同一模具上以形成片上系统(soc)。
在各个实施例中,系统300可以但不限于是:服务器、工作站、台式计算设备或移动计算设备(例如,膝上型计算设备、手持计算设备、平板电脑、上网本等)。在各个实施例中,系统300可具有更多或更少的组件和/或不同的架构。例如,在一些实施例中,系统300包括一个或多个摄像机、键盘、液晶显示器(lcd)屏幕(包括触屏显示器)、非易失性存储器端口、多个天线、图形芯片、专用集成电路(asic)和扬声器。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(asic)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,ram存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。本领域技术人员应能理解,计算机程序指令在计算机可读介质中的存在形式包括但不限于源文件、可执行文件、安装包文件等,相应地,计算机程序指令被计算机执行的方式包括但不限于:该计算机直接执行该指令,或者该计算机编译该指令后再执行对应的编译后程序,或者该计算机读取并执行该指令,或者该计算机读取并安装该指令后再执行对应的安装后程序。在此,计算机可读介质可以是可供计算机访问的任意可用的计算机可读存储介质或通信介质。
通信介质包括藉此包含例如计算机可读指令、数据结构、程序模块或其他数据的通信信号被从一个系统传送到另一系统的介质。通信介质可包括有导的传输介质(诸如电缆和线(例如,光纤、同轴等))和能传播能量波的无线(未有导的传输)介质,诸如声音、电磁、rf、微波和红外。计算机可读指令、数据结构、程序模块或其他数据可被体现为例如无线介质(诸如载波或诸如被体现为扩展频谱技术的一部分的类似机制)中的已调制数据信号。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被更改或设定的信号。调制可以是模拟的、数字的或混合调制技术。
作为示例而非限制,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动的介质。例如,计算机可读存储介质包括,但不限于,易失性存储器,诸如随机存储器(ram,dram,sram);以及非易失性存储器,诸如闪存、各种只读存储器(rom,prom,eprom,eeprom)、磁性和铁磁/铁电存储器(mram,feram);以及磁性和光学存储设备(硬盘、磁带、cd、dvd);或其它现在已知的介质或今后开发的能够存储供计算机系统使用的计算机可读信息/数据。
在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
1.一种用于生成so文件的方法,应用于第一用户设备,其中,该方法包括:
读取待处理的原so文件,并对所述原so文件执行加密操作以生成第二文件;
获取第一文件,其中,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
将所述第一文件与第二文件进行打包,以生成目标so文件。
2.根据权利要求1所述的方法,其中,所述读取待处理的原so文件包括:
调用c语言的第一函数以读取待处理的原so文件。
3.根据权利要求1或2所述的方法,其中,所述对所述原so文件执行加密操作以生成第二文件,包括:
读取所述原so文件中的一个或者多个字节;
对所述一个或者多个字节中每个字节执行幂运算,以生成第二文件。
4.根据权利要求1所述的方法,所述目标函数还用于启动目标业务线程,其中,所述目标业务线程用于实现模拟器环境监测,以及实现调试状态检测。
5.一种用于运行so文件的方法,应用于第二用户设备,其中,该方法包括:
获取目标应用的应用安装包,其中,所述应用安装包的安装目录中包括目标so文件,所述目标so文件包括第一文件与第二文件,其中,所述第二文件是将一原so文件执行加密操作后生成的,所述第一文件包括目标函数,所述目标函数用于实现第一功能以及第二功能,其中,所述第一功能包括解码所述第二文件以获得所述原so文件,所述第二功能包括动态注册所述原so文件中的native函数接口;
安装所述目标应用并执行运行所述目标应用的操作。
6.根据权利要求5所述的方法,其中,所述方法还包括:
在所述目标应用运行的过程中,读取所述第二文件的内容,并将所述第二文件还原成原so文件。
7.根据权利要求6所述的方法,其中,所述将所述第二文件还原成原so文件,包括:
调用c语言的第二函数对所述第二文件中的每个字节执行开方运算,以还原成原so文件。
8.根据权利要求6或7所述的方法,其中,所述方法还包括:
从所述原so文件中解析出多个jni接口;
通过所述多个jni接口调用registernativemethods进行动态注册。
9.根据权利要求5所述的方法,其中,所述方法还包括:
在所述目标应用运行的过程中,检测所述目标应用的运行是否满足预设条件,若未满足,执行终止运行所述目标应用。
10.根据权利要求9所述的方法,其中,所述预设条件包括以下至少任一项:
所述目标应用运行于预设品牌的用户设备上;
所述目标应用运行于预设的设备上;
所述目标应用未处于调试状态。
11.一种用于生成so文件的设备,其中,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求1至4中任一项所述的方法。
12.一种用于运行so文件的设备,其中,该设备包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如权利要求5至10中任一项所述的方法。
13.一种存储指令的计算机可读介质,所述指令在被执行时使得系统进行如权利要求1至10中任一项所述方法的操作。
技术总结