CN107203706A - App内部权限的检测方法及装置 - Google Patents

App内部权限的检测方法及装置 Download PDF

Info

Publication number
CN107203706A
CN107203706A CN201610151547.0A CN201610151547A CN107203706A CN 107203706 A CN107203706 A CN 107203706A CN 201610151547 A CN201610151547 A CN 201610151547A CN 107203706 A CN107203706 A CN 107203706A
Authority
CN
China
Prior art keywords
authority
code
list
app
records
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
Application number
CN201610151547.0A
Other languages
English (en)
Other versions
CN107203706B (zh
Inventor
王蕾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610151547.0A priority Critical patent/CN107203706B/zh
Publication of CN107203706A publication Critical patent/CN107203706A/zh
Application granted granted Critical
Publication of CN107203706B publication Critical patent/CN107203706B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本申请提供一种APP内部权限的检测方法及装置,其中的方法包括:获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。本申请可以实现针对APP代码中使用到的内部权限更加便利的进行管控。

Description

APP内部权限的检测方法及装置
技术领域
本申请涉及通信领域,尤其涉及一种APP内部权限的检测方法及装置。
背景技术
Android是一个以Linux为基础的开源操作系统,由于其开放性和可移植性,可以被用在大部分电子产品上,因此Android系统已经成为全球最大的智能手机操作系统。
在Android系统中,对于各类系统权限,尤其针对各类系统敏感权限的使用和管控,会直接影响到app的规范性和用户体验。而目前针对Android系统各类权限的使用和管控,通常是通过第三方的权限监控软件来实现,已无法满足在实际应用中的管控需求。
发明内容
本申请提出一种APP内部权限的检测方法,该方法包括:
获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
可选的,所述第一权限记录列表与所述第二权限记录列表中的权限记录的数据结构至少包括以下字段:
权限名称字段,用于记录权限名称;
权限类型字段,用于记录所述权限的使用方式;所述使用方式包括基于API使用或基于权限名称使用;
权限内容字段,用于记录所述权限的使用信息;所述使用信息包括以下信息中的任一:使用所述权限的API、所述权限名称,使用所述权限的代码类和与该代码类对应的代码方法;
权限使用记录字段,用于记录使用所述权限的代码片段的地址。
可选的,所述获取APP使用的外部权限包括:
读取APP的权限配置列表以获取所述APP使用的外部权限名称;
解析系统文档获取系统定义的全部权限的信息;
在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
可选的,所述获取所述APP编译后的代码中与权限使用相关的代码片段包括:
解析所述APP编译后的代码;
查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
可选的,所述将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取之前,还包括:
针对查找到的代码片段进行代码识别;
过滤查找到的代码片段中与权限无关的代码片段。
可选的,所述针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限包括:
遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
本申请还提出一种APP内部权限的检测装置,该装置包括:
第一获取模块,用于获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
第二获取模块,用于获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
匹配模块,用于针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
可选的,所述第一权限记录列表与所述第二权限记录列表中的权限记录的数据结构至少包括以下字段:
权限名称字段,用于记录权限名称;
权限类型字段,用于记录所述权限的使用方式;所述使用方式包括基于API使用或基于权限名称使用;
权限内容字段,用于记录所述权限的使用信息;所述使用信息包括以下信息中的任一:使用所述权限的API、所述权限名称,使用所述权限的代码类和与该代码类对应的代码方法;
权限使用记录字段,用于记录使用所述权限的代码片段的地址。
可选的,所述第一获取模块具体用于:
读取APP的权限配置列表以获取所述APP使用的外部权限名称;
解析系统文档获取系统定义的全部权限的信息;
在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
可选的,所述第二获取模块具体用于:
解析所述APP编译后的代码;
查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
可选的,所述第二获取模块进一步用于:
在将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取之前,针对查找到的代码片段进行代码识别;过滤查找到的代码片段中与权限无关的代码片段。
可选的,所述匹配模块具体用于:
遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
本申请中,通过基于APP使用的外部权限的信息创建第一权限记录列表,以及基于APP编译后的代码中与权限使用相关的代码片段中记录的与权限使用相关的信息创建第二权限记录列表,并为第一权限记录列表与第二权限记录列表中的权限记录定义相同的数据结构,然后通过针对第一权限记录列表与第二权限记录列表执行匹配来确定APP编译后的代码中使用到权限的代码片段以及对应的使用权限,从而实现了可以针对APP代码中使用到的内部权限更加便利的进行管控。
附图说明
图1是本申请一实施例提供的一种APP内部权限的检测方法的流程图;
图2是本申请一实施例提供的一种获取APP外部使用权限的处理流程图;
图3是本申请一实施例提供的一种获取所述APP编译后的代码中与权限使用相关的代码片段的处理流程图;
图4是本申请一实施例提供的一种针对第一权限记录列表以及第二权限记录列表执行匹配流程图;
图5是本申请一实施例提供的一种APP内部权限的检测装置的逻辑框图;
图6是本申请一实施例提供的承载所述一种APP内部权限的检测装置的客户端的硬件结构图。
具体实施方式
在相关技术中,针对Android系统各类权限的使用和管控,通常是通过第三方的权限监控软件来实现。然而通过第三方的权限监控软件,仅能对APP(Application,应用)使用的外部权限进行监控,并不能对APP代码中实际使用到的内部权限进行监控,因此已无法满足开发人员在实际应用中针对APP代码中使用到的内部权限进行管控的需求。
有鉴于此,本申请提出一种APP内部权限的检测方法,通过基于APP使用的外部权限的信息创建第一权限记录列表,以及基于APP编译后的代码中与权限使用相关的代码片段中记录的与权限使用相关的信息创建第二权限记录列表,并为第一权限记录列表与第二权限记录列表中的权限记录定义相同的数据结构,然后通过针对第一权限记录列表与第二权限记录列表执行匹配来确定APP编译后的代码中使用到权限的代码片段以及对应的使用权限,从而实现了可以针对APP代码中使用到的内部权限更加便利的进行管控。
下面通过具体实施例并结合具体的应用场景对本申请进行描述。
请参考图1,图1是本申请一实施例提供的一种APP内部权限的检测方法,应用于客户端,所述方法执行以下步骤:
步骤101,获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
上述客户端可以包括面向APP开发人员提供针对系统中的APP进行内部权限监控服务的客户端软件,开发人员可以通过该客户端软件来监控APP的源代码中使用到的权限。
在本例中,客户端在获取APP使用的外部权限时,可以通过解析该APP的权限配置列表,来获取该APP所使用的外部权限名称,然后在系统定义的全部权限的信息中查找与该外部权限名称对应的外部权限信息。
请参见图2,图2为示出的一种获取APP外部使用权限的处理流程图,包括以下步骤:
步骤201,读取APP的权限配置列表以获取所述APP使用的外部权限名称;
在本例中,客户端可以在系统目录中读取该APP的权限配置列表,其中,在该权限配置列表中记录了该APP使用到的所有外部权限的名称。当客户端读取到该APP的权限配置列表后,可以解析该权限配置列表来获取该APP所使用的所有外部权限名称。当然,在实际应用中,在获取APP使用的外部权限时,也可以由开发人员编辑查询指令来手动查询APP所使用的外部权限。
步骤202,解析系统文档获取系统定义的全部权限的信息;
在本例中,上述权限的信息可以包括权限的名称、权限的使用方式以及权限的使用信息等。上述系统文档可以是Android系统中的API(ApplicationProgramming Interface,应用程序编程接口)文档,在API文档中记录了Android系统定义的全部权限的名称,以及使用这些权限的API。
其中,Android系统定义的权限使用方法通常包括基于API来使用权限和基于权限名称来使用权限两种。
当API文档中针对某一权限定义了使用该权限的API时,那么该权限的使用方法则为基于API来使用,该权限的使用信息则可以包括使用该权限的API。当API文档中针对某一权限未定义使用该权限的API,或者明确记载了该权限基于权限名称来使用时,那么该权限的使用方法则为基于权限名称来使用,该权限的使用信息则可以包括该权限的使用名称(即该权限的规范名称)。
客户端可以在系统的指定目录中读取API文档,然后解析API文档中定义的上述信息,来获取Android系统定义的全部权限的信息。
步骤203,在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
在本例中,当客户端通过解析API文档获取到Android系统定义的全部权限的信息后,可以在Android系统定义的全部权限的信息中来查找与APP所使用的外部权限名称对应的权限信息(APP使用到的外部权限的信息为Android系统定义的全部权限的信息的子集),此时查找到的权限信息即为该APP所使用到的外部权限的信息。
在本例中,当客户端基于步骤201至203的技术方案,获取到APP使用的外部权限时,此时可以基于APP使用的外部权限的信息来创建第一权限记录列表。
在示出的一种实施方式中,上述第一权限记录列表可以记为perm_api_list。客户端在基于APP使用的外部权限的信息来创建perm_api_list时,首先可以基于开发人员预定义的数据结构,针对每一个外部权限生成一个对应的PermRecord(权限记录)。
上述PermRecord的数据结构可以是开发人员预定义的一种大字段结构,可以包括perm_name字段(权限名称字段)、perm_use_type字段(权限类型字段)、perm_use_content字段(权限内容字段)以及perm_use_record字段(权限使用记录字段)。
其中:
perm_name字段,用于记录权限名称。
perm_use_type字段,用于记录权限的使用方式;在Android系统中定义的权限使用方式包括基于API使用或基于权限名称使用两种。
perm_use_content字段,用于记录权限的使用信息;该使用信息可以包括使用该权限的API、该权限的使用名称(即该权限的名称),APP的源代码中使用该权限的代码类以及与该代码类对应的代码方法。
perm_use_record字段,用于记录使用该权限的代码片段的地址。
客户端在针对任一外部权限生成对应的PermRecord时,可以将权限名称填入perm_name字段。当API文档中针对该权限定义了使用该权限的API时,可以在perm_use_type字段中将该权限的使用方式记录为“API”(表示基于API来使用),并在perm_use_content字段中记录使用该权限的API。当API文档中针对该权限未定义使用该权限的API,或者明确记载了该权限基于权限名称来使用时,可以在perm_use_type字段中将该权限的使用方式记录为“perm name”(表示基于权限名称来使用),并在perm_use_content字段中记录该权限的使用名称。
其中,需要指出的是,API文档中可能针对单一权限定义多个使用该权限的API,针对这种情况,可以针对单一权限创建多个PermRecord,每一个PermRecord中的perm_use_content字段,可以分别记录一个使用该权限的API。
另外,由于Android系统的API文档中,仅仅定义了全部权限的名称、使用方式以及使用信息等信息,并不包含使用权限的代码片段的地址,因此客户端为APP使用的所有外部权限生成的PermRecord中的perm_use_record字段可以为空值。
当然,在实际应用中,上述数据结构中的字段,并不局限于perm_name字段、perm_use_type字段、perm_use_content字段以及perm_use_record字段等,在实际应用中,开发人员还可以将以上四种字段作为上述数据结构中的核心字段,然后基于实际的需求,在以上四种字段的基础上进行字段扩展。
当客户端基于以上数据结构,为所有外部权限生成了对应的PermRecord后,可以基于为所有权限生成的PermRecord来创建上述perm_api_list。此时在创建完成的perm_api_list中,可以包括若干条PermRecord,每一条PermRecord都对应一个APP所使用的外部权限。
在示出的另一种实施方式中,客户端基于APP使用的外部权限的信息来创建perm_api_list之前,客户端首先可以基于开发人员预定义的上述数据结构,针对解析API文档获取到的由Android系统定义的全部权限的信息,分别生成一个对应的PermRecord。
其中,该PermRecord的数据结构与客户端在为APP所使用的外部权限创建PermRecord时,所使用的数据结构相同。
当客户端基于以上数据结构,针对Android系统定义的全部权限的信息分别生成了一个对应的PermRecord后,可以基于为Android系统定义的全部权限的信息生成的PermRecord来创建一个权限记录索引列表。
在本例中,该权限记录索引列表可以记为perm_dict。
其中,在创建完成的该perm_dict中,包括Android系统定义的所有权限的名称与客户端为Android系统定义的所有权限生成的PermRecord之间的对应关系。
当客户端基于APP使用的外部权限的信息来创建perm_api_list时,可以在perm_dict中查找与APP使用的外部权限的名称来查找对应的PermRecord,然后基于查找到的PermRecord来创建perm_api_list。
步骤102,获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
在本例中,当客户端基于APP所使用的所有外部权限的信息创建了perm_api_list(即第一权限记录列表)后,此时客户端还可以获取APP编译后的代码中与权限使用相关的代码片段,并基于这些代码片段中记录的与权限使用相关的信息,来创建第二权限记录列表。在本例中,第二权限记录列表可以记为perm_api_list。
请参见图3,图3为示出的一种获取所述APP编译后的代码中与权限使用相关的代码片段的处理流程图,包括以下步骤:
步骤301,解析所述APP编译后的代码;
在本例中,客户端在解析APP编译后的源代码时,可以通过第三方的代码解析器,或者客户端内置的代码解析模块来完成。
步骤302,查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
步骤303,将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
在本例中,Android系统定义的权限使用方法通常包括基于API来使用权限和基于权限名称来使用权限两种。
一方面,对于基于API来使用权限的这种方式,由于API通常会基于外部函数来进行调用,因此对于APP源代码中与外部函数调用相关的代码片段来说,则很可能通过调用API使用了系统权限。在这种情况下,客户端可以解析APP编译后的源代码,查找与外部函数调用相关的代码片段,然后将查找到的代码片段作为与权限使用相关的代码片段进行获取和保存,
另一方面,对于基于权限名称来使用权限的这种方式,由于Android系统中通常会通过一些字符定义指令来调用权限名称,因此对于APP源代码中与字符定义相关的代码片段来说,则很可能通过字符定义指令定义权限名称使用了系统权限。在这种情况下,客户端可以解析APP编译后的源代码,查找与字符定义相关的代码片段,将查找到的代码片段作为与权限使用相关的代码片段进行获取和保存。
其中,需要指出的是,由于客户端在APP编译后的代码中查找到的与外部函数调用以及字符定义相关的代码片段中,可能会包含一些与权限使用无关的代码,因此客户端在将查找到的与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取和保存之前,还可以对查找的代码片段中与权限使用无关的代码片段进行过滤。
在示出的一种实施方式中,客户端在对查找的代码片段中的无效代码片段进行过滤时,可以针对查找到的代码片段进行代码识别,通过代码识别客户端可以识别出查找到的代码片段中的与权限使用无关的代码片段,比如这些代码片段可以包括客户端可以明确识别出的一些与权限使用无关的函数、通用指令,非目标指令,等等。对于识别出的上述与权限使用无关的代码片段,可以由客户端进行过滤,从查找到的代码片段中清除。通过这种方式,可以尽可能的避免查找到的代码片段均为与权限使用相关的代码片段。
在本例中,当客户端基于步骤301至303的技术方案,获取到APP编译后的源代码中与权限使用相关的代码片段后,此时可以基于这些代码片段中记录的与权限使用相关的信息创建第二权限记录列表。
其中,上述第二权限记录列表可以记为perm_code_list。
在示出的一种实施方式中,客户端在基于APP的源代码中与权限相关的代码片段中记录的与权限使用相关的信息创建perm_code_list时,首先可以基于开发人员预定义的数据结构,针对每一个代码片段分别生成一个对应的PermRecord(权限记录)。
其中,需要强调的是,客户端在针对每一个代码片段生成对应的PermRecord时所采用的上述PermRecord的数据结构,与客户端在基于APP所使用的外部权限的信息创建perm_api_list(即第一权限记录列表)时所使用的数据结构相同。在该数据结构中仍然可以包括perm_name字段(权限名称字段)、perm_use_type字段(权限类型字段)、perm_use_content字段(权限内容字段)以及perm_use_record字段(权限使用记录字段),而且这些字段记录的信息保持不变,不再赘述。
客户端在针对任一代码片段生成对应的PermRecord时,可以将权限名称填入perm_name字段。由于上述代码片段中,通常并不会包含权限名称、权限的使用方式等信息,因此perm_name字段和perm_use_type字段可以为空值。对于perm_use_content字段,一方面,如果上述代码片段为与外部函数调用相关的代码片段,此时该代码片段中通常并不包含API,但组成API的代码类以及与该代码类对应的方法却可能会出现在上述代码片段中,因此客户端可以提取该代码片段中调用的代码类,以及与该代码类对应的方法,然后将提取出的代码类与该代码类对应的方法组成API的格式填入perm_use_content字段;另一方面,如果上述代码片段为与字符定义相关的代码片段,此时客户端可以提取该代码片段中定义的字符串(该字符串可能是权限名称),然后将提取出的该字符串填入perm_use_content字段。对于perm_use_content字段,客户端可以从该代码片段中读取该代码片段的地址(通常在代码片段的起始位置),然后将读取到的地址填入perm_use_record字段。
步骤103,针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
在本例中,当perm_api_list(即第一权限记录列表)以及perm_code_list(即第二权限记录列表)创建完成后,由于perm_api_list以及perm_code_list中的PermRecord(权限记录)具有相同的数据结构,因此在这种情况下,客户端可以直接针对perm_api_list以及perm_code_list执行匹配来确定APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
请参见图4,图4为示出的一种针对perm_api_list以及perm_code_list执行匹配的处理流程图,包括以下步骤:
步骤401,遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
在本例中,客户端在遍历之前,可以基于相同的排序方法,针对perm_api_list以及perm_code_list中的PermRecord进行排序,排序完成后,客户端可以遍历perm_api_list以及perm_code_list,将perm_api_list以及perm_code_list中的PermRecord的各字段逐一进行内容匹配。
其中,由于perm_api_list以及perm_code_list中PermRecord的部分字段为空值,因此在匹配的过程中,如果perm_api_list或者perm_code_list中PermRecord的某一个字段为空值,可以直接顺序匹配下一个字段。
步骤402,当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
在本例中,客户端在将perm_api_list以及perm_code_list中的PermRecord的各字段逐一进行内容匹配的过程中,一旦perm_api_list中任一PermRecord,与perm_code_list中的任一PermRecord包括至少一个记录的信息完全匹配的字段时,即二者至少包含一个内容相同的字段时,此时客户端可以确定这两个PermRecord为相同的PermRecord。
步骤403,针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
在本例中,当perm_api_list以及perm_code_list遍历完成,客户端完成整个匹配过程后,此时客户端可以将perm_api_list以及perm_code_list中确定相同的PermRecord中各字段记录的信息进行合并,生成最终的权限使用记录列表。
在本例中,该权限使用记录列表可以记为perm_used_list,该列表中的PermRecord即为信息合并后的各PermRecord。在这些PermRecord中,各字段记录的信息,即为APP的源代码中使用到的内部权限的信息。后续,客户端可以基于该列表中各PermRecord记录的信息,来对APP的源代码中使用的内部权限进行监控。客户端通过解析该列表中各PermRecord记录的信息,就可以确定出APP的源代码中使用到权限的代码片段的地址以及该代码片段所使用到的权限的信息,以方便开发人员对APP代码中使用到的内部权限进行管控。
以下结合Android系统的应用场景通过具体的应用实例对本申请的技术方案进行说明。
在本例中,假设客户端需要对Android系统中的某一APP源代码中使用的内部权限进行监控。
在初始状态下,客户端可以在指定目录读取Android系统中的API文档,然后解析该API文档来获取Android系统中定义的全部权限的信息,并按照以下数据结构根据解析出的权限的信息生成PermRecord:
{
perm_name:权限名称
perm_use_type:权限的使用方式
perm_use_content:权限的使用信息
perm_use_record:使用权限的代码片段地址
}
其中,以上数据结构中各字段记录的信息的内容不再赘述。
1)创建perm_api_list(即第一权限记录列表)
假设API文档中包括如下片段:
Permission:android.permission.READ_PHONE_STATE
1Callers:
<android.telephony.TelephonyManager:java.lang.String getSubscriberId()>
其中,READ_PHONE_STATE为API中定义的“读取电话状态”的系统权限。android.telephony.TelephonyManager:java.lang.String getSubscriberId()为API文档定义的可以使用权限READ_PHONE_STATE的API。
客户端可以通过解析上述片段创建perm_api_list,其中创建过程不再赘述。
其中,针对以上代码片段,客户端可以将权限名称填入perm_name字段。
将perm_use_type字段的使用方式记录为“API”。
将android.telephony.TelephonyManager:java.lang.String getSubscriberId()填入perm_use_content字段。
perm_use_record字段填入空值null。
最终创建完成的第一PermRecord如下所示:
{
perm_name:android.permission.READ_PHONE_STATE
perm_use_type:API
perm_use_content:android.telephony.TelephonyManager:java.lang.StringgetSubscriberId()
perm_use_record:null
}
2)创建perm_code_list(即第二权限记录列表)
假设客户端查找到的与权限使用相关的代码片段如下所示:
getOriginalImsi(Landroid/content/Context;)Ljava/lang/String;
IVK:android.telephony.TelephonyManager:getSubscriberId
以上代码片段为对外函数调用相关的代码片段,在该代码片段中,getOriginalImsi(Landroid/content/Context;)为该代码段的地址,在该代码片段中还包含代码类android.telephony.TelephonyManager和java.lang.String,以及与以上代码类对应的函数方法getSubscriberId()。
客户端可以通过上述代码片段中记录的与权限相关的信息创建perm_code_list,其中创建过程不再赘述在这种情况下。
其中,针对以上代码片段,客户端可以在perm_name字段以及perm_use_type中分别填入空值null。
客户端提取该代码片段中的代码类android.telephony.TelephonyManager和java.lang.String,以及函数方法getSubscriberId(),然后将上述代码类和函数方法组成API的格式填入perm_use_content字段。
客户端可以提取地址getOriginalImsi(Landroid/content/Context;),将上述代码片段的地址填入perm_use_record字段。
最终创建完成的第二PermRecord可以如下所示:
{
perm_name:null
perm_use_type:null
perm_use_content:android.telephony.TelephonyManager:java.lang.StringgetSubscriberId()
perm_use_record:getOriginalImsi(Landroid/content/Context;)}
3)遍历匹配perm_api_list和perm_code_list
在本例中,客户端在遍历perm_api_list和perm_code_list中的PermRecord进行匹配的过程中,在匹配以上示出的第一PermRecord和第二PermRecord时,由于第一PermRecord和第二PermRecord中perm_use_content字段记录的内容完全相同,因此客户端可以对第一PermRecord和第二PermRecord各字段记录的信息进行合并,合并后的PermRecord如下所示:
{
perm_name:android.permission.READ_PHONE_STATE
perm_use_type:API
perm_use_content:android.telephony.TelephonyManager:java.lang.StringgetSubscriberId()
perm_use_record:null
}
此时,以上合并后得到的PermRecord,即为最终创建生成的perm_used_list中的PermRecord,客户端通过解析该PermRecord中记录的信息,就可以确定在当前APP的源代码中存在使用了系统权限READ_PHONE_STATE的代码片段,并且可以相应的确定出该代码片段的地址为getOriginalImsi(Landroid/content/Context;)。
在以上实施例中,通过基于APP使用的外部权限的信息创建第一权限记录列表,以及基于APP编译后的代码中与权限使用相关的代码片段中记录的与权限使用相关的信息创建第二权限记录列表,并为第一权限记录列表与第二权限记录列表中的权限记录定义相同的数据结构,然后通过针对第一权限记录列表与第二权限记录列表执行匹配来确定APP编译后的代码中使用到权限的代码片段以及对应的使用权限,从而实现了可以针对APP代码中使用到的内部权限更加便利的进行管控。
与上述方法实施例相对应,本申请还提供了装置的实施例。
请参见图5,本申请提出一种APP内部权限的检测装置50,应用于客户端;其中,请参见图6,作为承载所述客户端的电子设备所涉及的硬件架构中,通常包括CPU、内存、非易失性存储器、网络接口以及内部总线等;以软件实现为例,所述APP内部权限的检测装置50通常可以理解为加载在内存中的计算机程序,通过CPU运行之后形成的软硬件相结合的逻辑装置,所述装置50包括:
第一获取模块501,用于获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
第二获取模块502,用于获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
匹配模块503,用于针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
在本例中,所述第一权限记录列表与所述第二权限记录列表中的权限记录的数据结构至少包括以下字段:
权限名称字段,用于记录权限名称;
权限类型字段,用于记录所述权限的使用方式;所述使用方式包括基于API使用或基于权限名称使用;
权限内容字段,用于记录所述权限的使用信息;所述使用信息包括以下信息中的任一:使用所述权限的API、所述权限名称,使用所述权限的代码类和与该代码类对应的代码方法;
权限使用记录字段,用于记录使用所述权限的代码片段的地址。
在本例中,所述第一获取模块501具体用于:
读取APP的权限配置列表以获取所述APP使用的外部权限名称;
解析系统文档获取系统定义的全部权限的信息;
在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
在本例中,所述第二获取模块502具体用于:
解析所述APP编译后的代码;
查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
在本例中,所述第二获取模块502进一步用于:
在将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取之前,针对查找到的代码片段进行代码识别;过滤查找到的代码片段中与权限无关的代码片段。
在本例中,所述匹配模块503具体用于:
遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (12)

1.一种APP内部权限的检测方法,其特征在于,该方法包括:
获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
2.根据权利要求1所述的方法,其特征在于,所述第一权限记录列表与所述第二权限记录列表中的权限记录的数据结构至少包括以下字段:
权限名称字段,用于记录权限名称;
权限类型字段,用于记录所述权限的使用方式;所述使用方式包括基于API使用或基于权限名称使用;
权限内容字段,用于记录所述权限的使用信息;所述使用信息包括以下信息中的任一:使用所述权限的API、所述权限名称,使用所述权限的代码类和与该代码类对应的代码方法;
权限使用记录字段,用于记录使用所述权限的代码片段的地址。
3.根据权利要求1或2所述的方法,其特征在于,所述获取APP使用的外部权限包括:
读取APP的权限配置列表以获取所述APP使用的外部权限名称;
解析系统文档获取系统定义的全部权限的信息;
在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
4.根据权利要求1或2所述的方法,其特征在于,所述获取所述APP编译后的代码中与权限使用相关的代码片段包括:
解析所述APP编译后的代码;
查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
5.根据权利要求4所述的方法,其特征在于,所述将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取之前,还包括:
针对查找到的代码片段进行代码识别;
过滤查找到的代码片段中与权限无关的代码片段。
6.根据权利要求1或2所述的方法,其特征在于,所述针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限包括:
遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
7.一种APP内部权限的检测装置,其特征在于,该装置包括:
第一获取模块,用于获取APP使用的外部权限,并基于所述外部权限的信息创建第一权限记录列表;
第二获取模块,用于获取所述APP编译后的代码中与权限使用相关的代码片段,并基于所述代码片段中记录的与权限使用相关的信息创建第二权限记录列表;其中,所述第一权限记录列表与所述第二权限记录列表中的权限记录数据结构相同;
匹配模块,用于针对所述第一权限记录列表与所述第二权限记录列表执行匹配以确定所述APP编译后的代码中使用到权限的代码片段以及对应的使用权限。
8.根据权利要求7所述的装置,其特征在于,所述第一权限记录列表与所述第二权限记录列表中的权限记录的数据结构至少包括以下字段:
权限名称字段,用于记录权限名称;
权限类型字段,用于记录所述权限的使用方式;所述使用方式包括基于API使用或基于权限名称使用;
权限内容字段,用于记录所述权限的使用信息;所述使用信息包括以下信息中的任一:使用所述权限的API、所述权限名称,使用所述权限的代码类和与该代码类对应的代码方法;
权限使用记录字段,用于记录使用所述权限的代码片段的地址。
9.根据权利要求7或8所述的装置,其特征在于,所述第一获取模块具体用于:
读取APP的权限配置列表以获取所述APP使用的外部权限名称;
解析系统文档获取系统定义的全部权限的信息;
在所述系统定义的全部权限的信息中查找与所述外部权限名称对应的外部权限的信息。
10.根据权利要求7或8所述的装置,其特征在于,所述第二获取模块具体用于:
解析所述APP编译后的代码;
查找所述APP编译后的代码中与外部函数调用以及字符定义相关的代码片段;
将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取。
11.根据权利要求10所述的装置,其特征在于,所述第二获取模块进一步用于:
在将查找到的所述与外部函数调用以及字符定义相关的代码片段作为与权限使用相关的代码片段进行获取之前,针对查找到的代码片段进行代码识别;过滤查找到的代码片段中与权限无关的代码片段。
12.根据权利要求7或8所述的装置,其特征在于,所述匹配模块具体用于:
遍历所述第一权限记录列表以及所述第二权限记录列表,将所述第一权限记录列表中的权限记录与所述第二权限记录列表中的权限记录依次执行匹配;
当所述第一权限记录列表中的任一权限记录与所述第二权限记录列表中的任一权限记录包括至少一个记录的信息完全匹配的字段时,确定二者匹配;
针对所述第一权限记录列表以及所述第二权限记录列表中相匹配的权限记录中各字段记录的信息进行合并,生成对应的权限使用记录列表,以基于该权限使用记录列表确定所述APP编译后的代码中使用到权限的代码片段的地址以及对应的使用权限的信息。
CN201610151547.0A 2016-03-16 2016-03-16 App内部权限的检测方法及装置 Active CN107203706B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610151547.0A CN107203706B (zh) 2016-03-16 2016-03-16 App内部权限的检测方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610151547.0A CN107203706B (zh) 2016-03-16 2016-03-16 App内部权限的检测方法及装置

Publications (2)

Publication Number Publication Date
CN107203706A true CN107203706A (zh) 2017-09-26
CN107203706B CN107203706B (zh) 2020-04-14

Family

ID=59903651

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610151547.0A Active CN107203706B (zh) 2016-03-16 2016-03-16 App内部权限的检测方法及装置

Country Status (1)

Country Link
CN (1) CN107203706B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111488569A (zh) * 2020-04-09 2020-08-04 支付宝(杭州)信息技术有限公司 一种权限确定、管理方法、装置、设备及介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1859245A (zh) * 2005-11-02 2006-11-08 华为技术有限公司 一种数字家庭网络中的权限管理方法及家庭网络系统
KR20060117881A (ko) * 2006-09-28 2006-11-17 사단법인 금융결제원 휴대폰을 이용한 전자서명 수행 시스템 및 방법
CN101504604A (zh) * 2009-03-13 2009-08-12 张昊 一种权限管理验证应用方法
CN103377125A (zh) * 2012-04-25 2013-10-30 杭州勒卡斯广告策划有限公司 一种代码测试方法、装置及系统
US8904492B2 (en) * 2011-09-15 2014-12-02 Fujitsu Limited Method of controlling information processing system, computer-readable recording medium storing program for controlling apparatus
CN104346559A (zh) * 2014-11-26 2015-02-11 北京奇虎科技有限公司 权限请求响应方法及相应的装置
CN105184152A (zh) * 2015-10-13 2015-12-23 四川中科腾信科技有限公司 一种移动终端数据处理方法
CN105335649A (zh) * 2015-10-14 2016-02-17 上海斐讯数据通信技术有限公司 一种智能终端应用程序的权限管理方法及系统

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1859245A (zh) * 2005-11-02 2006-11-08 华为技术有限公司 一种数字家庭网络中的权限管理方法及家庭网络系统
KR20060117881A (ko) * 2006-09-28 2006-11-17 사단법인 금융결제원 휴대폰을 이용한 전자서명 수행 시스템 및 방법
CN101504604A (zh) * 2009-03-13 2009-08-12 张昊 一种权限管理验证应用方法
US8904492B2 (en) * 2011-09-15 2014-12-02 Fujitsu Limited Method of controlling information processing system, computer-readable recording medium storing program for controlling apparatus
CN103377125A (zh) * 2012-04-25 2013-10-30 杭州勒卡斯广告策划有限公司 一种代码测试方法、装置及系统
CN104346559A (zh) * 2014-11-26 2015-02-11 北京奇虎科技有限公司 权限请求响应方法及相应的装置
CN105184152A (zh) * 2015-10-13 2015-12-23 四川中科腾信科技有限公司 一种移动终端数据处理方法
CN105335649A (zh) * 2015-10-14 2016-02-17 上海斐讯数据通信技术有限公司 一种智能终端应用程序的权限管理方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111488569A (zh) * 2020-04-09 2020-08-04 支付宝(杭州)信息技术有限公司 一种权限确定、管理方法、装置、设备及介质

Also Published As

Publication number Publication date
CN107203706B (zh) 2020-04-14

Similar Documents

Publication Publication Date Title
JP5992622B2 (ja) 悪意あるアプリケーション診断装置及び方法
CN109960944A (zh) 一种数据脱敏方法、服务器、终端及计算机可读存储介质
CN107341399B (zh) 评估代码文件安全性的方法及装置
CN105431844A (zh) 用于搜索系统的第三方搜索应用
WO2013158758A1 (en) Semantic source code searching
CN105940410A (zh) 用于去除个人可识别信息的清理器
EP3014479A2 (en) Omega names: name generation and derivation
Şimşek et al. Domain specific semantic validation of schema. org annotations
CN110427755A (zh) 一种识别脚本文件的方法及装置
CN109308300B (zh) 一种逻辑运算的处理方法、装置、转换插件及存储介质
US20200142674A1 (en) Extracting web api endpoint data from source code
CN107797823B (zh) 业务规则管理方法、装置、存储介质和计算机设备
WO2019114673A1 (zh) 基于最小分支路径函数胎记的软件局部抄袭证据生成方法
CN104252447A (zh) 文件行为分析方法及装置
CN104392171A (zh) 一种基于数据关联的自动内存证据分析方法
CN106611029B (zh) 提高网站站内搜索效率的方法和装置
Fu et al. Data correlation‐based analysis methods for automatic memory forensic
CN111083054A (zh) 路由配置处理方法、装置、计算机设备和存储介质
CN107203706A (zh) App内部权限的检测方法及装置
CN106611022B (zh) 提高网站站内搜索效率的方法和装置
US7599946B2 (en) Systems and methods for discovering frequently accessed subtrees
KR102153127B1 (ko) 개체명 인식(Named-Entity Recognition)의 정확성 제고를 위한 후처리 과정을 제공하기 위한 방법 및 이를 사용한 서버
Raghavan et al. Determining the Origin of Downloaded Files Using Metadata Associations.
CN109635175B (zh) 页面数据拼接方法、装置、可读存储介质和电子设备
CN112433943A (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200922

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200922

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Advanced innovation technology Co.,Ltd.

Address before: A four-storey 847 mailbox in Grand Cayman Capital Building, British Cayman Islands

Patentee before: Alibaba Group Holding Ltd.