CN105843668B - 派生进程驻存方法、派生程序生成方法及相应的装置 - Google Patents
派生进程驻存方法、派生程序生成方法及相应的装置 Download PDFInfo
- Publication number
- CN105843668B CN105843668B CN201610141393.7A CN201610141393A CN105843668B CN 105843668 B CN105843668 B CN 105843668B CN 201610141393 A CN201610141393 A CN 201610141393A CN 105843668 B CN105843668 B CN 105843668B
- Authority
- CN
- China
- Prior art keywords
- program
- packet name
- original
- installation kit
- derivation
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 234
- 230000008569 process Effects 0.000 title claims abstract description 183
- 238000009434 installation Methods 0.000 claims abstract description 105
- 230000004044 response Effects 0.000 claims abstract description 20
- 238000012857 repacking Methods 0.000 claims abstract description 9
- 230000015572 biosynthetic process Effects 0.000 claims abstract description 7
- 238000011022 operating instruction Methods 0.000 claims description 12
- 238000005516 engineering process Methods 0.000 abstract description 25
- 238000013459 approach Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 88
- 230000006854 communication Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 238000009795 derivation Methods 0.000 description 10
- 238000012545 processing Methods 0.000 description 10
- 230000006399 behavior Effects 0.000 description 6
- 238000004590 computer program Methods 0.000 description 6
- 238000010276 construction Methods 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 239000000243 solution Substances 0.000 description 5
- 238000003860 storage Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 230000036961 partial effect Effects 0.000 description 4
- 230000000007 visual effect Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000026676 system process Effects 0.000 description 3
- 238000004458 analytical method Methods 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 238000002513 implantation Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012856 packing Methods 0.000 description 2
- 238000003672 processing method Methods 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 239000013589 supplement Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000007175 bidirectional communication Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000036541 health Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 230000000670 limiting effect Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44568—Immediately runnable code
- G06F9/44578—Preparing or optimising for loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种派生程序生成方法,包括如下步骤:响应于用户操作指令,确定需要生成派生程序的原始程序安装包;将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块;对所述镜像进行重新打包签名形成所述的派生程序并安装之。此外,本发明还公开了一种派生进程驻存方法,以描述所述派生程序生成方法所生成的派生程序的运行控制技术。本发明以更为简单的技术途径实现了同时驻存原始程序及其副本的进程的方案,在遵守应用程序版权控制技术的前提下,破除了安卓系统的技术封锁,改善了用户体验。
Description
技术领域
本发明涉及信息安全技术领域,具体而言,本发明涉及一种派生进程驻存方法及其相应的装置,同时涉及与所述派生进程相应的一种派生程序生成方法及其相应的装置。
背景技术
Android系统已经广泛应用于各种移动终端,其Linux基因使其安全性得到初步保障,但也带来不便。Android对进程的管理,以包名为单位,每个应用程序分配一个唯一性的包名,因而,一个应用程序通常不能在Android中实现双进程运行,也就是说,一个应用程序只能获得一个虚拟机,而不能同时获得两个虚拟机。也因此,现实中移动终端上的应用程序一般是以单账号的形式进行用户交互的,用户如果想要在同一应用程序中登录两个账号,以开发者提供的应用程序固有的功能而言,是无法满足这一需求的。
现有技术中,业内通过Android底层机制,实现了替代方案。具体而言,通过构造自有的孵化器(如命名为newZygote)来接管安卓系统原始的孵化器(Zygote)的服务。应用程序首次启动时,由newZygote按照正常启动逻辑处理,为其按传统方式构建虚拟机;后续再次启动时,newZygote便可为该应用程序的建构副本虚拟机,并且解决其他诸如重定向的问题。这种情况下,能够深层次解决进程副本与原始进程共同驻存的问题,并且,两个进程彼此并行不悖,更优的,系统只需安装一次原始程序,便可实现双开的目的。然而,这种方式显然大大增加了技术实现的难度,尤其是在底层实现的编程问题上,开发者需要考虑到诸如资源重定向、包管理服务欺骗,活动组件鉴权等问题,程序实现难度大,出错机率高。一旦应用程序的版本出现更迭,还容易因应用程序的资源调度设计而引发潜在的问题,导致双开的目的不能得到很好的满足。
发明内容
本发明的一个目的在于针对以上存在的至少一方面不足,提供一种派生程序生成方法及其相应的装置,以简单易实现的方式为相同应用程序的双份开启提供技术实现基础。
本发明的另一目的在于针对以上存在的至少一方面不足,提供一种派生进程驻存方法及其相应的装置,以便使得所述派生进程得以有效地驻存在系统进程列表中得以运行,即使与原始进程同时驻存也能与之并行不悖。
为了实现该目的,本发明采取如下技术方案:
本发明提供的一种派生程序生成方法,包括如下步骤:
响应于用户操作指令,确定需要生成派生程序的原始程序安装包;
将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块;
对所述镜像进行重新打包签名形成所述的派生程序并安装之。
具体的,所述的原始程序安装包存储于系统应用安装目录或者第三方应用安装目录。
进一步,所述重设模块被配置为在运行阶段通过挂钩其所在的派生程序的进程的包名获取函数,向该包名获取函数返回所述的原包名。
根据本发明的一个实施例所揭示,所述包名获取函数为用于返回当前进程所属的包名的函数:getPackageName()。
具体的,所述的镜像中包含有Androidmanifest.xml文件,该文件中所述原始安装包的包名被替换为所述的新包名。
较佳的,所述的镜像中的资源文件中的快捷图标一并被部分修改,以使所述派生程序安装后形成的快捷图标部分地区别于所述原始程序的快捷图标。
本发明提供的一种派生程序生成装置,包括:
确定模块,用于响应于用户操作指令,确定需要生成派生程序的原始程序安装包;
装配模块,用于将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块;
封装模块,用于对所述镜像进行重新打包签名形成所述的派生程序并安装之。
具体的,所述的原始程序安装包存储于系统应用安装目录或者第三方应用安装目录。
进一步,所述重设模块被配置为在运行阶段通过挂钩其所在的派生程序的进程的包名获取函数,向该包名获取函数返回所述的原包名。
根据本发明的一个实施所揭示,所述包名获取函数为用于返回当前进程所属的包名的函数:getPackageName()。
具体的,所述的镜像中包含有Androidmanifest.xml文件,该文件中所述原始安装包的包名被替换为所述的新包名。
较佳的,所述的镜像中的资源文件中的快捷图标一并被部分修改,以使所述派生程序安装后形成的快捷图标部分地区别于所述原始程序的快捷图标。
本发明提供的一种派生进程驻存方法,包括如下步骤:
响应于用户运行指令,运行已安装的根据前一目的任意一种方案所述的派生程序以启动所述的派生进程;
响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数;
由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
具体的,所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件。
较佳的,所述派生进程与所述原始程序运行时的原始进程共同驻存于进程列表中。
进一步,所述用户运行指令是指针对应用程序列表上关联于所述派生程序的快捷图标的触控指令,所述快捷图标与所述原始程序安装后形成的快捷图标存在部分差异。
根据本发明的一种实施例所揭示,所述派生进程获取其自身包名的指令为getPackageName()包名获取函数,当即将调用该包名获取函数时,所述重设模块调用所述的解析函数,从而获得所述原包名作为该包名获取函数的结果返回。
较佳的,所述原始程序及派生程序均安装于系统安装目录或者第三方应用目录中。
具体的,所述原始程序及所述派生程序分别获得一个彼此相互独立的虚拟机。
一种派生进程驻存装置,其特征在于,包括:
启动单元,用于响应于用户运行指令,运行已安装的根据前一目的任意一种方案所述的派生程序以启动所述的派生进程;
调用单元,用于响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数;
返回单元,被配置为由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
具体的,所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件。
较佳的,所述派生进程与所述原始程序运行时的原始进程共同驻存于进程列表中。
进一步,所述用户运行指令是指针对应用程序列表上关联于所述派生程序的快捷图标的触控指令,所述快捷图标与所述原始程序安装后形成的快捷图标存在部分差异。
根据本发明的一种实施例所揭示,所述派生进程获取其自身包名的指令为getPackageName()包名获取函数,当即将调用该包名获取函数时,所述重设模块调用所述的解析函数,从而获得所述原包名作为该包名获取函数的结果返回。
较佳的,所述原始程序及派生程序均安装于系统安装目录或者第三方应用目录中。
具体的,所述原始程序及所述派生程序分别获得一个彼此相互独立的虚拟机。
与现有技术相比较,本发明至少具有如下优点:
一方面,本发明通过对原始程序实施反向工程,获得其镜像文件,在镜像区中对其中的各种文件进行修改,将原包名替换为新包名,并且植入可以用于获得原包名的重设模块,由此而生成的派生程序,当其安装后,便可被区别于原始程序进程而获得新的独立的进程空间,从而得以正常运行。
另一方面,当本发明的所述派生程序被控制运行之后,系统视其新包名不同于原包名,即可为其分配虚拟机,即使原始进程已经驻存于进程列表也不影响其实现。在派生进程运行的过程中,一旦派生进程依照原有程序控制逻辑需要获得获取自身包名,由于该派生进程中包含有在生成派生程序过程中便植入的重设模块,而该重设模块将告诉派生进程相关调用以原包名,这样,派生进程自身的鉴权过程获得通过,只要派生进程的外在运行环境得以健康维护,则派生进程自身的鉴权机制便无碍于其正常运行,使得派生进程与原生进程可以并行不悖地在同一系统中运行,满足用户利用原始程序和派生程序同时登录同一账户体系的两个账户的目的。
进一步,本发明通过构造派生程序来实现应用程序双开的目的,虽然需要既安装原始程序又安装派生程序,但明显比现有技术的简化了技术难度,而构造所述的派生程序的过程对用户基本透明,并且可以快速地完成,因而,基本无碍于用户体验,可见,本发明以较低实现成本解决了Android系统下程序双开的技术问题。
概括而言,本发明的实施,使系统Android系统具备了同时运行任意应用程序及其副本的功能。然而,书不尽言,本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明的一种派生程序生成方法的流程示意图;
图2为本发明的一种派生进程驻存方法的流程示意图;
图3为本发明的一种派生程序生成装置的结构原理图;
图4为本发明的一种派生进程驻存装置的结构原理图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
本技术领域技术人员可以理解,这里所使用的“终端”、“终端设备”既包括无线信号接收器的设备,其仅具备无发射能力的无线信号接收器的设备,又包括接收和发射硬件的设备,其具有能够在双向通信链路上,进行双向通信的接收和发射硬件的设备。这种设备可以包括:蜂窝或其他通信设备,其具有单线路显示器或多线路显示器或没有多线路显示器的蜂窝或其他通信设备;PCS(Personal Communications Service,个人通信系统),其可以组合语音、数据处理、传真和/或数据通信能力;PDA(Personal Digital Assistant,个人数字助理),其可以包括射频接收器、寻呼机、互联网/内联网访问、网络浏览器、记事本、日历和/或GPS(Global Positioning System,全球定位系统)接收器;常规膝上型和/或掌上型计算机或其他设备,其具有和/或包括射频接收器的常规膝上型和/或掌上型计算机或其他设备。这里所使用的“终端”、“终端设备”可以是便携式、可运输、安装在交通工具(航空、海运和/或陆地)中的,或者适合于和/或配置为在本地运行,和/或以分布形式,运行在地球和/或空间的任何其他位置运行。这里所使用的“终端”、“终端设备”还可以是通信终端、上网终端、音乐/视频播放终端,例如可以是PDA、MID(Mobile Internet Device,移动互联网设备)和/或具有音乐/视频播放功能的移动电话,也可以是智能电视、机顶盒等设备。
本领域技术人员应当理解,本发明所称的“应用”、“应用程序”、“应用软件”、“程序”以及采用类似表述的概念,是业内技术人员所公知的相同概念,是指由一系列计算机指令及相关数据资源有机构造的适于电子运行的计算机软件。除非特别指定,这种命名本身不受编程语言种类、级别的限制,也不受其赖以运行的操作系统或平台所限制。理所当然地,此类概念也不受任何形式的终端所限制。
为了说明本发明的实施,本发明将试图结合计算机程序的静态和动态两个方面进行描述,所谓静态方面,是指程序安装包、文件、数据库等存储于媒介的存储对象;所谓动态方面,是指被调入内存中执行的动态对象,包括但不局限于进程、线程、所用到的数据等。鉴于计算机软件技术的这些特点,不应将本发明所述及的各个方法、步骤、子步骤、装置、单元、模块等,孤立地理解为仅静态或仅动态的方面,本领域技术人员对此应当知晓。故而,本领域技术人员应当能够依据本发明有关静态的表述而将其对应到动态的进程活动,或者依据本发明有关动态的进程活动对应到其静态的表现形式,建立起静态与动态两方面的必然性关联,以此为基础来理解本发明。
本领域技术人员应当知晓,本发明可以免经Root提权而在以Android为基础实现的操作系统上实施,提权操作只是Android系统所实施的权限管理控制,因而,本发明也当然地适用于已经Root提权的Android操作系统中实施。
如前所述,Android体系中,由于限定了包名不得重复的规则,因而,同一应用程序只能开启一个进程。本发明中,基于某个已知的应用程序(原始程序),通过为该应用程序制作副本(派生程序),使该应用程序原件及其副本均可以启动自身进程,使两个进程具有同时驻存在内存中的能力。该应用程序原件所占用的进程称为原始进程,而该应用程序副本所占据的进程则为本发明所称的派生进程。由此,本发明可以分解为两大任务,其一是提供用于制作所述应用程序的副本的派生程序生成方法和装置,其二是提供用于运行所述应用程序副本的派生进程驻存方法和装置。以下,本发明将先后详细介绍上述两大任务的具体实现方式:
作为本发明的首要任务所要提供的一种派生程序生成方法,请参阅图1所示,该方法包括如下步骤:
步骤S11、响应于用户操作指令,确定需要生成派生程序的原始程序安装包。
为便于执行本步骤,系统将提供一个控制选项开放给用户进行选定,由用户选定一个指向所述原始程序的标识(如图标),当用户选定一个需要生成派生程序的原始程序之后,便释放所述的用户操作指令,以便实现对该原始程序的确定操作,以便以此为基础启动为该原始程序生成派生程序的后续作业。这种情况更适合于所述原始程序已经完成安装的情况。
另一种方式是提供一个设置开关,当用户将该设置开关切换为某个或某些应用程序生成派生程序时,便释放所述的用户操作指令,启动为所述的某个或某些原始程序生成相对应的派生程序的后续作业。
尚有其余的方式,例如,针对目前的应用商店通常只允许下载未安装到本机的应用程序这一缺陷,在应用商店场景中,允许用户下载已经安装到本机的应用程序,当用户选定该应用程序后,本发明实现在该应用商店中的处理进程便释放所述的用户操作指令,以便启动本发明的后续作业。
可以看出,以上多种方式和场景均可释放所述的用户操作指令,本步骤便可响应于该用户操作指令,确定需要生成派生程序的原始程序安装包。原始程序安装包,对于系统应用程序,通常安装在/system/app这一系统应用安装目录下,而第三方应用程序,通常则安装在/data/app这一第三方应用安装目录下,该些目录存储相应的APK文件,通过读取该APK文件便获得相应的安装包,而获得该安装包,便完成了原始程序的确定过程。
步骤S12、将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块。
在前获得的所述安装包,需要在本步骤中执行解析和处理。具体而言,可以采取如下具体步骤实现之:
步骤S121:将具有原包名的原始安装包反向为安装包镜像:
解析原始程序的原始安装包的手段,也是对原始安装包进行反向的过程。安装包APK文件本质上是利用ZIP压缩技术结合签名技术实现的压缩包,因此,一方面可以通过解压技术释放其内部文件,另一方面还可通过Apktool之类的工具软件获取其内部文件(在这种情况下其代码文件会被反向为.smali文件)。本领域技术人员均能娴熟地利用这些公知技术在一个给定目录中对原安装包进行处理,从而通过内存操作(非文件操作)的方式来获得其中的内部文件。反向所得的这些文件,也就构成所述派生程序的派生安装包的镜像。
Android安装包的内部文件的结构性规范,参阅下表所示:
表1 APK文件内部的文件结构
本发明通过解析所述原始程序的安装包,可以获得与表中所附的目录和文件相对应的反向后文件,在此基础上,可以对相关文件进行后续处理。当然,诚如前述,当反向后的文件格式为.smali时,如对代码文件进行修改,应是在.smali文件的基础上进行的。被修改后的镜像一旦重构为新的安装包,仍然会还原成符合上述规范的结构。
众所周知的,一个APK安装包具有唯一一个包名,该包名出现在安装包的多处,较为直观的,可以直接从其配置文件即Androidmanifest.xml的声明项中找到。本领域技术人员均知晓此一原理,恕不赘述。
步骤S122:为该镜像配置异于原始安装包的新包名:
安装包结构所列的Androidmanifest.xml文件,是安装包中较为重要的全局配置文件,其负责向系统注册Android系统的四大组件,以及向系统申请权限等,同时,该文件还声明了其自身包名,具体而言,其中的声明代码以如下的形式存在:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"android:sharedUserId="android.uid.system"
package="com.android.oldpackage">
除此之外,依照Android的规范,安装包的文件名同于其包名的标识符,也即,如具有上述声明内容的安装包的文件名适宜命名为:oldpackage.apk。
鉴于上述的事实,本步骤从所述的镜像中访问所述的配置文件,修改其原包名为新包名,如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"android:sharedUserId="android.uid.system"
package="com.android.newpackage">
同理,作为附带手段,可以在后续将由该镜像生成的派生安装包的文件名修改为对应的名称:newpackage.apk。
步骤S123:向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块:
由于原始程序通常具有自我防伪的功能,内植了用于确定自身包名是否被修改的相关功能模块,一旦得以运行并获知当前包名并非原包名时,便自动终止或退出运行,因此,除修改包名之外,本步骤中,还向该镜像植入一重设模块。通常,调用Android的上下文context类中的getPackageName()用于获取当前进程的包名。
该重设模块可以是.so代码段,以注入的方式随派生程序进程启动,以HOOK技术为手段,拦截需要征询其自身包名的指令,也即所述的getPackageName()函数,转而执行自身的代码,使得最终由该重设模块告知派生程序的进程一个伪造的事实,让该派生进程获知并误以为其自身包名为所述的原包名,而非所述的新包名,从而完成其内部鉴权过程,使派生进程得以顺利运行。
这里所称的HOOK技术,通常也称为挂钩技术,利用钩子函数对相关调用指令的入口点进行监视,截获此一调用指令,转向执行相应的钩子函数,因此,所述的重设模块实质上也是一个钩子函数。所述的钩子函数当然可以将数据预存在特定位置,也可以通过与其他进程通信来获取相关数据,因而,所述的原包名,在本发明中可以预先被存储在一个表格中,建立起其与原包名之间的对应关系,这样重设模块运行时便可以直接从该表格中查询获得原包名。该表格也可交由某安全程序维护,而由重设模块在需要获知原包名时,提供派生程序的新包名,调用该安全程序的接口,由该安全程序依据新包名而向重设模块返回原包名而解决上述的问题。
当然,从形式上,所述重设模块可以是一体化地,集成了控制和依据所述新包名解析为原包名的功能的;也可以是将其控制功能独立,而将其解析功能独立为一个解析函数来调用。后一情况下,所述的解析函数便可置于前文的安全程序中,当然也可仍存在于派生程序中。
这里需要补充的是:术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子hook函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。
当前述的各个具体步骤得以运行,便完成了对所述原始程序的镜像的改造,从而使其具备了当其成为派生程序后与原始程序共同驻存的能力。
需要指出的是,应用程序的快捷图标一般保存在所述Res目录中,为了使派生程序和应用程序具有适度的视觉区分作用,本步骤中,可以一并修改原始安装包中的快捷图标,使其一部分平面区域异于原图标,而另一部分平面区域同于原图标;或者使两个图标呈现色域上的差异等,总之使派生程序所用快捷图标和原始程序所用的快捷图标之间呈现部分区别,以便利于用户进行视角鉴别。
步骤S13、对所述镜像进行重新打包签名形成所述的派生程序并安装之。
准备好上述的包名处理后,本发明进一步将上述镜像进行重新打包,打包后再行签名,即完成所述加壳安装包的构造。作为附带措施,如果重新打包后的派生安装包的文件名不同于所述的新包名(视打包工具而定),则将派生程序安装包的文件名修改为与其新包名标识相匹配的新文件名,如前述的newpackage.apk。
如前所述,本发明的实施场景之一,未获Root权限,因此,这种场景中,并不能通过本发明实现静默安装。这种情况下,本发明优先通过调用系统安装器,以启动安装界面,指导用户完成该派生程序的安装。反之,如已获Root权限,则可径行安装。
安装后,本发明的派生程序便存在于应用程序列表中,用户可以同时开启所述的原始程序和派生程序,两者各自的进程可以同时驻存在系统的内存中,并行不悖。
作为本发明的另一任务所要提供的一种派生进程驻存方法,其以前述的派生程序为基础,请参阅图2所示,该方法包括如下步骤:
步骤S21、响应于用户运行指令,运行已安装的根据本发明所述的派生程序生成方法的任意实例所构造的派生程序以启动所述的派生进程;
如前所述,所述派生程序安装后,其快捷图标(按照前述,该快捷图标可以在形状上与原始程序安装后形成的快捷图标存在部分差异)便可以出现在应用列表中,而无论其是否安装在系统应用安装目录还是第三方应用安装目录,因而,用户可以对其施加触控操作,从而产生用户运行指令,导致执行本步骤,进而便开始启动该派生程序,依照Android虚拟机机制原来,经由AMS、PMS向Zygote申请孵化虚拟机,构造进程空间,以便形成相应的派生进程,使派生程序在该虚拟机中运行。这种情况下,不必理会所述的原始程序的进程是否已经拥有一个独立的虚拟机,原始进程与派生进程各自将获得一个彼此相互独立的虚拟机进行运行。
步骤S22、响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数;
如前所述,派生程序的开发者一般都会预置获取自身包名的验证指令,这种情况下,一旦派生进程得以运行,便会唤起其验证指令。当然,验证指令也可能出现在派生进程运行过程中的任何阶段。由于所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件,因此,需要依赖于所述的重设模块进行后续处理。不管如何,一旦派生进程得以运行,当其即将调用getPackageName()这一包名获取函数以其征询自身包名时,将优先唤起所述预置的重设模块,最终将由该重设模块与所述的解析函数相配合,返回当前进程(派生进程)的包名为所述的原包名的结果。
步骤S23、由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
所述的解析函数,其在本质上是对所述重设模块的功能的灵活变通,一方面,可以将该解析函数与重设模块以代码的形式一体化存在于所述原始程序中,在派生进程运行过程中随时便捷调用;另一方面,则可以将其实现于其他程序的后台进程中,通过预规范的接口由重设模块进行调用。所述解析函数的功能,正是为了集中所述重设模块的欺骗功能,也即是由该解析函数依据当前进程的新包名,去预存的数据中查询其对应的原包名,继而在重设模块与解析函数的配合下,向派生程序进程原请求指令逻辑返回当前包名为所述原包名(如前述的oldPackage)的欺骗信息,令派生程序进程信以为真,从而实现欺骗的目的,避开派生程序既有的鉴权逻辑。据此,派生进程便具备了与所述原始进程共同运行的能力,一旦原始进程和派生进程同时运行,可以发现,两者将同时驻存于系统的进程列表中。
由此可见,当派生程序安装并被运行之后,依靠其自身预置的技术能力,运行所述重设模块,便可使其自身具备驻存于系统进程列表的能力,当所述原始进程同时存在于内存时,两个进程也能并行不悖地各自完成自身工作。
一个典型的应用场景中,用户可以同时运行两个诸如“微信”这样的应用程序,两个“微信”进程分别用于登录不同的账号,并且并行不悖地与外界进行通信,甚至两个不同账号之间也可直接进行通信。
同理,基于计算机软件的模块化思维,也为呼应前述两大任务所提出的方法,本发明还提供了两种装置,将分别在下方揭示。
本发明提供的一种派生程序生成装置,请参阅图3所示,该装置包括确定模块11、装配模块12以及封装模块13,各模块所具备的功能如下所述:
所述的确定模块11,用于响应于用户操作指令,确定需要生成派生程序的原始程序安装包。
为便于运行本确定模块11,系统将提供一个控制选项开放给用户进行选定,由用户选定一个指向所述原始程序的标识(如图标),当用户选定一个需要生成派生程序的原始程序之后,便释放所述的用户操作指令,以便实现对该原始程序的确定操作,以便以此为基础启动为该原始程序生成派生程序的后续作业。这种情况更适合于所述原始程序已经完成安装的情况。
另一种方式是提供一个设置开关,当用户将该设置开关切换为某个或某些应用程序生成派生程序时,便释放所述的用户操作指令,启动为所述的某个或某些原始程序生成相对应的派生程序的后续作业。
尚有其余的方式,例如,针对目前的应用商店通常只允许下载未安装到本机的应用程序这一缺陷,在应用商店场景中,允许用户下载已经安装到本机的应用程序,当用户选定该应用程序后,本发明实现在该应用商店中的处理进程便释放所述的用户操作指令,以便启动本发明的后续作业。
可以看出,以上多种方式和场景均可释放所述的用户操作指令,确定模块11便可响应于该用户操作指令,确定需要生成派生程序的原始程序安装包。原始程序安装包,对于系统应用程序,通常安装在/system/app这一系统应用安装目录下,而第三方应用程序,通常则安装在/data/app这一第三方应用安装目录下,该些目录存储相应的APK文件,通过读取该APK文件便获得相应的安装包,而获得该安装包,便完成了原始程序的确定过程。
所述的装配模块12,用于将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块。
在前获得的所述安装包,需要在装配模块中执行解析和处理。具体而言,可以采取如下具体步骤实现之:
步骤S121:将具有原包名的原始安装包反向为安装包镜像:
解析原始程序的原始安装包的手段,也是对原始安装包进行反向的过程。安装包APK文件本质上是利用ZIP压缩技术结合签名技术实现的压缩包,因此,一方面可以通过解压技术释放其内部文件,另一方面还可通过Apktool之类的工具软件获取其内部文件(在这种情况下其代码文件会被反向为.smali文件)。本领域技术人员均能娴熟地利用这些公知技术在一个给定目录中对原安装包进行处理,从而通过内存操作(非文件操作)的方式来获得其中的内部文件。反向所得的这些文件,也就构成所述派生程序的派生安装包的镜像。
Android安装包的内部文件的结构性规范,参阅下表所示:
表1 APK文件内部的文件结构
本发明通过解析所述原始程序的安装包,可以获得与表中所附的目录和文件相对应的反向后文件,在此基础上,可以对相关文件进行后续处理。当然,诚如前述,当反向后的文件格式为.smali时,如对代码文件进行修改,应是在.smali文件的基础上进行的。被修改后的镜像一旦重构为新的安装包,仍然会还原成符合上述规范的结构。
众所周知的,一个APK安装包具有唯一一个包名,该包名出现在安装包的多处,较为直观的,可以直接从其配置文件即Androidmanifes t.xml的声明项中找到。本领域技术人员均知晓此一原理,恕不赘述。
步骤S122:为该镜像配置异于原始安装包的新包名:
安装包结构所列的Androidmanifest.xml文件,是安装包中较为重要的全局配置文件,其负责向系统注册Android系统的四大组件,以及向系统申请权限等,同时,该文件还声明了其自身包名,具体而言,其中的声明代码以如下的形式存在:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"android:sharedUserId="android.uid.system"
package="com.android.oldpackage">
除此之外,依照Android的规范,安装包的文件名同于其包名的标识符,也即,如具有上述声明内容的安装包的文件名适宜命名为:oldpackage.apk。
鉴于上述的事实,本步骤从所述的镜像中访问所述的配置文件,修改其原包名为新包名,如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"android:sharedUserId="android.uid.system"
package="com.android.newpackage">
同理,作为附带手段,可以在后续将由该镜像生成的派生安装包的文件名修改为对应的名称:newpackage.apk。
步骤S123:向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块:
由于原始程序通常具有自我防伪的功能,内植了用于确定自身包名是否被修改的相关功能模块,一旦得以运行并获知当前包名并非原包名时,便自动终止或退出运行,因此,除修改包名之外,本步骤中,还向该镜像植入一重设模块。通常,调用Android的上下文context类中的getPackageName()用于获取当前进程的包名。
该重设模块可以是.so代码段,以注入的方式随派生程序进程启动,以HOOK技术为手段,拦截需要征询其自身包名的指令,也即所述的getPackageName()函数,转而执行自身的代码,使得最终由该重设模块告知派生程序的进程一个伪造的事实,让该派生进程获知并误以为其自身包名为所述的原包名,而非所述的新包名,从而完成其内部鉴权过程,使派生进程得以顺利运行。
这里所称的HOOK技术,通常也称为挂钩技术,利用钩子函数对相关调用指令的入口点进行监视,截获此一调用指令,转向执行相应的钩子函数,因此,所述的重设模块实质上也是一个钩子函数。所述的钩子函数当然可以将数据预存在特定位置,也可以通过与其他进程通信来获取相关数据,因而,所述的原包名,在本发明中可以预先被存储在一个表格中,建立起其与原包名之间的对应关系,这样重设模块运行时便可以直接从该表格中查询获得原包名。该表格也可交由某安全程序维护,而由重设模块在需要获知原包名时,提供派生程序的新包名,调用该安全程序的接口,由该安全程序依据新包名而向重设模块返回原包名而解决上述的问题。
当然,从形式上,所述重设模块可以是一体化地,集成了控制和依据所述新包名解析为原包名的功能的;也可以是将其控制功能独立,而将其解析功能独立为一个解析函数来调用。后一情况下,所述的解析函数便可置于前文的安全程序中,当然也可仍存在于派生程序中。
这里需要补充的是:术语“钩子”涵盖了用于通过拦截在软件组件之间传递的函数调用、消息、或事件来改变或增加操作系统、应用程序、或其他软件组件的行为的技术。而处理这种被拦截的函数调用、事件或消息的代码就被称为钩子hook函数。钩子通常用于各种目标,包括对功能进行调试和对功能进行扩展。其示例可以包括在键盘或鼠标事件传递到应用程序之前拦截它们,或者拦截系统调用(system call)、或者系统函数行为、函数执行结果等,以监视或修改应用程序或其他组件的功能等等。
当前述的各个具体步骤得以运行,便完成了对所述原始程序的镜像的改造,从而使其具备了当其成为派生程序后与原始程序共同驻存的能力。
需要指出的是,应用程序的快捷图标一般保存在所述Res目录中,为了使派生程序和应用程序具有适度的视觉区分作用,本装配模块12可以一并修改原始安装包中的快捷图标,使其一部分平面区域异于原图标,而另一部分平面区域同于原图标;或者使两个图标呈现色域上的差异等,总之使派生程序所用快捷图标和原始程序所用的快捷图标之间呈现部分区别,以便利于用户进行视角鉴别。
所述的封装模块13,用于对所述镜像进行重新打包签名形成所述的派生程序并安装之。
准备好上述的包名处理后,本发明进一步将上述镜像进行重新打包,打包后再行签名,即完成所述加壳安装包的构造。作为附带措施,如果重新打包后的派生安装包的文件名不同于所述的新包名(视打包工具而定),则将派生程序安装包的文件名修改为与其新包名标识相匹配的新文件名,如前述的newpackage.apk。
如前所述,本发明的实施场景之一,未获Root权限,因此,这种场景中,并不能通过本发明实现静默安装。这种情况下,本发明优先通过调用系统安装器,以启动安装界面,指导用户完成该派生程序的安装。反之,如已获Root权限,则可径行安装。
安装后,本发明的派生程序便存在于应用程序列表中,用户可以同时开启所述的原始程序和派生程序,两者各自的进程可以同时驻存在系统的内存中,并行不悖。
作为本发明的另一任务所要提供的一种派生进程驻存装置,其以前述的派生程序为基础,请参阅图4所示,该装置包括启动单元21、调用单元22以及返回单元23,各单元所实现的功能揭示如下:
所述的启动单元21,用于响应于用户运行指令,运行已安装的根据本发明所述的派生程序生成方法或装置的任意实例所构造的派生程序以启动所述的派生进程。
如前所述,所述派生程序安装后,其快捷图标(按照前述,该快捷图标可以在形状上与原始程序安装后形成的快捷图标存在部分差异)便可以出现在应用列表中,而无论其是否安装在系统应用安装目录还是第三方应用安装目录,因而,用户可以对其施加触控操作,从而产生用户运行指令,导致动行本启动单元,进而便开始启动该派生程序,依照Android虚拟机机制原来,经由AMS、PMS向Zygote申请孵化虚拟机,构造进程空间,以便形成相应的派生进程,使派生程序在该虚拟机中运行。这种情况下,不必理会所述的原始程序的进程是否已经拥有一个独立的虚拟机,原始进程与派生进程各自将获得一个彼此相互独立的虚拟机进行运行。
所述的调用单元22,用于响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数。
如前所述,派生程序的开发者一般都会预置获取自身包名的验证指令,这种情况下,一旦派生进程得以运行,便会唤起其验证指令。当然,验证指令也可能出现在派生进程运行过程中的任何阶段。由于所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件,因此,需要依赖于所述的重设模块进行后续处理。不管如何,一旦派生进程得以运行,当其即将调用getPackageName()这一包名获取函数以其征询自身包名时,将优先唤起所述预置的重设模块,最终将由该重设模块与所述的解析函数相配合,返回当前进程(派生进程)的包名为所述的原包名的结果。
所述的返回单元,被配置为由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
所述的解析函数,其在本质上是对所述重设模块的功能的灵活变通,一方面,可以将该解析函数与重设模块以代码的形式一体化存在于所述原始程序中,在派生进程运行过程中随时便捷调用;另一方面,则可以将其实现于其他程序的后台进程中,通过预规范的接口由重设模块进行调用。所述解析函数的功能,正是为了集中所述重设模块的欺骗功能,也即是由该解析函数依据当前进程的新包名,去预存的数据中查询其对应的原包名,继而在重设模块与解析函数的配合下,向派生程序进程原请求指令逻辑返回当前包名为所述原包名(如前述的oldPackage)的欺骗信息,令派生程序进程信以为真,从而实现欺骗的目的,避开派生程序既有的鉴权逻辑。据此,派生进程便具备了与所述原始进程共同运行的能力,一旦原始进程和派生进程同时运行,可以发现,两者将同时驻存于系统的进程列表中。
由此可见,当派生程序安装并被运行之后,依靠其自身预置的技术能力,运行所述重设模块,便可使其自身具备驻存于系统进程列表的能力,当所述原始进程同时存在于内存时,两个进程也能并行不悖地各自完成自身工作。
一个典型的应用场景中,用户可以同时运行两个诸如“微信”这样的应用程序,两个“微信”进程分别用于登录不同的账号,并且并行不悖地与外界进行通信,甚至两个不同账号之间也可直接进行通信。
综上所述,本发明以更为简单的技术途径实现了同时驻存原始程序及其副本的进程的方案,在遵守应用程序版权控制技术的前提下,破除了安卓系统的技术封锁。
本技术领域技术人员可以理解,本发明包括涉及用于执行本申请中所述操作中的一项或多项的设备。这些设备可以为所需的目的而专门设计和制造,或者也可以包括通用计算机中的已知设备。这些设备具有存储在其内的计算机程序,这些计算机程序选择性地激活或重构。这样的计算机程序可以被存储在设备(例如,计算机)可读介质中或者存储在适于存储电子指令并分别耦联到总线的任何类型的介质中,所述计算机可读介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随即存储器)、EPROM(Erasable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically ErasableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,可读介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。
本技术领域技术人员可以理解,可以用计算机程序指令来实现这些结构图和/或框图和/或流图中的每个框以及这些结构图和/或框图和/或流图中的框的组合。本技术领域技术人员可以理解,可以将这些计算机程序指令提供给通用计算机、专业计算机或其他可编程数据处理方法的处理器来实现,从而通过计算机或其他可编程数据处理方法的处理器来执行本发明公开的结构图和/或框图和/或流图的框或多个框中指定的方案。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (26)
1.一种派生程序生成方法,其特征在于,包括如下步骤:
响应于用户操作指令,确定需要生成派生程序的原始程序安装包;
将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块;
对所述镜像进行重新打包签名形成所述的派生程序并安装之。
2.根据权利要求1所述的方法,其特征在于,所述的原始程序安装包存储于系统应用安装目录或者第三方应用安装目录。
3.根据权利要求2所述的方法,其特征在于,所述重设模块被配置为在运行阶段通过挂钩其所在的派生程序的进程的包名获取函数,向该包名获取函数返回所述的原包名。
4.根据权利要求3所述的方法,其特征在于,所述包名获取函数为用于返回当前进程所属的包名的函数:getPackageName()。
5.根据权利要求1所述的方法,其特征在于,所述的镜像中包含有Androidmanifest.xml文件,该文件中所述原始安装包的包名被替换为所述的新包名。
6.根据权利要求1所述的方法,其特征在于,所述的镜像中的资源文件中的快捷图标一并被部分修改,以使所述派生程序安装后形成的快捷图标部分地区别于所述原始程序的快捷图标。
7.一种派生程序生成装置,其特征在于,包括:
确定模块,用于响应于用户操作指令,确定需要生成派生程序的原始程序安装包;
装配模块,用于将具有原包名的原始安装包反向为安装包镜像,为该镜像配置异于原始安装包的新包名,向该镜像中植入用于当派生程序的进程征询时告知该进程其自身所属包名为所述的原包名的重设模块;
封装模块,用于对所述镜像进行重新打包签名形成所述的派生程序并安装之。
8.根据权利要求7所述的装置,其特征在于,所述的原始程序安装包存储于系统应用安装目录或者第三方应用安装目录。
9.根据权利要求8所述的装置,其特征在于,所述重设模块被配置为在运行阶段通过挂钩其所在的派生程序的进程的包名获取函数,向该包名获取函数返回所述的原包名。
10.根据权利要求9所述的装置,其特征在于,所述包名获取函数为用于返回当前进程所属的包名的函数:getPackageName()。
11.根据权利要求7所述的装置,其特征在于,所述的镜像中包含有Androidmanifest.xml文件,该文件中所述原始安装包的包名被替换为所述的新包名。
12.根据权利要求7所述的装置,其特征在于,所述的镜像中的资源文件中的快捷图标一并被部分修改,以使所述派生程序安装后形成的快捷图标部分地区别于所述原始程序的快捷图标。
13.一种派生进程驻存方法,其特征在于,包括如下步骤:
响应于用户运行指令,运行已安装的根据权利要求1至6任意一项所述的派生程序以启动所述的派生进程;
响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数;
由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
14.根据权利要求13所述的方法,其特征在于,所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件。
15.根据权利要求13所述的方法,其特征在于,所述派生进程与所述原始程序运行时的原始进程共同驻存于进程列表中。
16.根据权利要求13所述的方法,其特征在于,所述用户运行指令是指针对应用程序列表上关联于所述派生程序的快捷图标的触控指令,所述快捷图标与所述原始程序安装后形成的快捷图标存在部分差异。
17.根据权利要求13所述的方法,其特征在于,所述派生进程获取其自身包名的指令为getPackageName()包名获取函数,当即将调用该包名获取函数时,所述重设模块调用所述的解析函数,从而获得所述原包名作为该包名获取函数的结果返回。
18.根据权利要求13所述的方法,其特征在于,所述原始程序及派生程序均安装于系统安装目录或者第三方应用目录中。
19.根据权利要求13所述的方法,其特征在于,所述原始程序及所述派生程序分别获得一个彼此相互独立的虚拟机。
20.一种派生进程驻存装置,其特征在于,包括:
启动单元,用于响应于用户运行指令,运行已安装的根据权利要求7至12任意一项所述的派生程序以启动所述的派生进程;
调用单元,用于响应于所述派生进程获取其自身包名的请求指令,接受其预置的重设模块的调用而执行用于重新确定派生进程的包名的解析函数;
返回单元,被配置为由该解析函数向重设模块传递与所述派生程序相对应的原始程序的原包名以返回给所述的请求指令以确保派生进程得以运行。
21.根据权利要求20所述的装置,其特征在于,所述派生程序具有的新包名不同于所述原始程序所具有的原包名,而所述派生程序安装包完全包含所述原始程序安装包的部分文件。
22.根据权利要求20所述的装置,其特征在于,所述派生进程与所述原始程序运行时的原始进程共同驻存于进程列表中。
23.根据权利要求20所述的装置,其特征在于,所述用户运行指令是指针对应用程序列表上关联于所述派生程序的快捷图标的触控指令,所述快捷图标与所述原始程序安装后形成的快捷图标存在部分差异。
24.根据权利要求20所述的装置,其特征在于,所述派生进程获取其自身包名的指令为getPackageName()包名获取函数,当即将调用该包名获取函数时,所述重设模块调用所述的解析函数,从而获得所述原包名作为该包名获取函数的结果返回。
25.根据权利要求20所述的装置,其特征在于,所述原始程序及派生程序均安装于系统安装目录或者第三方应用目录中。
26.根据权利要求20所述的装置,其特征在于,所述原始程序及所述派生程序分别获得一个彼此相互独立的虚拟机。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610141393.7A CN105843668B (zh) | 2016-03-11 | 2016-03-11 | 派生进程驻存方法、派生程序生成方法及相应的装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610141393.7A CN105843668B (zh) | 2016-03-11 | 2016-03-11 | 派生进程驻存方法、派生程序生成方法及相应的装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105843668A CN105843668A (zh) | 2016-08-10 |
CN105843668B true CN105843668B (zh) | 2019-11-15 |
Family
ID=56587097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610141393.7A Active CN105843668B (zh) | 2016-03-11 | 2016-03-11 | 派生进程驻存方法、派生程序生成方法及相应的装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105843668B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106650324A (zh) * | 2016-10-10 | 2017-05-10 | 广东欧珀移动通信有限公司 | 应用程序的权限管理方法、装置及移动终端 |
CN106650402B (zh) * | 2016-10-10 | 2019-07-12 | Oppo广东移动通信有限公司 | 应用程序的权限配置方法、装置及移动终端 |
CN106775888A (zh) * | 2016-12-28 | 2017-05-31 | 北京奇虎科技有限公司 | 基于一个Service启动多个Service的方法和装置 |
CN106775951A (zh) * | 2016-12-29 | 2017-05-31 | 北京奇虎科技有限公司 | 一种安卓应用的运行管理方法和装置 |
CN106648937B (zh) * | 2016-12-29 | 2020-02-28 | 北京奇虎科技有限公司 | 一种安卓应用的广播代理方法和装置 |
CN106657358A (zh) * | 2016-12-29 | 2017-05-10 | 北京奇虎科技有限公司 | 一种安卓应用的服务代理方法和装置 |
CN106933634A (zh) * | 2017-03-09 | 2017-07-07 | 北京奇虎科技有限公司 | 安卓应用的安装方法、装置和电子设备 |
CN107038063A (zh) * | 2017-04-18 | 2017-08-11 | 北京奇虎科技有限公司 | 在终端设备上启动应用分身的方法及装置 |
CN107247622A (zh) * | 2017-05-31 | 2017-10-13 | 湖南机友科技有限公司 | 一种多开应用的配置方法及装置 |
CN107291512B (zh) * | 2017-06-30 | 2020-07-14 | 珠海市魅族科技有限公司 | 应用程序多开方法、装置、终端设备及存储介质 |
CN109388435A (zh) * | 2017-08-04 | 2019-02-26 | 北京多点在线科技有限公司 | 实现app同时多次开启操作的方法和装置 |
CN107665302B (zh) * | 2017-09-26 | 2022-01-11 | 惠州Tcl移动通信有限公司 | 一种Android应用多开实现方法、移动终端及存储介质 |
CN109344605B (zh) * | 2018-09-10 | 2022-04-05 | 惠尔丰(中国)信息系统有限公司 | 一种智能pos机的权限控制方法及其控制系统 |
CN111414256B (zh) * | 2020-03-27 | 2022-10-04 | 中国人民解放军国防科技大学 | 基于麒麟移动操作系统的应用程序进程派生方法、系统及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8887152B1 (en) * | 2011-11-04 | 2014-11-11 | Trend Micro, Inc. | Android application virtual environment |
CN104462880A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序加壳配置方法与装置 |
CN104462879A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序免Root运行控制方法与装置 |
CN105095746A (zh) * | 2015-07-02 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序启动鉴权方法及装置 |
-
2016
- 2016-03-11 CN CN201610141393.7A patent/CN105843668B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8887152B1 (en) * | 2011-11-04 | 2014-11-11 | Trend Micro, Inc. | Android application virtual environment |
CN104462880A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序加壳配置方法与装置 |
CN104462879A (zh) * | 2014-11-28 | 2015-03-25 | 北京奇虎科技有限公司 | 应用程序免Root运行控制方法与装置 |
CN105095746A (zh) * | 2015-07-02 | 2015-11-25 | 北京奇虎科技有限公司 | 应用程序启动鉴权方法及装置 |
Non-Patent Citations (1)
Title |
---|
APK包名的修改,达到同时安装多个相同APK程序;佚名;《https://my.oschina.net/u/183622/blog/127888》;20130506;说明书第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105843668A (zh) | 2016-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105843668B (zh) | 派生进程驻存方法、派生程序生成方法及相应的装置 | |
EP2798494B1 (en) | Virtual channel for embedded process communication | |
US11614926B2 (en) | Consensus mechanism deployment method and apparatus | |
US20190034460A1 (en) | Co-locating Microservice Persistence Containers within Tenant-Specific Database | |
WO2011008588A1 (en) | System for electronic device monitoring | |
US8799355B2 (en) | Client server application manager | |
CN113597751B (zh) | 用于模型映射和在网络设备上动态使能外部模型的方法和装置 | |
CN105320503B (zh) | 中间件插件框架设计系统及方法 | |
CN105843653A (zh) | 一种安全应用配置方法及装置 | |
CN103514395B (zh) | 插件权限控制方法及系统 | |
CN105631312A (zh) | 恶意程序的处理方法及系统 | |
EP2341457B1 (en) | System and method for loading application classes | |
CN104699536B (zh) | 活动组件进程空间分配方法及其相应的装置 | |
CN115858481A (zh) | 分布式服务器-客户端环境中的文档同步的方法和系统 | |
JP2008130033A (ja) | サービス連携方法 | |
CN105242910B (zh) | 基于中间件插件框架的插件状态控制方法及客户端 | |
CN113821335A (zh) | 一种数据处理的方法、装置和存储介质 | |
CN111325552A (zh) | 数据处理方法及装置、电子设备、存储介质 | |
KR101755146B1 (ko) | 복합 제품, 특히 자동차의 제조 방법 | |
US9275233B1 (en) | Generation and use of a modified protected file | |
CN107894886B (zh) | 一种运行代码的方法、装置及终端设备 | |
US20230412694A1 (en) | Communication system for micro-frontends of a web application | |
CN105787359B (zh) | 进程守护方法和装置 | |
US11853727B2 (en) | Group control and management among electronic devices | |
US8280950B2 (en) | Automatic client-server code generator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into 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: 20191118 Address after: 100041, room 2, building 2, building 17, No. 201 west well road, Beijing, Shijingshan District Patentee after: Beijing Shijie Xinghui Science and Technology Co., Ltd. Address before: 100088 Beijing city Xicheng District xinjiekouwai Street 28, block D room 112 (Desheng Park) Co-patentee before: Qizhi Software (Beijing) Co., Ltd. Patentee before: Beijing Qihu Technology Co., Ltd. |