CN108710492A - 一种识别app程序中第三方库的方法 - Google Patents
一种识别app程序中第三方库的方法 Download PDFInfo
- Publication number
- CN108710492A CN108710492A CN201810361862.5A CN201810361862A CN108710492A CN 108710492 A CN108710492 A CN 108710492A CN 201810361862 A CN201810361862 A CN 201810361862A CN 108710492 A CN108710492 A CN 108710492A
- Authority
- CN
- China
- Prior art keywords
- function
- party library
- app programs
- characteristic
- feature
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Virology (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及信息安全技术领域,公开了一种识别APP程序中第三方库的方法。通过本发明创造,可提供一种基于函数调用关系的、在APP已混淆程序中能够识别是否使用第三方库的方法,考虑在APP程序中嵌入第三方库,是为了使用它的功能,常规的混淆并不改变函数之间的调用关系以及类之间的相对路径,因此将调用关系最复杂的函数作为特征函数,并为该特征函数计算防混淆的函数特征值,可以利用该函数特征值唯一表征第三方库,进而通过后续地函数特征值的对比,可以在APP已混淆程序中高精准地识别出是否使用已知的第三方库,便于实际应用和推广。
Description
技术领域
本发明属于信息安全技术领域,具体涉及一种识别APP程序中第三方库的方法。
背景技术
当前安卓APP程序中经常嵌有大量的第三方库(即第三方的软件包),但是有可能已被混淆,很难识别出安卓APP程序中具体使用了哪些第三方库。目前识别第三方库的方法主要有如下两种:(1)直接使用函数名匹配的方法,即首先提取第三方库中函数的函数名,再提取APP程序中的函数名,通过函数名匹配的方法确定在APP程序中是否使用了该第三方库,但是如果APP程序出现代码混淆的话,就行不通了;(2)对第三方库中的所有类计算特征值,再对APP程序中的所有类计算特征值,最终进行特征值匹配,如果第三方库有60%以上的类出现在了APP程序中,就认为在APP程序中使用了该第三方库,但是这样识别的准确率不够高,需要60%这个阈值。由此有必要提供一种可识别一个给定APP程序中使用了哪些第三方库的新方法。
发明内容
为了解决现有技术存在的上述问题,本发明目的在于提供一种识别APP程序中第三方库的方法。
本发明所采用的技术方案为:
一种识别APP程序中第三方库的方法,包括如下步骤:
S101.收集已知的第三方库;
S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数;
S103.针对各个第三方库的特征函数,确定第一函数特征值;
S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数;
S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值;
S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。
具体的,在所述步骤S103中,按照如下步骤确定第一函数特征值:
S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第一特征字段,否则获取该返回值类型与参考类的相对路径,并将经匿名化处理的该相对路径作为第一特征字段;
S202.获取特征函数的所有参数类型,并针对每个参数类型,若该参数类型为系统类型,则将该参数类型作为第二特征字段,否则获取该参数类型与参考类的相对路径,将经匿名化处理的该相对路径作为第二特征字段;
S203.判断特征函数是否拥有直接调用的被调用函数,若有则将被调用函数视为特征函数,按照与步骤S103一致的方法,获取各个被调用函数的函数特征值,然后依次拼接第一特征字段、所有的第二特征字段和按字母顺序排序的所有被调用函数的函数特征值,得到特征函数的特征字符串;
S204.对特征函数的特征字符串进行哈希算法处理,获取第一函数特征值。
进一步具体的,在所述步骤S203中,若判断特征函数没有直接调用的被调用函数,则依次拼接第一特征字段和所有的第二特征字段,得到特征函数的特征字符串。
进一步具体的,在所述步骤S204中,对特征字符串进行哈希算法处理的哈希算法为MD5算法。
进一步具体的,在所述步骤S201和所述步骤S202中,对相对路径进行匿名化处理的方式为:将相对路径中的所有字符串替换为特定字符。
具体的,在所述步骤S102中,具体包括如下步骤:
S401.对第三方库进行预处理,获取Dalvik字节码;
S402.根据Dalvik字节码获取第三方库中的所有函数,并按照如下方式生成表征函数调用关系的函数调用图:每个节点表示一个函数,每个单向箭头指向被调用函数;
S403.针对函数调用图中的各个函数,以其为起点得到对应的函数调用子图;
S404.按照函数调用子图中的节点个数进行排序,取节点个数最多的函数调用子图所在的起点函数为特征函数。
具体的,所述目标APP程序为安卓程序。
本发明的有益效果为:
(1)本发明创造提供了一种基于函数调用关系的、在APP已混淆程序中能够识别是否使用第三方库的方法,考虑在APP程序中嵌入第三方库,是为了使用它的功能,常规的混淆并不改变函数之间的调用关系以及类之间的相对路径,因此将调用关系最复杂的函数作为特征函数,并为该特征函数计算防混淆的函数特征值,可以利用该函数特征值唯一表征第三方库,进而通过后续地函数特征值的对比,可以在APP已混淆程序中高精准地识别出是否使用已知的第三方库,便于实际应用和推广。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的识别APP程序中第三方库的方法流程示意图。
图2是本发明提供的函数调用图的示例图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步阐述。在此需要说明的是,对于这些实施例方式的说明用于帮助理解本发明,但并不构成对本发明的限定。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,单独存在B,同时存在A和B三种情况,本文中术语“/和”是描述另一种关联对象关系,表示可以存在两种关系,例如,A/和B,可以表示:单独存在A,单独存在A和B两种情况,另外,本文中字符“/”,一般表示前后关联对象是一种“或”关系。
实施例一
如图1和2所示,本实施例提供的所述识别APP程序中第三方库的方法,包括如下步骤。
S101.收集已知的第三方库。
S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数。
在所述步骤S102中,所述预处理的方式可以但不限于包括反编译方式,具体包括如下步骤:S401.对第三方库进行预处理,获取Dalvik字节码;S402.根据Dalvik字节码获取第三方库中的所有函数,并按照如下方式生成表征函数调用关系的函数调用图:每个节点表示一个函数,每个单向箭头指向被调用函数;S403.针对函数调用图中的各个函数,以其为起点得到对应的函数调用子图;S404.按照函数调用子图中的节点个数进行排序,取节点个数最多的函数调用子图所在的起点函数为特征函数(也可以是取节点个数最多的两个或多个函数调用子图所在的起点函数为特征函数)。以下面经反编译预处理得到的第三方库部分代码为例,其包含有两个类:“User”和“Utils”,每个类中都有函数,从第14行代码可以看出“User”类的loadProfile函数(即附图2中的节点A)调用了“Utils”类的isNetworkAvailable函数(即附图2中的节点B),因此在函数调用图中添加一条从节点A指向节点B的单向箭头(即由loadProfile函数指向isNetworkAvailable函数)。构建完函数调用图后,对函数调用图中的任意节点,以其为起点可以得到一个函数调用子图。根据函数调用子图中的节点个数对这些子图进行排序,取最大(第一个)的子图所在的起点函数为特征函数,并将这个特征函数所在的类为参考类。
S103.针对各个第三方库的特征函数,确定第一函数特征值。
在所述步骤S103中,具体的,按照如下步骤确定第一函数特征值:S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第一特征字段,否则获取该返回值类型与参考类的相对路径,并将经匿名化处理的该相对路径作为第一特征字段;S202.获取特征函数的所有参数类型,并针对每个参数类型,若该参数类型为系统类型,则将该参数类型作为第二特征字段,否则获取该参数类型与参考类的相对路径,将经匿名化处理的该相对路径作为第二特征字段;S203.判断特征函数是否拥有直接调用的被调用函数,若有则将被调用函数视为特征函数,按照与步骤S103一致的方法,获取各个被调用函数的函数特征值,然后依次拼接第一特征字段、所有的第二特征字段和按字母顺序排序的所有被调用函数的函数特征值,得到特征函数的特征字符串;S204.对特征函数的特征字符串进行哈希算法处理,获取第一函数特征值。
在所述步骤S201和所述步骤S202中,进一步具体的,所述参考类即为特征函数所在的类,同时对相对路径进行匿名化处理的方式为:将相对路径中的所有字符串替换为特定字符。例如当参考类为“com.appname.User”,而返回值类型为“com.appname.Listeners.Callback”时,则相对路径为“../Listeners/Callback”,设特定字符为“X”,则经匿名化处理后得到“../X/X”。
在所述步骤S203中,当将被调用函数视为特征函数,并在按照与步骤S103一致的方法获取被调用函数的函数特征值的过程中,若被调用函数拥有进一步的且直接调用的子被调用函数,则同样需要先按照与步骤S103一致的方法获取各个子被调用函数的函数特征值。为了避免这种内套循环出现不收敛的情况,具体的,在所述步骤S203中,若判断特征函数没有直接调用的被调用函数,则依次拼接第一特征字段和所有的第二特征字段,得到特征函数的特征字符串,然后再执行步骤S204。如此可以逐级获取各层被调用函数的函数特征值,实现最终获取特征函数的第一函数特征值的目的。
S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数。
在所述步骤S104中,所述目标APP程序可以但不限于为安卓程序。此外,同样是通过诸如反编译等预处理方式得到目标APP程序的Dalvik字节码,然后根据该Dalvik字节码获取目标APP程序中的所有函数以及函数调用图。
S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值。
S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。
综上,采用本实施例所提供的识别APP程序中第三方库的方法,具有如下技术效果:
(1)本实施例提供了一种基于函数调用关系的、在APP已混淆程序中能够识别是否使用第三方库的方法,考虑在APP程序中嵌入第三方库,是为了使用它的功能,常规的混淆并不会改变函数之间的调用关系以及类之间的相对路径,因此将调用关系最复杂的函数作为特征函数,并为该特征函数计算防混淆的函数特征值,可以利用该函数特征值唯一表征第三方库,进而通过后续地函数特征值的对比,可以在APP已混淆程序中高精准地识别出是否使用已知的第三方库,便于实际应用和推广。
本发明不局限于上述可选的实施方式,任何人在本发明的启示下都可得出其他各种形式的产品。上述具体实施方式不应理解成对本发明的保护范围的限制,本发明的保护范围应当以权利要求书中界定的为准,并且说明书可以用于解释权利要求书。
Claims (7)
1.一种识别APP程序中第三方库的方法,其特征在于,包括如下步骤:
S101.收集已知的第三方库;
S102.针对各个第三方库,通过预处理获取对应第三方库中的所有函数,并根据函数调用关系确定该第三方库的特征函数;
S103.针对各个第三方库的特征函数,确定第一函数特征值;
S104.针对目标APP程序,通过预处理获取目标APP程序中的所有函数;
S105.针对目标APP程序中的各个函数,按照与步骤S103一致的方法,确定第二函数特征值;
S106.遍历目标APP程序中各个函数的第二函数特征值,若与其中一个第三方库的第一函数特征值相同,则确定在目标APP程序中使用了该第三方库。
2.如权利要求1所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S103中,按照如下步骤确定第一函数特征值:
S201.获取特征函数的返回值类型,若该返回值类型为系统类型,则将该返回值类型作为第一特征字段,否则获取该返回值类型与参考类的相对路径,并将经匿名化处理的该相对路径作为第一特征字段;
S202.获取特征函数的所有参数类型,并针对每个参数类型,若该参数类型为系统类型,则将该参数类型作为第二特征字段,否则获取该参数类型与参考类的相对路径,将经匿名化处理的该相对路径作为第二特征字段;
S203.判断特征函数是否拥有直接调用的被调用函数,若有则将被调用函数视为特征函数,按照与步骤S103一致的方法,获取各个被调用函数的函数特征值,然后依次拼接第一特征字段、所有的第二特征字段和按字母顺序排序的所有被调用函数的函数特征值,得到特征函数的特征字符串;
S204.对特征函数的特征字符串进行哈希算法处理,获取第一函数特征值。
3.如权利要求2所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S203中,若判断特征函数没有直接调用的被调用函数,则依次拼接第一特征字段和所有的第二特征字段,得到特征函数的特征字符串。
4.如权利要求2所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S204中,对特征字符串进行哈希算法处理的哈希算法为MD5算法。
5.如权利要求2所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S201和所述步骤S202中,对相对路径进行匿名化处理的方式为:将相对路径中的所有字符串替换为特定字符。
6.如权利要求1所述的一种识别APP程序中第三方库的方法,其特征在于,在所述步骤S102中,具体包括如下步骤:
S401.对第三方库进行预处理,获取Dalvik字节码;
S402.根据Dalvik字节码获取第三方库中的所有函数,并按照如下方式生成表征函数调用关系的函数调用图:每个节点表示一个函数,每个单向箭头指向被调用函数;
S403.针对函数调用图中的各个函数,以其为起点得到对应的函数调用子图;
S404.按照函数调用子图中的节点个数进行排序,取节点个数最多的函数调用子图所在的起点函数为特征函数。
7.如权利要求1所述的一种识别APP程序中第三方库的方法,其特征在于,所述目标APP程序为安卓程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810361862.5A CN108710492B (zh) | 2018-04-20 | 2018-04-20 | 一种识别app程序中第三方库的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810361862.5A CN108710492B (zh) | 2018-04-20 | 2018-04-20 | 一种识别app程序中第三方库的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108710492A true CN108710492A (zh) | 2018-10-26 |
CN108710492B CN108710492B (zh) | 2021-09-07 |
Family
ID=63866834
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810361862.5A Active CN108710492B (zh) | 2018-04-20 | 2018-04-20 | 一种识别app程序中第三方库的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108710492B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941534A (zh) * | 2019-11-19 | 2020-03-31 | 深圳开源互联网安全技术有限公司 | 检测web应用第三方代码调用的方法及系统 |
CN111338622A (zh) * | 2020-05-15 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 供应链代码识别方法、装置、服务器及可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110289586A1 (en) * | 2004-07-15 | 2011-11-24 | Kc Gaurav S | Methods, systems, and media for detecting and preventing malcode execution |
US20140026185A1 (en) * | 2008-08-13 | 2014-01-23 | International Business Machines Corporation | System, Method, and Apparatus for Modular, String-Sensitive, Access Rights Analysis with Demand-Driven Precision |
CN103761475A (zh) * | 2013-12-30 | 2014-04-30 | 北京奇虎科技有限公司 | 检测智能终端中恶意代码的方法及装置 |
CN103902910A (zh) * | 2013-12-30 | 2014-07-02 | 北京奇虎科技有限公司 | 检测智能终端中恶意代码的方法及装置 |
CN103914657A (zh) * | 2014-04-16 | 2014-07-09 | 南京大学 | 一种基于函数特征的恶意程序检测方法 |
CN106295335A (zh) * | 2015-06-11 | 2017-01-04 | 中国科学院信息工程研究所 | 一种面向嵌入式设备的固件漏洞检测方法及系统 |
CN106709336A (zh) * | 2015-11-18 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 识别恶意软件的方法和装置 |
US20170255544A1 (en) * | 2016-03-01 | 2017-09-07 | Sap Se | Assessing vulnerability impact using call graphs |
US20170351597A1 (en) * | 2016-06-02 | 2017-12-07 | International Business Machines Corporation | Identifying and isolating library code in software applications |
-
2018
- 2018-04-20 CN CN201810361862.5A patent/CN108710492B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110289586A1 (en) * | 2004-07-15 | 2011-11-24 | Kc Gaurav S | Methods, systems, and media for detecting and preventing malcode execution |
US20140026185A1 (en) * | 2008-08-13 | 2014-01-23 | International Business Machines Corporation | System, Method, and Apparatus for Modular, String-Sensitive, Access Rights Analysis with Demand-Driven Precision |
CN103761475A (zh) * | 2013-12-30 | 2014-04-30 | 北京奇虎科技有限公司 | 检测智能终端中恶意代码的方法及装置 |
CN103902910A (zh) * | 2013-12-30 | 2014-07-02 | 北京奇虎科技有限公司 | 检测智能终端中恶意代码的方法及装置 |
CN103914657A (zh) * | 2014-04-16 | 2014-07-09 | 南京大学 | 一种基于函数特征的恶意程序检测方法 |
CN106295335A (zh) * | 2015-06-11 | 2017-01-04 | 中国科学院信息工程研究所 | 一种面向嵌入式设备的固件漏洞检测方法及系统 |
CN106709336A (zh) * | 2015-11-18 | 2017-05-24 | 腾讯科技(深圳)有限公司 | 识别恶意软件的方法和装置 |
US20170255544A1 (en) * | 2016-03-01 | 2017-09-07 | Sap Se | Assessing vulnerability impact using call graphs |
US20170351597A1 (en) * | 2016-06-02 | 2017-12-07 | International Business Machines Corporation | Identifying and isolating library code in software applications |
Non-Patent Citations (1)
Title |
---|
PARIA SHIRANI等: "BinShape: Scalable and Robust Binary Library Function Identification Using Function Shape", 《DIMVA 2017》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110941534A (zh) * | 2019-11-19 | 2020-03-31 | 深圳开源互联网安全技术有限公司 | 检测web应用第三方代码调用的方法及系统 |
CN111338622A (zh) * | 2020-05-15 | 2020-06-26 | 支付宝(杭州)信息技术有限公司 | 供应链代码识别方法、装置、服务器及可读存储介质 |
CN111338622B (zh) * | 2020-05-15 | 2020-08-11 | 支付宝(杭州)信息技术有限公司 | 供应链代码识别方法、装置、服务器及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108710492B (zh) | 2021-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109753800B (zh) | 融合频繁项集与随机森林算法的Android恶意应用检测方法及系统 | |
CN106951780B (zh) | 重打包恶意应用的静态检测方法和装置 | |
KR101337874B1 (ko) | 파일 유전자 지도를 이용하여 파일의 악성코드 포함 여부를 판단하는 방법 및 시스템 | |
CN104123493A (zh) | 应用程序的安全性检测方法和装置 | |
CN106682505A (zh) | 一种病毒检测方法、终端、服务器及系统 | |
CN106503558A (zh) | 一种基于社团结构分析的Android恶意代码检测方法 | |
CN105357204B (zh) | 生成终端识别信息的方法及装置 | |
CN106803040B (zh) | 病毒特征码处理方法及装置 | |
CN109800575B (zh) | 一种Android应用程序的安全检测方法 | |
CN104636665B (zh) | 一种Android应用程序的描述和匹配方法 | |
CN111339531B (zh) | 恶意代码的检测方法、装置、存储介质及电子设备 | |
CN103473346A (zh) | 一种基于应用程序编程接口的安卓重打包应用检测方法 | |
Wang et al. | LSCDroid: Malware detection based on local sensitive API invocation sequences | |
CN113961768B (zh) | 敏感词检测方法、装置、计算机设备和存储介质 | |
US20170017792A1 (en) | Method and device for constructing apk virus signature database and apk virus detection system | |
CN108710492A (zh) | 一种识别app程序中第三方库的方法 | |
CN106709336A (zh) | 识别恶意软件的方法和装置 | |
CN107103240A (zh) | 一种基于上下文信息的Android组件间隐私泄露行为识别方法及系统 | |
CN104036187A (zh) | 计算机病毒类型确定方法及其系统 | |
CN104361141A (zh) | 软件标识库的建立方法 | |
KR102318714B1 (ko) | 바이너리 코드 클론 기반 소프트웨어 취약점 탐지를 위한 컴퓨터 프로그램 | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN108171057B (zh) | 基于特征匹配的Android平台恶意软件检测方法 | |
CN106650447A (zh) | 一种防御PowerShell恶意代码执行的方法及系统 | |
CN104715200A (zh) | 一种病毒apk的识别方法及装置 |
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 |