论文部分内容阅读
随着移动互联网的发展,越来越多的人使用手机上网。手机APP成为网络服务的主要入口,APP的商业价值得到广告机构的重点关注。对广告主来说,APP下载次数是决定他们最后一次报价的关键因素。因此,统计APP下载次数至关重要。但是由于各种第三方市场的存在,从官方APP市场很难获得真实的统计数据。针对这种情况,本文提出一种直接从网络流量中识别APP安装包文件的方法,直接从流量中进行统计。 识别方法主要包括三个主要算法,APP标识生成算法、APP语义自动映射算法和APP标识匹配算法。当APP安装包在网络中传输时,首先使用APP标识生成算法算出这个APP的标识。然后使用匹配算法去已有的样本库里面查询,如果找到了,就能直接获取它的名称,识别成功。如果发现这个APP是一个未知的APP,那么就通过APP语义自动映射算法对该安装包进行解压缩,反编译获得它的名称,版本号等语义信息,并将这些语义信息和标识进行映射,得到一个映射关系。最后通过匹配算法将这个映射关系加入到样本库中。平均情况下,该方法能达到96.44%的精确率和97.63%的召回率。 本文主要创新包含以下三点: 1)在APP标识生成算法中,针对传统的模糊哈希算法不能处理在线的网络数据流的问题,提出了可以处理在线数据流的APP标识生成算法。该算法使用区间索引将每一个网络层分片计算出的中间结果保存下来,最后将结果进行拼接输出。并且在实现过程中针对算法的时间和空间占用等性能做了相应优化,使用红黑树实现底层的区间索引,并且用基于伽罗华域的矩阵乘法代替了原有的强哈希算法,最后在顺序和随机乱序情况下算出的标识能够保持一致,在单核单线程下速度能达到46MB/s; 2)在APP语义自动映射算法中,集成了Android和iOS两种平台的反编译工具,实现了APP语义的自动映射。在算法中,对于Android使用ApkTool作为反编译工具,处理速度可以达到10毫秒~100毫秒/个。而对于iOS使用的是github上的开源库libplist库,处理速度可以达到5毫秒~30毫秒/个。整个算法每秒可以处理大约10~100个APP,可以实现大规模数据量情况下的语义自动映射; 3)在APP标识匹配中,使用n-gram建立索引,并且针对传统的n-gram索引在数据量大的情况下,查询速度明显降低的问题,进行了改进。在算法中采用了剪枝的方法进行性能优化,当链表的长度超过L的时候,对链表进行剪枝,将链表中的节点一个一个删除。但是为了避免将同一个标识的节点都删除了,会保留剩余gram数量小于K的节点。剪枝后,100万数据量下,查询速度达到10万次/s。