CN107273151B - 一种安全的Android App功能插件化方法 - Google Patents

一种安全的Android App功能插件化方法 Download PDF

Info

Publication number
CN107273151B
CN107273151B CN201710381127.6A CN201710381127A CN107273151B CN 107273151 B CN107273151 B CN 107273151B CN 201710381127 A CN201710381127 A CN 201710381127A CN 107273151 B CN107273151 B CN 107273151B
Authority
CN
China
Prior art keywords
plug
module
file
dex
dex file
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.)
Active
Application number
CN201710381127.6A
Other languages
English (en)
Other versions
CN107273151A (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.)
Zhenjiang Youyi Supply Chain Management Co.,Ltd.
Original Assignee
Xian University of Technology
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 Xian University of Technology filed Critical Xian University of Technology
Priority to CN201710381127.6A priority Critical patent/CN107273151B/zh
Publication of CN107273151A publication Critical patent/CN107273151A/zh
Application granted granted Critical
Publication of CN107273151B publication Critical patent/CN107273151B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/62Uninstallation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44594Unloading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability
    • 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)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种安全的Android App功能插件化方法,步骤包括:1)按照插件化粒度分为模块化更新和热修复;2)预注册代理组件、提供引用的dex文件的jar包、编写相应的动态注入的代码;3)插件模块编译生成dex文件,随机生成DES密钥,加密dex文件,将密钥添加至dex文件末尾,打包签名;4)服务器推送更新模块,App下载新模块;5)检测插件模块的安全性;6)安装加载插件;7)重新启动应用。本发明的方法,将新功能的增加和BUG修复分开,插件生效相比于传统的App开发流程从开发效率、软件部署到用户体验都会有一个大幅度的提升。

Description

一种安全的Android App功能插件化方法
技术领域
本发明属于Android应用技术领域,涉及一种安全的Android App功能插件化方法。
背景技术
移动应用越来越普及,所涉及到的领域也越来越多,导致应用规模越来越庞大,开发者往往会因为用户需求的不断变化,对应用进行频繁的更新。对于传统的开发模式而言,每一次应用的更新都需要用户重新下载安装整个应用包。这种开发模式对于用户来说,体验是十分不友好,很多用户可能因为嫌麻烦、费流量而拒绝应用的升级,这种现象也就给移动应用快速迭代和bug的修复造成了严重的影响。因此传统的开发模式很难再胜任移动端应用的开发工作了。目前已经开源的插件化框架有不少,但是大多数针对性比较强,要么针对的是新功能的增加,要么是bug的修复,并没有一个框架对两者进行融合,并且这些框架也没有采取任何安全机制来保障应用的安全。
插件安全性的检测也是十分重要的,如果不对插件的安全性进行检测,一旦插件模块在网络传输中被劫持替换,会给应用的安全带来威胁。目前开源的插件化框架并不具有热修复的功能,而在应用上线以后,往往会出现某个类文件存在问题的情况,为了避免用户重新更新整个应用,实现只更新出错文件的这种热修复技术是十分重要并且迫切的。
发明内容
本发明的目的是提供一种安全的Android App功能插件化方法,解决了现有技术中用户重新更新整个应用,存在安全风险,反复更新相对麻烦的问题。
本发明的技术方案,一种安全的Android App功能插件化方法,按照以下步骤实施:
步骤1、按照插件化粒度分为模块化更新和热修复,
模块化更新主要是针对新功能的增加,而热修复针对的是类文件方法级别的修复;
步骤2、预注册代理组件、提供引用的dex文件的jar包、编写相应的动态注入的代码,
2.1)在宿主应用的AndroidManifest.xml文件中预注册若干个进程,每个进程中预注册相应数目的组件;
2.2)提供一个dex jar包并将其打包进宿主应用,其中jar包中至少含有一个类;
2.3)编写动态注入代码;
步骤3、插件模块编译生成dex文件,随机生成DES密钥,加密dex文件,将密钥添加至dex文件末尾,打包签名;
步骤4、服务器推送更新模块,App下载新模块;
步骤5、检测插件模块的安全性;
步骤6、安装加载插件;
步骤7、重新启动应用,插件生效。
本发明的有益效果是,一是根据插件化的粒度分为模块更新和热修复,模块更新针对的是新功能的增加,而热修复针对的是类文件中BUG的修复;二是对插件化机制的安全提供了相关的保护措施,通过验证APK签名和对dex文件进行DES加密来保障应用安全;三是插件运行在独立的进程中,从而可以使插件与宿主应用,插件与插件之间隔离,插件的崩溃并不会影响宿主应用;四是插件实现热插拔,对插件模块在模块更新时随时进行安装和卸载新功能模块,热修复模块时会在用户毫无感知的情况下修复BUG。
附图说明
图1为本发明方法的总体流程图;
图2为本发明方法的模块化更新的流程图;
图3为本发明方法的热修复的流程图。
具体实施方式
下面结合附图和具体实施方式对本发明进行详细说明。
本发明的方法,主要利用Java的动态加载技术加载插件模块中的代码,利用HOOK机制对系统关键模块进行HOOK欺骗系统保障插件正常的访问系统资源与服务,利用动态代码注入来解决单个dex的引用问题,利用验证APK签名与相关加解密算法保障应用的安全,同时利用Android系统进程间的沙箱隔离性来实现模块与模块、模块与宿主应用之间的隔离性,通过隔离各个模块之间的崩溃来增强App的稳定性。
为了区分两种粒度的插件化,本发明采用了不同的方式接入宿主应用。对于模块化更新,接入宿主中的方式是APK;对于热修复,本发明采用的是dex。
参照图1、图2、图3,本发明的方法,具体按照以下步骤实施:
步骤1、按照插件化粒度分为模块化更新和热修复,
模块化更新主要是针对新功能的增加,而热修复针对的是类文件方法级别的修复;
应用需要更新时,考虑是增加新功能还是针对类文件的BUG进行修复。
步骤2、预注册代理组件、提供引用的dex文件的jar包、编写相应的动态注入的代码,
2.1)在宿主应用的AndroidManifest.xml文件中预注册若干个进程,每个进程中预注册相应数目的组件;
2.2)提供一个dex jar包并将其打包进宿主应用,其中jar包中至少含有一个类;
2.3)编写动态注入代码;
步骤3、插件模块编译生成dex文件,随机生成DES密钥,加密dex文件,将密钥添加至dex文件末尾,打包签名,具体包括:
3.1)编译资源和java代码,为java代码生成对应的dex文件,为资源生成对应的访问id;
3.2)随机生成DES的密钥,利用该密钥和相应的DES算法加密dex文件;
3.3)将密钥添加至dex文件末尾;
3.4)若是进行模块化更新,则将dex文件与资源文件打包生成APK并签名并部署至服务器;
步骤4、服务器推送更新模块,App下载新模块,
步骤5、检测插件模块的安全性,
5.1)应用遍历固定目录的更新模块,若更新模块是APK文件,解析APK文件,验证APK的一致性与完整性;
5.2)从dex文件末尾读取密钥并解密dex文件;
步骤6、安装加载插件,
6.1)对于模块化更新的新模块进行加载,创建一个新的加载器加载类,并创建加载器与模块之间的映射关系;
6.2)对于热修复的新模块,根据6.1)中生成的映射关系寻找合适的加载器加载类;
6.3)若是模块更新成功安装进宿主应用后,已安装的新模块也是以列表形式展示,用户根据喜好选择列表中的插件模块卸载;
步骤7、重新启动应用,插件生效,
7.1)对于模块化更新,应用在启动插件时,在预注册的进程中随机选择一个未启动的进程启动;
7.2)对于热修复模块,应用重新启动之后,BUG自动进行修复。
本发明方法的插件化机制,是根据插件化的粒度分成模块化更新和热修复,将新功能的增加和BUG修复分开是因为新功能的增加往往伴随着大量新资源和类文件的更新,而BUG的修复往往只是少量类文件的更新。
以下分别通过模块化更新和热修复的实施例进行详述。
实施例1、模块化更新,参照图2,
步骤1、进行大粒度的插件化,选择模块化更新
步骤2、在宿主应用的AndroidManifest.xml文件中预注册6个进程。
每个进程中包含1个Service代理组件,1个ContentProvider组件,1个standard模式启动的Activity,singleTop、singleTask、singleInstance模式启动的Activity各5个。
步骤3、更新模块编译生成dex文件,随机生成DES密钥,用密钥加密文件,打包APK;
3.1)编译资源和java代码,生成dex文件和资源id;
3.2)利用随机生成的密钥加密dex文件,并将密钥追加至dex文件末尾;
3.3)将编译好的资源文件和加密后的dex文件打包成APK包并对APK进行签名,签名文件必须与应用发布时的保持一致,并将签好名的APK部署在服务器上;
步骤4、将更新的模块加载到本地固定目录,安装加载插件模块
4.1)服务器进行推送,若有更新模块,应用将新模块下载到本地目录;
4.2)应用在下次启动时遍历固定目录,判断是否存在新的APK文件,若存在则将对相应的应用以列表的形式展示由用户决定是否进行安装,若不存在宿主应用程序正常启动;
步骤5、检查模块的安全性,利用密钥解密dex文件;
5.1)应用遍历固定目录的更新模块,对APK文件进行解析,获取签名文件验证模块的一致性与完整性,再对AndroidManifest.xml文件进行解析把相应的组件信息缓存到系统中,如果存在静态广播,则将静态广播转动态广播进行注册,并读取dex文件末尾的密钥进行解密;
步骤6、安装加载插件模块
6.1)创建一个新的加载器加载新模块,将新的加载器按照键值对的形式进行缓存,其中键值是该插件包的包名;
6.2)模块加载进入宿主应用后,已安装的新模块也是以列表形式展示,用户根据喜好选择列表中的插件模块卸载;
步骤7、重新启动应用,插件启动;
启动新模块时,应用在未启动的进程中随机选择一个进程启动,并且通过伪造对应的Binder对象实现插件对系统资源和服务的访问,即成。
实施例2、热修复,参照图3,
步骤1、进行小粒度的插件化,选择热修复;
步骤2、动态代码注入,提供一个dex jar包并将其打包进宿主应用;
2.1)在宿主程序中的Application类中编写一个开关控制是否进行代码注入;
2.2)编写至少含有一个类的类文件并生成dex文件的jar包,命名为hotPatch.jar,在宿主应用打包时,一并打包进该宿主应用;
步骤3、编译java代码生成dex文件,生成随机的DES密钥加密dex文件,将该文件部署在服务器上;
3.1)将修复的类编译生成dex文件;
3.2)随机生成DES密钥,利用密钥加密dex文件,同时将密钥追加至dex文件末尾;
3.3)将dex文件部署在服务器上;
步骤4、将更新的模块加载到本地固定目录;
步骤5、检测插件模块的安全性,读取dex文件末尾的密钥,利用密钥解密dex文件;
步骤6、安装加载插件;
按照dex文件中的包名找到对应的加载器,利用该加载器来加载dex文件中的类,利用java的反射技术,把类的信息插入到DexPathList中的dexElements数组中靠前的位置,保证类文件优先于BUG类文件的加载;
步骤7、重新启动应用,BUG得到修复;
利用javassist对类文件进行动态代码注入,让该类引用该hotPathch.dex中的类,避免打上CLASS_ISPREVERIFIED标志,即成。
从上面的两个实施例可以看出,通过本发明的插件化方法可以实现应用的模块化开发,也可以实现应用BUG的及时修复;并且在实现这些功能的同时,可以在一定程度上防止插件模块在网络中被劫持后经过修改后加载进入宿主应用;实现了模块化更新的可热插拔,根据用户自己的意愿决定新模块的安装与卸载;实现了插件与宿主应用、插件与插件之间的沙箱机制,插件应用的崩溃并不会影响宿主应用的使用。

Claims (1)

1.一种安全的Android App功能插件化方法,其特征在于,按照以下步骤实施:
步骤1、按照插件化粒度分为模块化更新和热修复,
模块化更新主要是针对新功能的增加,而热修复针对的是类文件方法级别的修复;
步骤2、预注册代理组件、提供引用的dex文件的jar包、编写相应的动态注入的代码,具体包括:
2.1)在宿主应用的AndroidManifest.xml文件中预注册若干个进程,每个进程中预注册相应数目的组件;
2.2)提供一个dex jar包并将其打包进宿主应用,其中jar包中至少含有一个类;
2.3)编写动态注入代码;
步骤3、插件模块编译生成dex文件,随机生成DES密钥,加密dex文件,将密钥添加至dex文件末尾,打包签名,具体包括:
3.1)编译资源和java代码,为java代码生成对应的dex文件,为资源生成对应的访问id;
3.2)随机生成DES的密钥,利用该密钥和相应的DES算法加密dex文件;
3.3)将密钥添加至dex文件末尾;
3.4)若是进行模块化更新,则将dex文件与资源文件打包生成APK并签名并部署至服务器;
步骤4、服务器推送更新模块,App下载新模块;
步骤5、检测插件模块的安全性,具体包括:
5.1)应用遍历固定目录的更新模块,若更新模块是APK文件,解析APK文件,验证APK的一致性与完整性;
5.2)从dex文件末尾读取密钥并解密dex文件;
步骤6、安装加载插件,具体包括:
6.1)对于模块化更新的新模块进行加载,创建一个新的加载器加载类,并创建加载器与模块之间的映射关系;
6.2)对于热修复的新模块,根据6.1)中生成的映射关系寻找合适的加载器加载类;
6.3)若是模块更新成功安装进宿主应用后,已安装的新模块也是以列表形式展示,用户根据喜好选择列表中的插件模块卸载;
步骤7、重新启动应用,插件生效,具体包括:
7.1)对于模块化更新,应用在启动插件时,在预注册的进程中随机选择一个未启动的进程启动;
7.2)对于热修复模块,应用重新启动之后,BUG自动进行修复。
CN201710381127.6A 2017-05-25 2017-05-25 一种安全的Android App功能插件化方法 Active CN107273151B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710381127.6A CN107273151B (zh) 2017-05-25 2017-05-25 一种安全的Android App功能插件化方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710381127.6A CN107273151B (zh) 2017-05-25 2017-05-25 一种安全的Android App功能插件化方法

Publications (2)

Publication Number Publication Date
CN107273151A CN107273151A (zh) 2017-10-20
CN107273151B true CN107273151B (zh) 2020-11-17

Family

ID=60064878

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710381127.6A Active CN107273151B (zh) 2017-05-25 2017-05-25 一种安全的Android App功能插件化方法

Country Status (1)

Country Link
CN (1) CN107273151B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108536464A (zh) * 2018-04-26 2018-09-14 北京奇艺世纪科技有限公司 一种应用程序的热修复方法及装置
CN110427198A (zh) * 2018-04-27 2019-11-08 中兴通讯股份有限公司 应用程序的热修复方法、装置及终端、存储介质
CN110806884A (zh) * 2018-08-06 2020-02-18 中兴通讯股份有限公司 一种操作系统故障的修复方法和装置
CN110879713B (zh) * 2018-09-06 2023-06-20 山东华软金盾软件股份有限公司 一种android端强加密插件热更新管理方法
CN111078262B (zh) * 2018-10-18 2023-04-11 百度在线网络技术(北京)有限公司 应用的热修复方法和装置
CN111552518B (zh) * 2019-01-24 2023-04-07 阿里巴巴集团控股有限公司 一种启动应用的控件加载方法及装置
CN110109717A (zh) * 2019-05-16 2019-08-09 北京智游网安科技有限公司 一种安卓插件的加载控制方法、装置和计算机设备
CN110262838A (zh) * 2019-06-14 2019-09-20 深圳乐信软件技术有限公司 一种程序崩溃的处理方法、装置、终端及存储介质
CN111273955B (zh) * 2020-01-16 2024-01-19 惠州Tcl移动通信有限公司 热修复插件优化方法、装置、存储介质及电子设备
CN112328422A (zh) * 2020-11-06 2021-02-05 深圳市锐尔觅移动通信有限公司 异常修复方法、装置、电子设备及存储介质
CN116700834B (zh) * 2023-08-07 2023-10-24 天津华来科技股份有限公司 一种App模块化加载方法及系统

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105323269A (zh) * 2014-06-17 2016-02-10 中兴通讯股份有限公司 安卓系统中app的更新方法、终端及存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8966376B2 (en) * 2010-12-10 2015-02-24 Wyse Technology L.L.C. Methods and systems for remote desktop session redrawing via HTTP headers
CN102915247B (zh) * 2012-08-31 2015-08-19 杭州斯凯网络科技有限公司 Apk插件化管理方法
CN103399792A (zh) * 2013-07-24 2013-11-20 佳都新太科技股份有限公司 基于Android的应用插件化实现方案
CN104834555A (zh) * 2015-03-30 2015-08-12 百度在线网络技术(北京)有限公司 调用功能模块的方法、相关装置及装置修复方法
CN106648559A (zh) * 2015-10-28 2017-05-10 广东电网有限责任公司佛山供电局 Android应用插件化开发系统和方法
CN105988852A (zh) * 2015-12-25 2016-10-05 武汉安天信息技术有限责任公司 一种Android程序插件化实现方法及系统
CN105824623B (zh) * 2016-03-14 2019-03-26 广州趣丸网络科技有限公司 一种Android应用热修复的方法和装置
CN106204135A (zh) * 2016-07-08 2016-12-07 苏州随身玩信息技术有限公司 一种模块化广告平台

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105323269A (zh) * 2014-06-17 2016-02-10 中兴通讯股份有限公司 安卓系统中app的更新方法、终端及存储介质

Also Published As

Publication number Publication date
CN107273151A (zh) 2017-10-20

Similar Documents

Publication Publication Date Title
CN107273151B (zh) 一种安全的Android App功能插件化方法
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN108229112B (zh) 一种保护应用程序、应用程序的运行方法以及装置
Karthik et al. Uptane: Securing software updates for automobiles
Mulliner et al. Patchdroid: Scalable third-party security patches for android devices
JP4048382B1 (ja) 情報処理システムおよびプログラム
EP3528149B1 (en) Software repackaging prevention method and device
US20180260199A1 (en) Method and apparatus for intermediate representation of applications
CN103379481B (zh) 一种实现安全防护的方法
US10956577B2 (en) Methods and apparatus for defending against memory-related attacks on devices
CN105786538B (zh) 基于安卓系统的软件升级方法和装置
CN106648724B (zh) 应用程序的热修复方法及终端
CN103577206A (zh) 一种应用软件的安装方法和装置
CN110333868B (zh) 用于生成子应用的安装包的方法和系统
WO2019075493A1 (en) RANDOMIZATION OF BINARY CODE DEVICE STRUCTURE ARRANGEMENT TO ENHANCE SECURITY BY ENHANCED ENTROPY
US10915609B2 (en) Securing applications on mobile devices
CN107330328B (zh) 防御病毒攻击的方法、装置及服务器
US20180129794A1 (en) Method for Protecting Dex File from Decompilation in Android System
US20160197950A1 (en) Detection system and method for statically detecting applications
CN109284585B (zh) 一种脚本加密方法、脚本解密运行方法和相关装置
Laverty et al. Comparative analysis of mobile application development and security models
CN104751049A (zh) 一种应用程序安装方法及移动终端
CN104424423A (zh) 应用程序的权限确定方法和装置
CN112231702A (zh) 应用保护方法、装置、设备及介质
CN104899481A (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: 20220408

Address after: 212000 room 1-616, high tech entrepreneurship service center, Zhenjiang high tech Zone, Zhenjiang City, Jiangsu Province

Patentee after: Zhenjiang Youyi Supply Chain Management Co.,Ltd.

Address before: 710048 No. 5 Jinhua South Road, Shaanxi, Xi'an

Patentee before: XI'AN University OF TECHNOLOGY