可左右滑动选省市

数据处理方法、装置、设备及存储介质发明专利

更新时间:2025-02-24
数据处理方法、装置、设备及存储介质发明专利 专利申请类型:发明专利;
地区:广东-深圳;
源自:深圳高价值专利检索信息库;

专利名称:数据处理方法、装置、设备及存储介质

专利类型:发明专利

专利申请号:CN202010696529.7

专利申请(专利权)人:腾讯科技(深圳)有限公司
权利人地址:广东省深圳市南山区高新区科技中一路腾讯大厦35层

专利发明(设计)人:夏胜飞

专利摘要:本发明实施例公开了一种数据处理方法、装置、设备及存储介质,其中,一种数据处理方法包括:获取应用程序的安装数据包,对所述安装数据包进行解析,得到所述应用程序的方法签名信息。获取运行所述安装数据包生成的方法运行日志数据,采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。本发明实施例可根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,避免代码文件中的信息丢失,可增加应用程序的代码文件的可读性。

主权利要求:
1.一种数据处理方法,其特征在于,包括:
获取应用程序的安装数据包;所述安装数据包中包括运行结果获取指针和至少一个函数;
对所述安装数据包进行解析,得到所述应用程序的方法签名信息;
构建日志数据获取函数,运行所述安装数据包,调用所述日志数据获取函数中的函数获取指针,从所述安装数据包中获取目标函数的函数标识,调用所述日志数据获取函数中的对象类型获取接口,从所述安装数据包中获取所述目标函数的函数参数的类型信息,调用所述运行结果获取指针,获取所述目标函数的运行结果,根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据;所述目标函数为所述至少一个函数中的任一函数;
采用所述应用程序的方法签名信息以及方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件;所述方法运行日志数据包括所述至少一个函数分别对应的运行日志数据。
2.根据权利要求1所述的方法,其特征在于,所述应用程序的方法签名信息包括所述目标函数的函数标识以及所述目标函数的函数参数;
所述采用所述应用程序的方法签名信息以及方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件,包括:根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据;
对与所述目标函数匹配的运行日志数据进行解析,得到所述目标函数的函数参数的类型信息以及所述目标函数的运行结果;
将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件。
3.根据权利要求2所述的方法,其特征在于,所述将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件,包括:在所述应用程序的方法签名信息中,确定关于所述目标函数的目标代码指令;
在所述应用程序的方法签名信息的所述目标代码指令中,添加所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,得到所述应用程序的代码文件。
4.根据权利要求1所述的方法,其特征在于,所述对所述安装数据包进行解析,得到所述应用程序的方法签名信息,包括:从所述安装数据包中的数据字段中获取所述安装数据包中的类列表,所述类列表中包括至少一个函数的函数地址;
根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息;
根据所述每个函数的方法签名信息生成所述应用程序的方法签名信息。
5.根据权利要求4所述的方法,其特征在于,所述根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息,包括:根据所述每个函数的函数地址从所述安装数据包中,获取所述每个函数的结构内容;
从所述每个函数的结构内容中获取所述每个函数的函数标识以及所述每个函数的函数参数;
根据所述每个函数的函数标识以及所述每个函数的函数参数,生成所述每个函数的方法签名信息。
6.根据权利要求1所述的方法,其特征在于,所述根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据,包括:创建所述目标函数对应的候选函数结构体;
在调用所述对象类型获取接口以及所述函数获取指针之后,将所述目标函数的函数标识以及所述目标函数的函数参数的类型信息,存入所述候选函数结构体中,得到第一函数结构体;
在调用所述运行结果获取指针之后,将所述目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体;
将所述第二函数结构体中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果存入至数据库中;
将所述数据库中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,作为与所述目标函数匹配的运行日志数据;
所述根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据,包括:根据所述目标函数的函数标识,从所述数据库中识别与所述目标函数匹配的运行日志数据。
7.一种数据处理装置,其特征在于,包括:
第一获取模块,用于获取应用程序的安装数据包;所述安装数据包中包括运行结果获取指针和至少一个函数;
解析模块,用于对所述安装数据包进行解析,得到所述应用程序的方法签名信息;
第二获取模块,用于构建日志数据获取函数,运行所述安装数据包,调用所述日志数据获取函数中的函数获取指针,从所述安装数据包中获取目标函数的函数标识,调用所述日志数据获取函数中的对象类型获取接口,从所述安装数据包中获取所述目标函数的函数参数的类型信息,调用所述运行结果获取指针,获取所述目标函数的运行结果,根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据;所述目标函数为所述至少一个函数中的任一函数;
反编译模块,用于采用所述应用程序的方法签名信息以及方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件;所述方法运行日志数据包括所述至少一个函数分别对应的运行日志数据。
8.一种计算机设备,其特征在于,包括:处理器、存储器以及网络接口;
所述处理器与存储器、网络接口相连,其中,网络接口用于提供数据通信功能,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如权利要求1至6任一项所述的方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时,执行如权利要求1至6中任一项所述方法的步骤。 说明书 : 数据处理方法、装置、设备及存储介质技术领域[0001] 本发明涉及互联网技术领域,具体涉及数据处理技术领域,尤其涉及一种数据处理方法、装置、设备及存储介质。背景技术[0002] 反编译技术最早出现在60年代,主要是为了实现代码的跨平台移植,目前已经被广泛运用到程序理解,源代码恢复,程序调试,安全分析等各个方面。反编译即反向编译,计算机软件反向工程(Reverseengineering)也称为计算机软件还原工程,是指通过对他人软件的目标程序(这里指应用安装包)进行“逆向分析、研究”工作,以推导出软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译就是编译的逆过程,将可执行文件经过反编译生成代码文件。现有技术中是直接根据反编译软件对应用程序的可执行文件进行静态反编译,会导致可执行文件中的部分信息丢失,进而导致反编译出来的代码文件的可读性比较差。发明内容[0003] 本发明实施例提供了一种数据处理方法、装置、设备及存储介质,避免代码文件中的信息丢失,可以提高应用程序的代码文件的可读性。[0004] 一方面,本发明实施例提供了一种数据处理方法,所述数据处理方法包括:[0005] 获取应用程序的安装数据包;[0006] 对所述安装数据包进行解析,得到所述应用程序的方法签名信息;[0007] 获取运行所述安装数据包生成的方法运行日志数据;[0008] 采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。[0009] 其中,所述应用程序的方法签名信息包括目标函数的函数标识以及所述目标函数的函数参数;所述方法运行日志数据包括至少一个函数的运行日志数据,所述目标函数为所述至少一个函数中的任一函数;[0010] 所述采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件,包括:[0011] 根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据;[0012] 对与所述目标函数匹配的运行日志数据进行解析,得到所述目标函数的函数参数的类型信息以及所述目标函数的运行结果;[0013] 将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件。[0014] 其中,所述将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件,包括:[0015] 在所述应用程序的方法签名信息中,确定关于所述目标函数的目标代码指令;[0016] 在所述应用程序的方法签名信息的所述目标代码指令中,添加所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,得到所述应用程序的代码文件。[0017] 其中,所述安装数据包中包括运行结果获取指针;所述方法运行日志数据包括与所述目标函数匹配的运行日志数据;[0018] 所述获取运行所述安装数据包生成的方法运行日志数据,包括:[0019] 构建日志数据获取函数,所述日志数据获取函数包括对象类型获取接口以及函数获取指针;[0020] 运行所述安装数据包;[0021] 调用所述函数获取指针从所述安装数据包中获取所述目标函数的函数标识;[0022] 调用所述对象类型获取接口从所述安装数据包中获取所述目标函数的函数参数的类型信息;[0023] 调用所述运行结果获取指针,获取所述目标函数的运行结果;[0024] 根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据。[0025] 其中,所述对所述安装数据包进行解析,得到所述应用程序的方法签名信息,包括:[0026] 从所述安装数据包中的数据字段中获取所述安装数据包中的类列表,所述类列表中包括至少一个函数的函数地址;[0027] 根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息;[0028] 根据所述每个函数的方法签名信息生成所述应用程序的方法签名信息。[0029] 其中,所述根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息,包括:[0030] 根据所述每个函数的函数地址从所述安装包中,获取所述每个函数的结构内容;[0031] 从所述每个函数的结构内容中获取所述每个函数的函数标识以及所述每个函数的函数参数;[0032] 根据所述每个函数的函数标识以及所述每个函数的函数参数,生成所述每个函数的方法签名信息。[0033] 其中,所述根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据,包括:[0034] 创建所述目标函数对应的候选函数结构体;[0035] 在调用所述对象类型获取接口以及所述函数获取指针之后,将所述目标函数的函数标识以及所述目标函数的函数参数的类型信息,存入所述候选函数结构体中,得到第一函数结构体;[0036] 在调用所述运行结果获取指针之后,将所述目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体;[0037] 将所述第二函数结构体中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果存入至数据库中;[0038] 将所述数据库中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,作为与所述目标函数匹配的运行日志数据;[0039] 所述根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据,包括:[0040] 根据所述目标函数的函数标识,从所述数据库中识别与所述目标函数匹配的运行日志数据。[0041] 一方面,本申请实施例提供一种数据处理装置,包括:[0042] 第一获取模块,用于获取应用程序的安装数据包;[0043] 解析模块,用于对所述安装数据包进行解析,得到所述应用程序的方法签名信息;[0044] 第二获取模块,用于获取运行所述安装数据包生成的方法运行日志数据;[0045] 反编译模块,用于采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。[0046] 其中,所述应用程序的方法签名信息包括目标函数的函数标识以及所述目标函数的函数参数;所述方法运行日志数据包括至少一个函数的运行日志数据,所述目标函数为所述至少一个函数中的任一函数;[0047] 上述反编译模块包括:[0048] 识别单元,用于根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据;[0049] 解析单元,用于对与所述目标函数匹配的运行日志数据进行解析,得到所述目标函数的函数参数的类型信息以及所述目标函数的运行结果;[0050] 添加单元,用于将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件。[0051] 其中,上述添加单元具体用于:[0052] 在所述应用程序的方法签名信息中,确定关于所述目标函数的目标代码指令;[0053] 在所述应用程序的方法签名信息的所述目标代码指令中,添加所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,得到所述应用程序的代码文件。[0054] 其中,所述安装数据包中包括运行结果获取指针;所述方法运行日志数据包括与所述目标函数匹配的运行日志数据;[0055] 上述第二获取模块包括:[0056] 构建单元,用于构建日志数据获取函数,所述日志数据获取函数包括对象类型获取接口以及函数获取指针;[0057] 运行单元,用于运行所述安装数据包;[0058] 第一调用单元,用于调用所述函数获取指针从所述安装数据包中获取所述目标函数的函数标识;[0059] 第二调用单元,用于调用所述对象类型获取接口从所述安装数据包中获取所述目标函数的函数参数的类型信息;[0060] 第三调用单元,用于调用所述运行结果获取指针,获取所述目标函数的运行结果;[0061] 第一生成单元,用于根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据。[0062] 其中,上述解析模块包括:[0063] 第一获取单元,用于从所述安装数据包中的数据字段中获取所述安装数据包中的类列表,所述类列表中包括至少一个函数的函数地址;[0064] 第二获取单元,用于根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息;[0065] 第二生成单元,用于根据所述每个函数的方法签名信息生成所述应用程序的方法签名信息。[0066] 其中,所述第二获取单元具体用于:[0067] 根据所述每个函数的函数地址从所述安装包中,获取所述每个函数的结构内容;[0068] 从所述每个函数的结构内容中获取所述每个函数的函数标识以及所述每个函数的函数参数;[0069] 根据所述每个函数的函数标识以及所述每个函数的函数参数,生成所述每个函数的方法签名信息。[0070] 其中,上述第一生成单元具体用于:[0071] 创建所述目标函数对应的候选函数结构体;[0072] 在调用所述对象类型获取接口以及所述函数获取指针之后,将所述目标函数的函数标识以及所述目标函数的函数参数的类型信息,存入所述候选函数结构体中,得到第一函数结构体;[0073] 在调用所述运行结果获取指针之后,将所述目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体;[0074] 将所述第二函数结构体中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果存入至数据库中;[0075] 将所述数据库中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,作为与所述目标函数匹配的运行日志数据;[0076] 所述根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据,包括:[0077] 根据所述目标函数的函数标识,从所述数据库中识别与所述目标函数匹配的运行日志数据。[0078] 本申请实施例提供了一种计算机设备,包括:处理器、存储器、网络接口;[0079] 上述处理器与存储器、网络接口相连,其中,网络接口用于提供数据通信功能,上述存储器用于存储计算机程序,上述处理器用于调用上述计算机程序,以执行本申请实施例中的方法。[0080] 本申请实施例提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序包括程序指令,上述程序指令当被处理器执行时,以执行如本申请实施例中的方法。[0081] 本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据,对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据以及应用程序的方法签名信息对应用程序进行反编译,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,增加应用程序的代码文件的可读性,便于对应用程序的理解和运用。附图说明[0082] 为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0083] 图1是本发明实施例提供的一种数据处理方法的流程示意图;[0084] 图2是本发明实施例提供的一种Macho文件的结构示意图;[0085] 图3是是本发明实施例提供的一种获得应用程序的方法签名信息的示意图;[0086] 图4是本申请实施例提供的一种获得应用程序的代码文件的示意图;[0087] 图5是本发明另一实施例提供的一种数据处理方法的流程示意图;[0088] 图6是本发明实施例提供的一种数据处理装置的结构示意图;[0089] 图7是本发明实施例提供的一种计算机设备的结构示意图。具体实施方式[0090] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。[0091] 请参见图1,是本申请实施例提供的一种数据处理方法的流程示意图,本申请实施例可由电子设备来执行,该数据处理方法包括以下步骤S101~S104。[0092] S101,获取应用程序的安装数据包。[0093] S102,对安装数据包进行解析,得到应用程序的方法签名信息。[0094] 在本申请实施例中,应用程序可以包括但不限于:游戏应用程序、购物应用程序、社交应用程序、音视频播放应用程序、打车应用程序以及支付应用程序等等。应用程序的安装数据包可以是Macho文件,Macho是MachObject的缩写,是在MacOS以及iOS上可执行的一种文件格式,包括但不限于:可执行文件(.out.o)、动态库、静态库、dyld、目标文件等。应用程序的安装数据包中包括至少一个函数,该函数是应用程序用来解决某一问题的代码的有序组合,是一个功能模块。函数在应用程序里面实际对应一个指针地址,即内存地址。根据对应用程序的安装数据包进行反编译,得到应用程序中函数对应的方法签名信息。应用程序中函数对应的方法签名信息包括函数的函数标识、函数的函数参数等参数信息。其中,反编译是指通过对他人软件的目标程序(比如可执行程序)进行“逆向分析、研究”工作,以推导出他人的软件产品所使用的思路、原理、结构、算法、处理过程、运行方法等设计要素,某些特定情况下可能推导出源代码。反编译就是编译的逆过程,将可执行文件经过反编译生成代码文件。目前已经被广泛运用到程序理解,源代码恢复,程序调试,安全分析等各个方面。[0095] 可选的,从安装数据包中的数据字段中获取安装数据包中的类列表,类列表中包括至少一个函数的函数地址,根据至少一个函数中每个函数的函数地址从安装数据包中,获取每个函数的方法签名信息。根据每个函数的方法签名信息生成应用程序的方法签名信息。[0096] 可以在应用程序的安装数据包的数据段(__DATA段)中,查找到__objc_classlist,__objc_classlist是安装数据包中的objc类列表,保存了类信息,映射了__objc_data的地址。该安装数据包中包括多个类列表,Objc是Objective‑C的简称,是应用程序的安装数据包对应的编程语言,是在C语言的基础上加入面向对象特性扩充而成,是一种通用、高级、面向对象的编程语言。根据数据段的__objc_classlist获得应用程序对应的所有类(class)列表。遍历所有的类列表中的类(class)地址,根据类地址中具体的地址信息,获得类的结构内容信息,提取类结构内容中的数据(data)部分。就可以在类结构内容中的数据部分,获得类列表中函数(method)列表。遍历函数列表中所有的函数,根据每个函数的函数地址,获取该函数的签名字符串和类型编码(TypeEncodings)。根据该函数的签名字符串和类型编法码,获得方对应的方法签名信息,以此函数就可以获得安装数据包中至少一个函数对应的方法签名信息。[0097] 可选的,可以根据每个函数的函数地址从安装数据包中,获取每个函数的结构内容。从每个函数的结构内容中获取每个函数的函数标识以及每个函数的函数参数,根据每个函数的函数标识以及每个函数的函数参数,生成每个函数的方法签名信息。[0098] 可以根据每个函数的函数地址,可以知道该函数在安装数据包中的某段某区,从而获得每个函数对应的结构内容,该函数对应的结构内容包括了实现该函数的代码信息。从而在每个函数对应的结构内容中,获取每个函数的签名字符串,从而获得每个函数的函数标识。在每个函数对应的结构内容中,获得每个函数的类型编码,从而获得每个函数的函数参数。根据每个函数的函数标识以及每个函数的函数参数,生成每个函数的方法签名信息。[0099] 例如,可以对Macho文件中的头文件进行反编译,获得Macho文件中头文件的代码文件。Macho文件有三个部分组成,即头(Header)部分、加载命令(loadCommends)部分、数据(Data)部分。如图2所示,是本发明实施例提供的一种Macho文件的结构示意图,如图2所示,头文件部分中包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,保存了该文件的一些基本信息,如平台,文件类型,加载命令的个数等;加载命令部分说明了操作系统应当如何加载Macho文件中的数据,对系统内核加载器和动态链接器起指导作用;数据部分是用来存放具体的代码和数据。[0100] 如图3所示,是本发明实施例提供的一种获得应用程序的方法签名信息方法的示意图,如图3所示,可以获取Macho文件的头文件中的_DATA段,该_DATA段为Macho文件中可读写数据段,可以对该段中的内容进行读写。该_DATA段中包含了应用程序的编程数据,如类列表。再获取_DATA段中的__objc_classlist,_DATA段中的__objc_classlist中保存了objc的类(class)列表,保存了类的地址等相关信息,映射了objc中数据的地址。根据_DATA段中的__objc_classlist获得类列表,逐个遍历类列表中具体的类地址,根据具体的类地址获得该类的结构内容,提取该类的结构内容的数据(data)部分,即__objc_data,用于保存类需要的数据,映射__objc_const地址,用于找到类的相关数据。再从该类的结构内容的数据部分获取到函数(method)列表,遍历函数列表中的每一个函数,根据函数列表中每一个函数中的地址,获得每一个函数的结构内容,根据每一个函数的结构内容就可以获得该函数的签名字符串和参数列表(TypeEncodings),将该函数中的签名字符串和参数列表相结合,就可以还原Macho的头文件中函数的方法签名信息。[0101] S103,获取运行安装数据包生成的方法运行日志数据。[0102] S104,采用应用程序的方法签名信息以及方法运行日志数据对应用程序进行反编译,得到应用程序的代码文件。[0103] 可以使用Xcode开发工具和脚本,将应用程序对应的安装数据包封装进一个可执行文件中,安装到手机进行运行,进行任意的操作,获得方法运行日志数据。比如对于普通短视频应用,可以进行视频播放、录制、切换视频、评论等各种操作,就可以获得视频播放、录制、切换视频、评论等操作函数对应的方法运行日志数据。上述安装数据包中包括应用程序为了实现某些功能对应的至少一个函数,如短视频对应的安装数据包中包括视频播放函数、录制函数、视频切换函数等至少一个函数。该方法运行日志数据中包括在安装数据包中调用到的函数的标识信息、函数的函数参数的类型信息以及函数的运行结果。采用应用程序的方法签名信息以及方法运行日志数据对应用程序进行反编译,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据,根据应用程序的方法签名信息以及目标运行数据对应用程序进行反编译,可以优化应用程序的代码文件中的一些不清楚的信息,可以增加应用程序的代码文件的可读性。[0104] 可选的,可以运行应用程序的安装数据包,得到应用程序的安装数据中函数的方法运行日志数据后,在利用反编译软件对应用程序的安装数据包进行静态反编译,得到应用程序的安装数据包中目标函数的方法签名信息后,在方法运行日志数据中识别与目标函数匹配的运行日志数据,将与目标函数匹配的运行日志数据中函数参数的类型信息作为目标函数的函数参数的类型信息,并添加到目标函数的方法签名信息中,在继续对安装数据包进行反编译,得到应用程序的代码文件。也可以对应用程序的安装数据包进行静态反编译,得到目标函数的方法签名信息后,在运行安装数据包得到目标函数的运行日志数据,根据目标函数的运行日志数据,获得目标函数的函数参数的类型信息,将目标函数的类型信息添加到目标函数的方法签名信息中。在根据添加函数参数的类型信息后方法签名信息,对应用程序的安装数据包进行反编译,得到应用程序的代码文件。需要说明的是,本申请对获取应用程序的方法签名信息以及应用程序的方法签名信息的先后顺序不作限制。[0105] 本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据,对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据以及应用程序的方法签名信息对应用程序进行反编译,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,增加应用程序的代码文件的可读性,便于对应用程序的理解和运用。[0106] 如图4所示,为本申请实施例提供的一种获得应用程序的代码文件方法的示意图,如图4所示,该一种获得应用程序的代码文件方法可以包括步骤S21~S23。[0107] S21,根据目标函数的函数标识,从方法运行日志数据中识别与目标函数匹配的运行日志数据。[0108] 其中,应用程序的方法签名信息包括目标函数的函数标识以及目标函数的函数参数,方法运行日志数据包括至少一个函数的运行日志数据,目标函数为方法运行日志数据中至少一个函数的任一函数。方法运行日志数据的函数为在运行应用程序的安装数据包时,在安装数据包中调用的函数,即方法运行日志数据中的函数是在安装数据包中调用的函数。一个函数的运行日志数据中包括该函数的函数标识、该函数的函数参数以及该函数的运行结果。可以根据目标函数的函数标识,在方法运行日志数据中识别与目标函数的函数标识匹配的函数,获取与目标函数的函数标识匹配的函数的运行日志数据。[0109] S22,对与目标函数匹配的运行日志数据进行解析,得到目标函数的函数参数的类型信息以及目标函数的运行结果。[0110] S23,将目标函数的函数参数的类型信息以及目标函数的运行结果,添加至应用程序的方法签名信息中,得到应用程序的代码文件。[0111] 对与目标函数匹配的运行日志数据进行解析,得到与目标函数匹配的函数的运行日志数据中的函数参数的类型信息,以及函数的运行结果。将与目标函数匹配的函数的运行日志数据中函数的函数参数的类型信息,以及函数的运行结果作为目标函数的函数参数的类型信息,以及目标函数的运行结果。将该目标函数的函数参数的类型信息,以及目标函数的运行结果,添加至应用程序的方法签名信息中,得到应用程序的代码文件,以使得到的代码文件更具有可读性,便于读者对代码文件的理解。[0112] 可选的,可以在应用程序的方法签名信息中,确定关于目标函数的目标代码指令。在应用程序的方法签名信息的目标代码指令中,添加目标函数的函数参数的类型信息以及目标函数的运行结果,得到应用程序的代码文件。[0113] 其中,应用程序的方法签名信息中包括该函数的签名字符串和参数列表,函数是应用程序用来解决某一问题的代码的有序组合,是一个功能模块。函数在应用程序里面实际对应一个指针地址,即内存地址,实质上是一串数字。可以在应用程序的方法签名信息中,确定关于目标函数的目标代码指令。在应用程序的方法签名信息的目标代码指令中,添加目标函数的函数参数的类型信息以及目标函数的运行结果,得到应用程序的代码文件。[0114] 可选的,可以在应用程序的方法签名信息中,根据目标函数的标识信息,将方法签名信息中目标函数的函数参数的类型信息以及目标函数的运行结果,添加到应用程序的方法签名信息中目标函数的目标代码指令后面。其中,可以将目标函数的函数参数的类型信息以及目标函数的运行结果,添加到目标函数的目标代码指令后面。也可以获取目标函数的函数标识,与目标函数的函数参数的类型信息以及目标函数的运行结果之间的对应关系。根据目标函数的标识函数,与目标函数的函数参数的类型信息以及目标函数的运行结果之间的对应关系,在应用程序中所有的方法签名信息中添加目标函数的函数参数的类型信息以及目标函数的运行结果。需要说明的是,本申请实施例对将目标函数的函数参数的类型信息以及目标函数的执行结果,添加到应用程序的方法签名信息中的方式不做限制,只需读者在阅读应用程序的代码文件时,能获取目标函数的函数参数的类型信息以及目标函数的运行结果即可。[0115] 如现有技术中对应用程序的安装数据包中某一函数进行反编译时,获得的该函数的方法签名信息的内容为‑(void)setMediaItemCollection:(id)arg0,参数arg0是某种对象类型的参数,以及该参数arg0的具体类型信息也是不知道的,这就导致反编译出来的头文件的可读性比较差,不便于读者对代码文件的理解和运用。而本申请实施例中可以对应用程序的安装数据包进行运行操作,获得安装数据包中函数的运行日志数据,即获得函数的函数参数的类型信息,以及函数的执行结果。可以根据对安装数据包运行时获得的运行日志数据,对应用程序的方法签名信息进行优化,完善方法签名信息中函数的函数参数的类型信息,以及函数的执行结果,得到更加具有可读性的代码文件。如根据本申请实施例的技术方案对安装数据包中某一函数进行反编译,获得该函数的方法签名信息为:‑(UIView*)preferredparentView:(TTAdFeedLearnMoreView*)arg1,preferredparentView:为在运行安装数据包时所调用的函数名称,UIView*为该函数的运行结果,TTAdFeedLearnMoreView*为参数arg1的类型信息。arg0、arg1是对象类型的参数,它的类型信息可以在安装数据包运行时获取,arg0、arg1的类型信息,可能是整个应用中各种自定义的类,比如Person类,Student类,Bird类等等,在运行安装数据包时根据具体的指针,调用一下系统api,就可以获取arg0、arg1的类型信息了。根据本申请实施例获得的应用程序的代码文件,读者可以更直观的了解代码文件中每个函数所能得到的结果,以及函数中函数参数的类型信息,使反编译出来的代码文件更具有可读性。[0116] 本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据,对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据以及应用程序的方法签名信息对应用程序进行反编译,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,增加应用程序的代码文件的可读性,便于对应用程序的理解和运用。[0117] 如图5所示,为本申请另一实施例提供的一种数据处理方法的示意图,如图5所示,该数据处理方法的步骤包括S201~S208。[0118] S201,获取应用程序的安装数据包。[0119] S202,对安装数据包进行解析,得到应用程序的方法签名信息。[0120] 其中,步骤S201、S202、S208的内容可以参看图1描述的内容,在此不再累述。[0121] S203,构建日志数据获取函数,日志数据获取函数包括对象类型获取接口以及函数获取指针。[0122] 其中,应用程序的安装数据包中包括运行结果获取指针,该运行结果获取指针用于获取安装数据包中的函数的运行结果,可以根据该运行结果指针获取安装数据包中函数运行后得到的运行结果。方法运行日志数据中包括与目标函数匹配的运行日志数据。其中,可以构建日志数据获取函数,用于在运行安装数据包时,获取安装数据包中函数的运行日志数据,该日志数据获取函数中包括对象类型获取接口以及函数获取指针。[0123] S204,运行安装数据包。[0124] S205,调用所述函数获取指针从安装数据包中获取目标函数的函数标识,函数参数类型获取接口从安装数据包中获取目标函数的函数参数的类型信息。[0125] 启动应用程序,运行应用程序的安装数据包时,调用日志数据获取函数,根据日志数据获取函数中的函数获取指针,从安装数据包中获取目标函数的函数标识。根据日志数据获取函数中的对象类型获取接口,在安装数据包中获取目标函数的函数参数的类型信息。再调用安装数据包中的运行结果获取指针,从安装数据包中获取目标函数的运行结果,根据目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果,生成与目标函数匹配的运行日志数据。[0126] 其中,根据日志数据获取函数中的函数获取指针和对象类型获取接口,从安装数据包中获取目标函数的函数标识以及函数的函数参数的类型信息时,可以在内存中根据指针对应的地址信息,获得目标函数的函数标识和函数参数的类型信息。因为在运行安装数据包,安装数据包中的信息都被加载到终端的内存中,所以在根据函数获取指针获取目标函数的函数标识时,可以根据函数获取指针对应的地址信息,在终端的内存中获取目标函数的函数标识。[0127] S206,调用运行结果获取指针,获取目标函数的运行结果。[0128] S207,根据目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果,生成与目标函数匹配的运行日志数据。[0129] S208,采用应用程序的方法签名信息以及方法运行日志数据对应用程序进行反编译,得到应用程序的代码文件。[0130] 同样的,可以根据运行结果获取指针,获取运行结果获取指针对应的地址信息,根据运行结果获取指针对应的地址信息在终端中获取目标函数的执行结果。根据目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果,生成与目标函数匹配的运行日志数据。采用应用程序的方法签名信息以及方法运行日志数据对应用程序进行反编译,得到应用程序的代码文件。[0131] 可选的,可以创建目标函数对应的候选函数结构体,在函数参数类型获取接口以及函数获取指针之后,将目标函数的函数标识以及目标函数的函数参数的类型信息,存入候选函数结构体中,得到第一函数结构体。在调用运行结果获取指针之后,将目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体。将第二函数结构体中的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果存入至数据库中。将数据库中的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果,作为与目标函数匹配的运行日志数据。根据目标函数的函数标识,从数据库中识别与目标函数匹配的运行日志数据。[0132] 可以根据日志数据获取函数,创建目标函数对应的候选函数结构体,根据函数获取指针获取目标函数的函数标识,根据对象类型获取接口获取目标函数的函数参数的类型信息后,将目标函数的函数标识以及目标函数的函数参数的类型信息存入候选函数结构体中,得到第一函数结构体。调用安装数据包中的运行结果获取指针获得目标函数的运行结果后,将目标函数的运行结构存入第一函数结构体中,得到第二函数结构体。在安装数据包运行结束后,将第二函数结构体中的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果存入至数据库中。第一函数结构体用于暂存目标函数的函数标识以及目标函数的函数参数的类型信息,根据运行结果获取指针获取目标函数的运行结果,将目标函数的运行结果存入第一函数结构体中得到第二函数结构体后,再将第二函数结构体存入数据库中。将数据库中的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果,作为与目标函数匹配的运行日志数据。在获取与目标函数匹配的运行日志数据时,可以从数据库中识别与目标函数匹配的运行日志数据。[0133] 例如,启动应用程序,运行应用程序对应的安装数据包时,初始化数据库,创建数据库文件,创建必要的数据表。构建日志数据获取函数,即开始HOOKobjc_MsgSend函数,应用程序对应的编程语言(OjbC)是一门动态语言,所有的ObjC中函数调用最终都会转化为对函数objc_msgSend(arg0,arg1,…)的调用,其中参数arg0为接收Objc函数的对象,arg1为要调用的函数名称。oSend函数是所有函数调用的核心引擎,它负责查找应用程序中函数的实现方法,并去执行这些函数。objc_msgSend函数的本质,就是让函数参数发送消息,以此获得目标函数的函数标识、目标函数的函数参数的类型信息,以及目标函数的运行结果。Hookobjc_msgSend就是将原来的函数objc_msgSend,即函数A,替换为在自己设备上可以运行的函数hook_objc_msgSend,即函数B,函数B为日志数据获取函数,Hook处理后得到的函数B能够在自己的设备上运行。HOOK处理的目的为了使应用程序的安装数据包能够在自己的设备上运行,并且将原始的函数A保存为orig_objc_msgSend。那所有的对函数A的调用就变成了对函数B的调用,也就是所有的Objc的函数调用就变成了对函数B的调用。发起对应用程序中目标函数的调用,就会触发对函数B的调用。[0134] 当对应用程序中目标函数发起调用,触发对函数B的调用时,就会把寄存器q0~q6以及x0~x9入栈,保存目标函数的原始环境。该目标函数的原始环境包括传入的参数、函数执行完成后的返回地址等,将目标函数的传入的参数、函数执行完成后的返回地址等信息存入寄存器中。调用函数B,创建与本线程关联的候选函数结构体,根据函数B中的两个参数,即日志数据获取函数中的对象类型获取接口以及函数获取指针,获取目标函数的函数参数的类型信息,以及目标函数的函数标识。其中,可以根据ARM的函数调用传递参数约定,依次解析目标函数调用时传入参数的类型信息,若传入参数为对象,则将该参数的类型信息作为函数参数的类型信息,将解析得到的函数参数的类型信息,以及目标函数的函数标识存入候选函数结构体中,获得第一函数结构体。将第一函数结构体存入本线程相关的栈中。其中,线程是指操作系统能够进行运算调度的最小单位,是进程中的实际运作单位,即对应用程序中目标函数的调用。[0135] 再将寄存器q0~q6以及x0~x9出栈,获得寄存器中保存了函数A的原始函数,恢复函数A调用的环境,就是恢复原始的objc_msgSend函数调用的环境。再把寄存器q0~q6以及x0~x9入栈,保存函数B返回后的环境。再调用函数A,出栈与本线程相关栈顶的第一函数结构体,即上述保存了目标函数的函数参数的类型信息,以及目标函数的函数标识的第一函数结构体。调用函数A的目的是为了获取目标函数的运行结果。根据原始的函数A接收目标函数的返回值,即根据运行结果获取指针获得目标函数的运行结果。解析目标函数的运行结果的类型信息,将该目标函数的运行结果的类型信息存入第一函数结构体中,得到第二函数结构体。调用数据库的存储接口,构建第二函数结构体的字段与数据库中数据表的字段之间的对应关系。根据第二函数结构体的字段与数据库中数据表的字段之间的对应关系,将第二函数结构体中存储的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果存入数据库中。以此根据上述获取目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果的操作函数,调用应用程序的安装数据包中至少一个函数,就可以获取应用程序的安装数据包中至少一个函数的运行日志数据,根据该至少一个函数的运行日志数据便可获得方法运行日志数据。[0136] 可选的,在将第二函数结构体中的目标函数的函数标识、目标函数的函数参数的类型信息以及目标函数的运行结果存入数据库中后,可以将与目标函数线程关联的函数结构体删除,节省存储空间。[0137] 其中,可以采用sqlite3数据库存储用应用程序的安装数据包中至少一个函数的运行日志数据。为保证数据正确性,对数据库的操作需要考虑线程同步,本申请实施例中可以使用自旋锁保证线程同步。其中,自旋锁用于保持当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作,其他线程才能对该内存地址进行操作。sqlite3是一种用于组织、存储和管理数据的数据库。需要说明的是,本申请实施中用于存储调用函数对应的函数调用结构体的数据库,也可以是sqlite3数据库之外的其他数据库。也可以选择其他线程同步方案保证线程同步,如采用互斥锁方案等等,本申请实施例中不做限制。[0138] 在本申请实施例中,通过获取应用程序的安装数据包,对所述安装数据包进行解析,得到所述应用程序的方法签名信息;获取运行所述安装数据包生成的方法运行日志数据;采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据。该方法运行日志数据中可以包括安装数据包中至少一个函数的函数参数的类型信息,以及至少一个函数的运行结果。可以构建日志数据获取函数,在安装数据包运行的过程中,获得函数的函数参数的类型信息。对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据,将方法运行日志数据中的函数的函数参数的类型消息,以及函数的运行结果添加至应用程序的方法签名信息中,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,可以更直观的了解代码文件中每个函数所能得到的结果,以及调用的函数参数的类型信息,使反编译出来的代码文件更具有可读性,便于对应用程序的理解和运用。[0139] 请参见图6,是本申请实施例提供的一种数据处理装置的结构示意图,本申请实施例提供的数据处理装置可以在电子设备中。本实施例中,该数据处理装置包括以:[0140] 第一获取模块11,用于获取应用程序的安装数据包。[0141] 解析模块12,用于对所述安装数据包进行解析,得到所述应用程序的方法签名信息。[0142] 其中,上述解析模块包括:第一获取单元、第二获取单元、第二生成单元。[0143] 第一获取单元,用于从所述安装数据包中的数据字段中获取所述安装数据包中的类列表,所述类列表中包括至少一个函数的函数地址;[0144] 第二获取单元,用于根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息;[0145] 第二生成单元,用于根据所述每个函数的方法签名信息生成所述应用程序的方法签名信息。[0146] 其中,所述第二获取单元具体用于:[0147] 根据所述每个函数的函数地址从所述安装包中,获取所述每个函数的结构内容;[0148] 从所述每个函数的结构内容中获取所述每个函数的函数标识以及所述每个函数的函数参数;[0149] 根据所述每个函数的函数标识以及所述每个函数的函数参数,生成所述每个函数的方法签名信息。[0150] 第二获取模块13,用于获取运行所述安装数据包生成的方法运行日志数据。[0151] 上述第二获取模块包括:构建单元、运行单元、第一调用单元、第二调用单元、第三调用单元、第一生成单元。[0152] 构建单元,用于构建日志数据获取函数,所述日志数据获取函数包括对象类型获取接口以及函数获取指针;[0153] 运行单元,用于运行所述安装数据包;[0154] 第一调用单元,用于调用所述函数获取指针从所述安装数据包中获取所述目标函数的函数标识;[0155] 第二调用单元,用于调用所述对象类型获取接口从所述安装数据包中获取所述目标函数的函数参数的类型信息;[0156] 第三调用单元,用于调用所述运行结果获取指针,获取所述目标函数的运行结果;[0157] 第一生成单元,用于根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据。[0158] 其中,上述第一生成单元具体用于:[0159] 创建所述目标函数对应的候选函数结构体;[0160] 在调用所述对象类型获取接口以及所述函数获取指针之后,将所述目标函数的函数标识以及所述目标函数的函数参数的类型信息,存入所述候选函数结构体中,得到第一函数结构体;[0161] 在调用所述运行结果获取指针之后,将所述目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体;[0162] 将所述第二函数结构体中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果存入至数据库中;[0163] 将所述数据库中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,作为与所述目标函数匹配的运行日志数据;[0164] 所述根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据,包括:[0165] 根据所述目标函数的函数标识,从所述数据库中识别与所述目标函数匹配的运行日志数据。[0166] 反编译模块14,用于采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。[0167] 其中,所述应用程序的方法签名信息包括目标函数的函数标识以及所述目标函数的函数参数;所述方法运行日志数据包括至少一个函数的运行日志数据,所述目标函数为所述至少一个函数中的任一函数;[0168] 上述反编译模块包括:识别单元、解析单元、添加单元。[0169] 识别单元,用于根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据;[0170] 解析单元,用于对与所述目标函数匹配的运行日志数据进行解析,得到所述目标函数的函数参数的类型信息以及所述目标函数的运行结果;[0171] 添加单元,用于将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件。[0172] 其中,上述添加单元具体用于:[0173] 在所述应用程序的方法签名信息中,确定关于所述目标函数的目标代码指令;[0174] 在所述应用程序的方法签名信息的所述目标代码指令中,添加所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,得到所述应用程序的代码文件。[0175] 其中,所述安装数据包中包括运行结果获取指针;所述方法运行日志数据包括与所述目标函数匹配的运行日志数据;[0176] 在本申请实施例中,通过获取应用程序的安装数据包,对所述安装数据包进行解析,得到所述应用程序的方法签名信息;获取运行所述安装数据包生成的方法运行日志数据;采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据。该方法运行日志数据中可以包括安装数据包中至少一个函数的函数参数的类型信息,以及至少一个函数的运行结果。可以构建日志数据获取函数,在安装数据包运行的过程中,获得函数的函数参数的类型信息。对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据,将方法运行日志数据中的函数的函数参数的类型消息,以及函数的运行结果添加至应用程序的方法签名信息中,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,读者可以更直观的了解代码文件中每个函数所能得到的结果,以及调用的函数参数的类型信息,使反编译出来的代码文件更具有可读性,便于对应用程序的理解和运用。[0177] 请参见图7,是本申请实施例提供的一种计算机设备的结构示意图。如图7所示,上述计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI‑FI接口)。存储器1005可以是高速RAM存储器,也可以是非易失性的存储器(non‑volatilememory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图7所示,作为一种计算机可读存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及设备控制应用程序。[0178] 在图7所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:[0179] 获取应用程序的安装数据包;[0180] 对所述安装数据包进行解析,得到所述应用程序的方法签名信息;[0181] 获取运行所述安装数据包生成的方法运行日志数据;[0182] 采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。[0183] 其中,所述应用程序的方法签名信息包括目标函数的函数标识以及所述目标函数的函数参数;所述方法运行日志数据包括至少一个函数的运行日志数据,所述目标函数为所述至少一个函数中的任一函数;[0184] 所述采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件,包括:[0185] 根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据;[0186] 对与所述目标函数匹配的运行日志数据进行解析,得到所述目标函数的函数参数的类型信息以及所述目标函数的运行结果;[0187] 将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件。[0188] 其中,所述将所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,添加至所述应用程序的方法签名信息中,得到所述应用程序的代码文件,包括:[0189] 在所述应用程序的方法签名信息中,确定关于所述目标函数的目标代码指令;[0190] 在所述应用程序的方法签名信息的所述目标代码指令中,添加所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,得到所述应用程序的代码文件。[0191] 其中,所述安装数据包中包括运行结果获取指针;所述方法运行日志数据包括与所述目标函数匹配的运行日志数据;[0192] 所述获取运行所述安装数据包生成的方法运行日志数据,包括:[0193] 构建日志数据获取函数,所述日志数据获取函数包括对象类型获取接口以及函数获取指针;[0194] 运行所述安装数据包;[0195] 调用所述函数获取指针从所述安装数据包中获取所述目标函数的函数标识;[0196] 调用所述对象类型获取接口从所述安装数据包中获取所述目标函数的函数参数的类型信息;[0197] 调用所述运行结果获取指针,获取所述目标函数的运行结果;[0198] 根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据。[0199] 其中,所述对所述安装数据包进行解析,得到所述应用程序的方法签名信息,包括:[0200] 从所述安装数据包中的数据字段中获取所述安装数据包中的类列表,所述类列表中包括至少一个函数的函数地址;[0201] 根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息;[0202] 根据所述每个函数的方法签名信息生成所述应用程序的方法签名信息。[0203] 其中,所述根据所述至少一个函数中每个函数的函数地址从所述安装数据包中,获取所述每个函数的方法签名信息,包括:[0204] 根据所述每个函数的函数地址从所述安装包中,获取所述每个函数的结构内容;[0205] 从所述每个函数的结构内容中获取所述每个函数的函数标识以及所述每个函数的函数参数;[0206] 根据所述每个函数的函数标识以及所述每个函数的函数参数,生成所述每个函数的方法签名信息。[0207] 其中,所述根据所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,生成与所述目标函数匹配的运行日志数据,包括:[0208] 创建所述目标函数对应的候选函数结构体;[0209] 在调用所述对象类型获取接口以及所述函数获取指针之后,将所述目标函数的函数标识以及所述目标函数的函数参数的类型信息,存入所述候选函数结构体中,得到第一函数结构体;[0210] 在调用所述运行结果获取指针之后,将所述目标函数的运行结果存入所述第一函数结构体中,得到第二函数结构体;[0211] 将所述第二函数结构体中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果存入至数据库中;[0212] 将所述数据库中的所述目标函数的函数标识、所述目标函数的函数参数的类型信息以及所述目标函数的运行结果,作为与所述目标函数匹配的运行日志数据;[0213] 所述根据所述目标函数的函数标识,从所述方法运行日志数据中识别与所述目标函数匹配的运行日志数据,包括:[0214] 根据所述目标函数的函数标识,从所述数据库中识别与所述目标函数匹配的运行日志数据。[0215] 在本申请实施例中,通过获取应用程序的安装数据包,对所述安装数据包进行解析,得到所述应用程序的方法签名信息;获取运行所述安装数据包生成的方法运行日志数据;采用所述应用程序的方法签名信息以及所述方法运行日志数据对所述应用程序进行反编译,得到所述应用程序的代码文件。本发明实施例中对应用程序的安装数据包进行运行操作,得到运行安装数据包生成的方法运行日志数据。该方法运行日志数据中可以包括安装数据包中至少一个函数的函数参数的类型信息,以及至少一个函数的运行结果。可以构建日志数据获取函数,在安装数据包运行的过程中,获得函数的函数参数的类型信息。对安装数据包进行解析,获得应用程序的方法签名信息。根据方法运行日志数据,将方法运行日志数据中的函数的函数参数的类型消息,以及函数的运行结果添加至应用程序的方法签名信息中,得到应用程序的代码文件。方法签名信息中包括应用程序的静态数据,方法运行日志数据中包括应用程序的动态数据。因此,根据应用程序的方法签名信息以及方法运行日志数据,对应用程序的安装数据包进行反编译,可避免代码文件中的信息丢失,读者可以更直观的了解代码文件中每个函数所能得到的结果,以及调用的函数参数的类型信息,使反编译出来的代码文件更具有可读性,便于对应用程的理解和运用。[0216] 此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且上述计算机可读存储介质中存储有前文提及的数据处理装置所执行的计算机程序,且上述计算机程序包括程序指令,当上述处理器执行上述程序指令时,能够执行前文图1或图5对应实施例中对上述数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可被部署在一个计算机设备上执行,或者被部署位于一个地点的多个计算机设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算机设备上执行,分布在多个地点且通过通信网络互连的多个计算机设备可以组成区块链网络。[0217] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,上述的存储介质可为磁盘、光盘、只读存储器(Read‑OnlyMemory,ROM)或随机存储器(RandomAccessMemory,RAM)等。[0218] 以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

专利地区:广东

专利申请日期:2020-07-19

专利公开日期:2024-06-18

专利公告号:CN114020278B


以上信息来自国家知识产权局,如信息有误请联系我方更正!
该专利所有权非本平台所有,我方无法提供专利权所有者联系方式,请勿联系我方。
电话咨询
到底部
搜本页
回顶部