CN108304230B - 调整应用属性的实现方法、装置及可读存储介质 - Google Patents

调整应用属性的实现方法、装置及可读存储介质 Download PDF

Info

Publication number
CN108304230B
CN108304230B CN201810102278.8A CN201810102278A CN108304230B CN 108304230 B CN108304230 B CN 108304230B CN 201810102278 A CN201810102278 A CN 201810102278A CN 108304230 B CN108304230 B CN 108304230B
Authority
CN
China
Prior art keywords
application program
external
library file
processed
program
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
CN201810102278.8A
Other languages
English (en)
Other versions
CN108304230A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201810102278.8A priority Critical patent/CN108304230B/zh
Publication of CN108304230A publication Critical patent/CN108304230A/zh
Application granted granted Critical
Publication of CN108304230B publication Critical patent/CN108304230B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • 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/44557Code layout in executable memory
    • 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/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation

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

本申请提供了一种调整应用属性的实现方法、装置及可读取存储介质,通过直接引用原库文件编译得到该外部库文件,避免了人工输入代码造成错误,而影响外部库文件的正常运行,提高了应用属性调整效率,并通过Mono虚拟机将该外部库文件加载到原库文件所在的主应用程序域后,执行外部库文件的入口函数,运行该外部库文件,还能够通过日志文件得知所注入的外部库文件是否能够正常运行,以便在确定外部库文件运行正常后,使Mono虚拟机及时释放目标线程,避免了系统崩溃。

Description

调整应用属性的实现方法、装置及可读存储介质
技术领域
本申请主要涉及性能优化应用领域,更具体地说是涉及一种调整应用属性的实现方法、装置及可读存储介质。
背景技术
如今,随着计算机通信技术的快速发展,在客户端上能够运行各种各样类型的应用,比如网页(web)应用、非开源软件应用等,在实际应用中,客户端运行某类型应用时,通常需要调用动态链接库DLL(Dynamic Link Library,简称库)文件所存储的信息,从加载运行应用的运行环境及宿主程序,实现应用的各种功能。
可见,库文件决定了应用的系统功能或逻辑,在应用开发过程中,通常需要技术人员编写各种库文件,从而利用库文件之间的相互调用,来实现应用的特定功能。
基于此,当需要改善应用属性,目前通常是由技术人员重新对应用的安装文件进行编写,过程复杂,工作量大且容易出现编写代码错误的情况,导致应用属性调整效率非常低。
发明内容
有鉴于此,本申请提供了一种调整应用属性的实现方法、装置及可读取存储介质,通过引用待处理应用程序原有库文件,编译得到所需的外部库文件,并在待处理应用程序运行过程中,通过Mono虚拟机将外部库文件加载到待处理应用程序进程,实现了对待处理应用程序原有功能或逻辑的在线调整,提高了应用属性调整效率。
为了实现上述目的,本申请提供了以下技术方案:
本申请实施例提供了一种调整应用属性的实现方法,所述方法包括:
引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件;
在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
将所述外部程序集加载到Mono虚拟机的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
本申请实施例还提供了一种调整应用属性的实现装置,所述装置包括:
编译模块,用于引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件;
映射处理模块,用于在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
加载模块,用于将所述外部程序集加载到所述待处理应用程序的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
本申请实施例还提供了一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如上述的调整应用属性的实现方法的各个步骤。
基于上述技术方案,在本申请实施例通过直接引用原库文件编译得到该外部库文件,避免了人工输入代码造成错误,而影响外部库文件的正常运行,提高了应用属性调整效率,并通过Mono虚拟机将该外部库文件加载到原库文件所在的主应用程序域后,执行外部库文件的入口函数,运行该外部库文件,还能够通过日志文件得知所注入的外部库文件是否能够正常运行,以便在确定外部库文件运行正常后,使Mono虚拟机及时释放目标线程,避免了系统崩溃。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本实施例提供的一种测试系统的结构图;
图2为本实施例提供的一种Mono虚拟机的组成示意图;
图3为本实施例提供的一种调整应用属性的实现方法的流程图;
图4为本实施例提供的另一种调整应用属性的实现方法的流程图;
图5a为本实施例提供的一种原库文件显示界面示意图;
图5b为本实施例提供的一种编译外部库文件的界面示意图;
图5c为本实施例提供的另一种Mono虚拟机的组成结构图;
图6为本实施例提供的又一种调整应用属性的实现方法的流程图;
图7a为本实施例提供的一种日志文件输出界面示意图;
图7b为本实施例提供的一种协议名展示图;
图7c为本实施例提供的一种SR客户端的显示界面示意图;
图8为本实施例提供的一种调整应用属性的实现装置的结构图;
图9为本实施例提供的另一种调整应用属性的实现装置的结构图;
图10为本实施例提供的又一种调整应用属性的实现装置的结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参照图1,为本实施例提供了一种应用开发系统的结构示意图,该系统可以包括:应用客户端11、应用服务端12以及Mono虚拟机13。
应用客户端11可以是安卓系统下需要进行安全检测的应用程序,比如各种游戏客户端等,其可以安装在如手机、平板电脑等终端设备上,本实施例主要是为了实现应用客户端的原有功能或逻辑的动态调整,即在线调整应用客户端的应用属性,以便后续利用测试工具对调整后的应用客户端进行测试。基于此,在应用属性的在线调整过程中,可以将应用客户端记为待处理应用程序,下文实施例不再说明。
其中,若应用客户端是游戏,测试工具可以是SR(Security Radar)客户端,其能够为企业提供私密安全测试服务,通过主动挖掘游戏业务安全漏洞(诸如钻石盗刷、服务器宕机、无敌秒杀等40多种漏洞),提前暴露游戏潜在安全风险,提供解决方案及时修复,最大程度降低事后外挂危害与外挂打击成本。
需要说明,对于其他类型的应用客户端,该测试工具可以是实现其他方面安全或性能检测的应用程序,本发明对该测试工具的功能组成不作限定。
应用服务端12可以是网络侧为用户提供服务的服务设备,其可能是由多台服务器组成的服务器群组,也可能是单台服务器。以游戏客户端为例,该应用服务器可以是为用户提供游戏服务的游戏服务器,关于该游戏客户端与游戏服务器之间的交互,保证游戏客户端正常使用的过程,本发明实施例不做详述。
Mono虚拟机可以在Android环境下开发和运行,是一种自由开放源代码项目,可以包括C#编译器和通用语言架构,可以运行在各种系统或者一些游戏平台。Mono虚拟机可以包括一个实时编译引擎,可以将代码实时编译或预先编译到原生代码。关于Mono虚拟机的组成功能,本发明实施例在此不作详述。
在本实施例中,参照图2,Mono虚拟机可以基于域隔离机制原理,创建多个应用程序域,实现不同应用客户端的运行环境的隔离。该应用程序域是一种边界,由公共语言运行库(Common Language Runtime,CLR)围绕同一应用程序范围内创建的对象建立。因此,应用程序域实际上是一个应用程序(即应用客户端)在其中执行的独立环境,为执行托管代码提供隔离、卸载和安全边界,在实际应用中,一个单独的进程中可以存在多个应用程序域,也就是说,一个应用程序可以由多个应用程序域确定其整个运行环境。
而且,如图2所示,每个应用程序域中可以包括至少一个程序集。该程序集可以认为是一个及一个以上托管模块,以及一些资源文件的逻辑组合,其通常是由编译器编译得到的,供CLR进一步编译执行的中间产物,在编译应用程序时,所创建的CIL(CommonIntermediate Language,公共中间语言)代码存在一个程序集中。可见,程序集通常可以包括.dll格式的库文件(即上述DLL文件),且对于任意一个应用程序,通常会对应多个程序集,加载在同一个应用程序域或不同的应用程序域中,这可以基于不同应用程序及其功能确定,本实施例对此不作限定。
需要说明,图2仅对是Mono虚拟机组成的示意性说明,并不限于图2示出的应用程序域以及程序集,根据需要还可以包括其他部分,本实施例对此不做详述。
结合上述分析,当需要在线对某应用程序(记为待处理应用程序)的应用属性进行动态调整,启动待处理应用程序后,可以按照如图3所示的流程步骤执行,具体步骤如下:
步骤S301,启动Mono虚拟机,并通过Mono虚拟机对待处理应用程序的系统逻辑进行初始化;
以游戏为例,启动游戏进程后,游戏引擎将会初始化,并驱动Mono虚拟机初始化游戏逻辑,具体实现过程本实施例不作详述。
步骤S302,按照预设数据结构对待处理应用程序包含的多个原库文件中的信息进行处理,得到相应的多个原程序集;
由于Mono虚拟机只识别特定的一种数据结构,因此,对于其要加载的库文件,需要先对其进行处理,使得Mono虚拟机能够识别,具体可以由Mono虚拟机创建一个Image对象加载对应的库文件中的信息,从而使得Mono虚拟机通过对Image对象进行解析,得到库文件中的信息,再创建程序集来封装得到的该信息,从而得到与该库文件对应的程序集,但并不局限于本实施例描述的这种实现过程。
步骤S303,通过Mono虚拟机创建主应用程序域,并将这多个原程序集加载到主应用程序域。
在本实施例实际应用中,对于待处理应用程序的原库文件通常都会映射到内存中,之后,再由Mono虚拟机加载到创建的主应用程序域,基于域隔离机制,使得主应用程序域中的各原程序集之间能够相互依赖、调用,保证待处理应用程序的正常运行。
其中,如图2所示,Mono虚拟机通常包括多个应用程序域,满足了终端设备中各应用程序的隔离要求,保证了待处理应用程序正常运行。需要说明,本实施例对Mono虚拟机创建应用程序域的实现方法不作详述。
基于上图1所示的应用开发系统,如图4所示,本发明实施例提供了另一种调整应用属性的实现方法,如图4所示的流程图,本实施例主要描述如何生成用于实现对该应用功能或逻辑等属性的调整,比如修改或扩展应用原有功能逻辑等的外部库(DynamicLinkLibrary,动态链接库,简称DLL)文件的过程,但并不局限于本实施例描述的实现方式,该方法可以包括:
步骤S401,获取待处理应用程序的安装文件,并提取该安装文件包含的多个原库文件;
在本实施例中,待处理应用程序可以是Android系统下的应用程序,其安装文件可以是APK(AndroidPackage,安卓安装包)解压后的文件。比如,待处理应用程序是一种U3d(Unity3D,一种游戏引擎)手游,其安装文件可以是对该手游APK压缩文件进行解压处理后得到的各种文件/文件夹,U3d手游通常使用C++做为脚本语言进行开发,且游戏逻辑会被编译成相应的库文件存储在APK中,本实施例可以直接从解压后的安装文件中,直接提取其包含的各种游戏库文件,如图5a所示,可以将提取的游戏库文件呈现在当前显示界面,但并不局限于图5a所示的库文件内容。
需要说明,本实施例的待处理应用程序并不局限于上述U3d手游,对于不同的待处理应用程序,所提取出的库文件通常是不同的,本实施例对提取出的库文件的内容不做限定,可以基于待处理应用程序的类型及其性能等因素确定。
步骤S402,引用提取出的库文件进行编译,生成外部库文件;
如上述所述,本实施例中的库文件是DLL文件,下文不再一一解释。
本实施例可以直接引用待处理应用程序原有的库文件进行编译,得到所需的外部库文件,用来实现对待处理应用程序的应用功能或逻辑的调整(包括修改、重写、扩展等调整操作),从而改善待处理应用程序的应用属性,相对于传统直接编写代码生成外部库文件的方式,降低了技术人员的工作量,提高了应用属性调整效率,且避免了技术人员编写错误代码导致外部库文件注入后无法正常执行。
其中,对于外部库文件的编译构成,可以采用与待处理应用程序相同的开发语言,即C++语言实现,所依据的预设逻辑规则可以基于对待处理应用程序的应用功能或逻辑的调整要求确定,可见,对于不同的调整要求,该预设逻辑规则内容通常不同,本实施例对其具体内容不作限定。
在本实施例中,对于该外部库文件对待处理应用程序原有的库文件的引用,可以得到相应的引用信息,并在源码编译时,由编译器将该引用信息写入该外部库文件中。需要说明,本实施例对该引用信息的具体内容不作限定。通常情况下,对于原有的库文件之间的相互引用,该库文件中通常也会包含与其具有关联关系的引用信息。
仍以上述U3d手游为例,如图5b所示的引用待处理应用程序原有的库文件(即上述提取的库文件)的操作界面,方框内的信息可以表示引用的库文件,以及实现相应的引用关系的程序代码,左侧内容可以表示外部库文件引用原有库文件得到的引用信息。需要说明,上图5a和图5b仅仅是表示本实施例获得外部库文件的实现过程的示意图,并不限定图中示出的内容。
步骤S403,在待处理应用程序运行期间,将该外部库文件映射到待处理应用程序的内存,并按照预设数据结构对外部库文件中的信息进行处理,得到相应的外部程序集;
其中,预设数据结构是Mono虚拟机能够识别的一种数据结构。待处理应用程序的内存可以指待处理应用程序进程的虚拟地址空间,本实施例可以利用mmap(一种内存映射文件的方法)函数,将外部库文件映射到内存中,具体实现过程本实施例不作详述。
步骤S404,将该外部库文件加载到Mono虚拟机的主应用程序域。
在本实施例实际应用中,因待处理应用程序的各库文件的信息通常是相互引用的,可以将该待处理应用程序中所有逻辑相关的库文件映射到内存中,并且,参照图5c,基于域隔离机制原理,Mono虚拟机加载待处理应用程序的逻辑相关文件过程中,可以创建一个应用程序域(AppDomain)作为默认域,即该待处理应用程序的主应用程序域,将该待处理应用程序逻辑相关的库文件加载在该主应用程序域下,其中,不同逻辑功能的库文件信息可以封装成程序集(Assembly),从而使得主应用程序域中加载多个程序集,且这些程序集之间是可以相互依赖、调用的,以保证待处理应用程序的正常运行。
可见,本实施例的主应用程序域是待处理应用程序包含的多个原库文件对应的原程序集所在的应用程序域,具体可以是与外部库文件关联(即具有引用关系)的多个原库文件所在的应用程序域。
可选的,本实施例按照上述方法,通过Mono虚拟机将该外部库文件成功加载到待处理应用程序的系统逻辑所在的主应用程序域,之后,可以运行该外部库文件的入口函数,从而使待处理应用程序执行对应的功能逻辑,具体实现过程可以参照下文相应部分的描述。
综上所述,本实施例利用Mono虚拟机通过引用待处理应用程序的原有库文件,生成新的库文件即外部库文件,不需要技术人员手动编写外部库文件的代码,提高了工作效率;而且,通过Mono虚拟机能够将该外部库文件直接加载到待处理应用程序的目标进程中正常执行,降低了SR协议接入的难度,进而提高了对待处理应用程序测试效率。
如图6所示,为本申请实施例提供的又一种调整应用属性的实现方法的流程图,本实施例主要是对上述步骤S303和步骤S304的实现过程进行描述,但并不局限于本实施例描述的这种实现方式,如图6所示,该方法可以包括:
步骤S601,创建目标线程,并获取引用待处理应用程序的原库文件生成的外部库文件;
在本实施例中,由于Mono虚拟机是抽象出域隔离机制来分割程序集执行环境,即通过创建应用程序域实现程序集执行环境的隔离,在Mono虚拟机层次上通常并不存在系统线程的划分,也就无法加载外部库文件,基于此,本实施例为了采用注入线程的方式实现外部库文件的加载,注入待处理应用程序的进程中。所以,本实施例可以先创建目标线程,即用来传输外部库文件的线程,本实施例对该目标线程的创建方法不做限定。
另外,结合上述对外部库文件的生成过程的描述,可选的,该外部库文件仍可以存储在该待处理应用程序的APK中,在待处理应用程序的进程启动后,待处理应用程序的引擎启动Mono虚拟机,驱动Mono虚拟机初始化待处理应用程序的逻辑,并获取APK中的外部库文件。
可选的,在执行后续步骤之前,本实施例还可以检测待处理应用程序进程是否注入过该目标线程,若否,再执行后续步骤;若是,将直接结束流程,本实施例对如何检测进程是否注入过目标线程的实现方法不作限定。
步骤S602,确定该目标进程的主应用程序域,并将该目标线程注入主应用程序域;
如上述描述,启动待处理应用程序进程过程中,可以将Mono虚拟创建的默认应用程序域记为主应用程序域,通常情况下,待处理应用程序的逻辑相关的原库文件可以被映射到待处理应用程序进程的内存(即该目标进程的虚拟地址空间),并通过相应的线程,被Mono虚拟机加载到主应用程序域,加载的原库文件通常包括经过源码编译的模块之间的引用信息。
由于本实施例的外部库文件是通过引用待处理应用程序的原库文件生成的,在实际应用中,需要调用原库文件中的函数、变量等信息,待处理应用程序才能实现相应功能。所以,根据域隔离机制,本实施例可以将该外部库文件添加到待处理应用程序逻辑所在的主应用程序域,从而使待处理应用程序的相关逻辑的库文件都位于该主应用程序域,保证在同一个应用程序域中的不同程序集(其包含至少一个库文件)能够互相访问,保证待处理应用程序的正常运行。
基于此,为了保证额外创建的外部库文件能够准确加载到待处理应用程序的主应用程序域,本发明实施例可以先将创建的目标线程添加到主应用程序域,确定出外部库文件的加载路径,后续再基于该加载路径进行外部库文件的加载或调用。本发明实施例对如何将目标线程添加主应用程序域的实现方法不做限定。
步骤S603,将外部库文件映射到该待处理应用程序进程的内存;
由于操作系统通常会为每个进程分配一个私有地址空间,也就是进程的虚拟地址空间,当进程的目标线程载入库文件时,操作系统会自动将该库文件地址映射到该进程的虚拟地址空间,具体可以通过mmap函数实现,具体实现过程不做详述。
步骤S604,确定外部库文件通过合法性检测,创建Image对象,并通过Mono虚拟机的API接口,在Image对象加载外部库文件中的信息;
步骤S605,利用Mono虚拟机对当前Image对象进行解析,并创建外部程序集封装解析得到的信息;
本发明实施例将外部库文件映射到目标进程的内存后,可以枚举已加载的各库文件,并通过名称比对等方式,判断已加载的库文件是否存在与该外部库文件名称相同的库文件,若不存在,可以认为该外部库文件通过了合法性检测;反之,可以认为该外部库文件未通过合法性检测,可以不加载该外部库文件,从而防止Mono虚拟机对重复加载同一库文件。
另外,在本实施例中,由于Mono虚拟机通常只识别一种数据结构,如某特定的Image类型,因此,在将外部库文件映射到目标进程的内存后,且在Mono虚拟机加载外部库文件之前,可以按照预设数据结构对外部库文件包含的信息进行处理,在主应用程序域中创建相应的外部程序集。
具体的,可以通过Mono虚拟机的API(Application Programming Interface,应用程序编程接口)创建一个相应类型(即该Mono虚拟机能够识别的类型,本实施例对该类型不作限定)的Image对象,用来加载需要封装的外部库文件中的信息库文件。之后,本实施例的Mono虚拟机可以对创建的Image对象进行解析,获取该Image对象包含的元素信息,即其加载的外部库文件包含的信息,并创建相应的外部程序集(如Assembly对象)来封装获取到的信息,具体实现过程不作限定。
步骤S606,利用主应用程序域当前包含的程序集,注册辅助函数库;
可选的,本实施例为了提高外部程序集调用C++函数的能力,还可以添加用于实现相应逻辑的辅助函数。也就是说,Mono虚拟机成功加载外部库文件之后,即将包含外部库文件的外部程序集加载到目标进程的主应用程序域后,可以注册一些自定义的函数库(即一系列C++函数集合,本发明实施例将其记为辅助函数库),使C#能以声明InternalCall函数的方式,调用到C++函数,即产生C#到C++函数的调用。其中,该辅助函数库通常是在流程开始之前已经定义好的C++函数,可以根据对待处理应用程序的功能或逻辑的扩展要求确定,本发明实施例在此不做详述,所以说,该辅助函数库中可以包括与外部库文件关联的至少一个自定义函数。
需要说明,本实施例注册的辅助函数库中的函数参数需要使用Mono虚拟机认可的数据类型,以字符串的表示为例,通常不能使用常规的std::string,需要使用Monostring,其可以由Mono虚拟机提供API通过std::string创建得到,对于其他函数参数的转换处理过程类似,本实施例在此不再一一详述。。
另外,上述辅助函数库的注册过程可以通过调用Mono虚拟机的API实现,且需要调用本实施例上述主应用程序域中的程序集参数,因此,该注册过程通常是在Mono虚拟机加载外部程序集之后实现。
步骤S607,查找该外部程序集的入口函数,并执行该入口函数;
在本发明实施例中,可以通过Mono API mono_image_loaded,mono_class_from_name等函数,查找外部程序集的Main函数的类,再调用mono_method_desc_search_in_class函数,根据Main函数名搜索到Main函数,即外部程序集的入口函数。
之后,构造Main函数参数,通过Mono API mono_runtime_invoke,产生C++到C#函数的调用,完成Main函数的执行,具体实现过程本发明实施例在此不再详述。
在本实施例中,按照上述方法通过Mono虚拟机,将外部库文件加载到待处理应用程序的目标进程的主应用程序域后,可以执行处理后的应用程序文件,此时可以确定外部库文件所在的外部程序集的入口函数并启动,从而使处理后的应用程序运行起来,方便技术人员检测注入外部库文件后该应用程序的运行情况,是否能够正常运行,以及是否达到预设要求,具体可以通过输出该应用程序的日志,查看调整后的应用功能或逻辑是否满足预设要求等,本实施例对注入外部库文件后的应用程序的检测方法不作限定。
步骤S608,获取所述待处理应用程序执行所述外部程序集对应产生的日志文件;
仍以上文游戏为例进行说,按照上述方法将外部库文件注入Mono虚拟机中游戏逻辑所在的主应用程序域后,执行外部库文件使用游戏原有对象,使得游戏正常运行,可以正常得到如图7a所示的日志文件,并可以在终端设备的当前界面显示出来,以便技术人员通过阅读该日志文件得知外部库文件运行是否正常,本次利用Mono虚拟机对外部库文件的注入是否成功,但并不局限于图7a所示的日志文件内容。
并且,在外部库文件使用原游戏类型,可以得到如图7b所示的协议名,以使得技术人员能够据此得知外部库文件与原库文件之前的通信协议方式,但并不局限于图7b所示的协议名,其仅作为示意性说明。
步骤S609,当该日志文件表明外部程序集运行正常,将目标线程从主应用程序域分离后释放。
在将创建的外部DLL成功注入待处理应用程序的目标进程的主应用程序域,并使其构成的外部程序集能够与待处理应用程序自带的程序集互相引用或调用,保证注入的外部库文件能够正常执行后,为了避免Mono虚拟机一直持有目标线程,而引起系统崩溃,可以退出用来注入外部库文件所创建的目标线程,具体可以将该目标线程从Mono虚拟机中的主应用程序域分离出来后释放,本实施例对该目标线程的从Mono虚拟机退出的实现方法不作限定。
综上,在本实施例中,利用与待处理应用程序相同的开发语言(如C++语言)开发外部库文件时,能够直接引用原库文件编译得到该外部库文件,避免了人工输入代码造成错误,而影响外部库文件的正常运行,提高了工作效率,并通过Mono虚拟机将该外部库文件加载到原库文件所在的主应用程序域后,执行外部库文件的入口函数,运行该外部库文件,还能够通过日志文件得知所注入的外部库文件是否能够正常运行,以便在确定外部库文件运行正常后,使Mono虚拟机及时释放目标线程,从而避免系统崩溃。
可选的,在实际应用中,可以利用测试工具(如SR(SecurityRadar)客户端)对注入外部库文件的待处理应用程序进行协议测试,通常情况下,SR客户端并不会与待处理应用程序直接交互,而是通过socket与注入的外部库文件进行交互。
在测试过程中,由于交互内容可以在SR客户端的操作界面展示,本实施例可以实时监测SR客户端的显示界面,从而实时抓取待处理应用程序中的协议对象并解析显示,如图7c所示,但并不局限于此,测试人员可以查阅现实出的协议名,根据实际需要,直接在SR客户端的操作界面进行协议操作,如修改、重发协议等等,从而提高待处理应用程序测试效率。
基于上述实施例对在线调整应用属性的实现方案的描述,以待处理应用程序为一款适用于安卓系统下的游戏如U3d手游为例,本实施例能够在游戏运行过程中,对游戏原有功能或逻辑进行动态修改、扩展,提高工作效率。具体通过引用原游戏库文件生成新的库文件,即外部库文件,在游戏运行中,将该外部库文件映射到游戏进程的内存中,并将其处理成Mono虚拟机能够识别的数据结构,记为外部程序集,之后通过Mono虚拟机将该外部程序集加载到与游戏逻辑处于同一应用程序域的主应用程序域中,并运行该外部程序集的入口函数,从而使得扩展后的库文件功能开始执行,并通过输出的日志文件得知注入的外部库文件是否正常,并确定正常后,将会使Mono虚拟机及时释放用来注入外部库文件的目标线程,避免系统崩溃。
并且,在将外部库文件注入到游戏进程中后,可以通过SR客户端实时抓取游戏中的协议对象并解析显示,此时,测试人员能够直接操作界面,实现协议修改、重发等操作,能够大大提高游戏测试效率。
参照图8,为本实施例提供的一种调整应用属性的实现装置的结构图,该装置可以包括:
编译模块810,用于引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件;
映射处理模块820,用于在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
可选的,如图9所示,该映射处理模块820可以包括:
信息加载单元821,用于创建Image对象,并通过Mono虚拟机的应用程序编程接口,将所述外部库文件中的信息加载到所述Image对象;
程序集创建单元822,用于利用所述Mono虚拟机对所述Image对象进行解析,并创建外部程序集封装解析得到的信息。
加载模块830,用于将所述外部程序集加载到所述待处理应用程序的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
作为本申请另一实施例,如图10所示,该装置还可以包括:
线程创建模块840,用于创建目标线程,所述目标线程用于传输所述外部库文件;
线程注入模块850,用于确定所述待处理应用程序进程的主应用程序域,并将所述目标线程注入所述主应用程序域。
另外,在本申请提供的任一实施例中,该装置还可以包括:
注册模块,用于利用所述主应用程序域当前包含的程序集参数,注册辅助函数库,所述辅助函数库包括与所述外部库文件关联的至少一个自定义函数。
可选的,如图10所示,该装置还可以包括:
查找模块860,用于查找所述外部程序集的入口函数,并启动所述入口函数;
获取模块870,用于获取所述待处理应用程序执行所述外部程序集对应产生的日志文件;
线程释放模块880,用于当所述日志文件表明所述外部程序集运行正常,将所述目标线程从所述主应用程序域分离,并释放所述目标线程。
需要说明,关于上述各功能模块或单元的功能实现过程,可以参照上文方法实施例相应部分的描述,本实施例在此不做赘述。
综上,本实施例能够实现对待处理应用程序的原有功能或逻辑进行在线调整,具体的,通过引用待处理应用程序原有库文件进行编译,得到调整所需的外部库文件,不需要人工输入外部库文件的代码,避免了输入错误代码,影响外部库文件的正常运行,降低调整效率。而且,本实施例在待处理应用程序运行中,将生成的外部库文件映射到内存后,能够通过Mono虚拟机将其加载到主应用程序域,即待处理应用程序原有功能相关逻辑所在的应用程序域,从而保证了该外部库文件与其他应用程序的域隔离,且保证了其能够正常引用或调用待处理应用程序的其他库文件,使得待处理应用程序正常执行,实现所扩展或修改后的功能。
可选的,本申请还提供了一种可读存储介质的实施例,该可读存储介质上存储有计算机程序,在本实施例实际应用中,该计算机程序可以被处理器执行,实现以下步骤:
引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件;
在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
将所述外部程序集加载到Mono虚拟机的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
可选的,处理器执行计算机程序,还可以实现以下步骤:
创建目标线程,所述目标线程用于传输所述外部库文件;
确定所述待处理应用程序进程的主应用程序域,并将所述目标线程注入所述主应用程序域。
可选的,处理器执行计算机程序,可以按照以下步骤,实现按照预设数据结构对外部库文件中的信息进行处理,得到相应的外部程序集这一过程:
创建Image对象,并通过Mono虚拟机的应用程序编程接口,将所述外部库文件中的信息加载到所述Image对象;
利用所述Mono虚拟机对所述Image对象进行解析,并创建外部程序集封装解析得到的信息。
可选的,处理器执行计算机程序,还可以实现以下步骤:
利用所述主应用程序域当前包含的程序集参数,注册辅助函数库,所述辅助函数库包括与所述外部库文件关联的至少一个自定义函数。
可选的,处理器执行计算机程序,还可以实现以下步骤:
查找所述外部程序集的入口函数,并启动所述入口函数;
获取所述待处理应用程序执行所述外部程序集对应产生的日志文件;
当所述日志文件表明所述外部程序集运行正常,将所述目标线程从所述主应用程序域分离,并释放所述目标线程。
可选的,处理器执行计算机程序,还可以实现以下步骤:
启动Mono虚拟机,并通过所述Mono虚拟机对所述待处理应用程序的系统逻辑进行初始化;
按照所述预设数据结构对所述多个原库文件中的信息进行处理,得到相应的多个原程序集;
通过所述Mono虚拟机创建主应用程序域,并将所述多个原程序集加载到所述主应用程序域。
最后,需要说明的是,关于上述各实施例中,诸如第一、第二等之类的关系术语仅仅用来将一个操作、单元或模块与另一个操作、单元或模块区分开来,而不一定要求或者暗示这些单元、操作或模块之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者系统中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、可读存储介质而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (12)

1.一种调整应用属性的实现方法,其特征在于,所述方法包括:
引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件,并将所述多个原库文件对应的引用信息写入到所述外部库文件中;
在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
将所述外部程序集加载到Mono虚拟机创建的属于所述待处理应用程序的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
创建目标线程,所述目标线程用于传输所述外部库文件;
确定所述待处理应用程序进程的主应用程序域,并将所述目标线程注入所述主应用程序域。
3.根据权利要求1所述的方法,其特征在于,所述按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集,包括:
创建Image对象,并通过Mono虚拟机的应用程序编程接口,将所述外部库文件中的信息加载到所述Image对象;
利用所述Mono虚拟机对所述Image对象进行解析,并创建外部程序集封装解析得到的信息。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
利用所述主应用程序域当前包含的程序集参数,注册辅助函数库,所述辅助函数库包括与所述外部库文件关联的至少一个自定义函数。
5.根据权利要求2所述的方法,其特征在于,所述方法还包括:
查找所述外部程序集的入口函数,并启动所述入口函数;
获取所述待处理应用程序执行所述外部程序集对应产生的日志文件;
当所述日志文件表明所述外部程序集运行正常,将所述目标线程从所述主应用程序域分离,并释放所述目标线程。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括
启动Mono虚拟机,并通过所述Mono虚拟机对所述待处理应用程序的系统逻辑进行初始化;
按照所述预设数据结构对所述多个原库文件中的信息进行处理,得到相应的多个原程序集;
通过所述Mono虚拟机创建主应用程序域,并将所述多个原程序集加载到所述主应用程序域。
7.一种调整应用属性的实现装置,其特征在于,所述装置包括:
编译模块,用于引用待处理应用程序包含的多个原库文件进行编译,生成外部库文件,并将所述多个原库文件对应的引用信息写入到所述外部库文件中;
映射处理模块,用于在所述待处理应用程序运行期间,将所述外部库文件映射到所述待处理应用程序的内存,并按照预设数据结构对所述外部库文件中的信息进行处理,得到相应的外部程序集;
加载模块,用于将所述外部程序集加载到所述待处理应用程序的主应用程序域,所述主应用程序域是包含所述多个原库文件对应的原程序集的应用程序域。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
线程创建模块,用于创建目标线程,所述目标线程用于传输所述外部库文件;
线程注入模块,用于确定所述待处理应用程序进程的主应用程序域,并将所述目标线程注入所述主应用程序域。
9.根据权利要求7所述的装置,其特征在于,所述映射处理模块包括:
信息加载单元,用于创建Image对象,并通过Mono虚拟机的应用程序编程接口,将所述外部库文件中的信息加载到所述Image对象;
程序集创建单元,用于利用所述Mono虚拟机对所述Image对象进行解析,并创建外部程序集封装解析得到的信息。
10.根据权利要求7所述的装置,其特征在于,所述装置还包括:
注册模块,用于利用所述主应用程序域当前包含的程序集参数,注册辅助函数库,所述辅助函数库包括与所述外部库文件关联的至少一个自定义函数。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
查找模块,用于查找所述外部程序集的入口函数,并启动所述入口函数;
获取模块,用于获取所述待处理应用程序执行所述外部程序集对应产生的日志文件;
线程释放模块,用于当所述日志文件表明所述外部程序集运行正常,将所述目标线程从所述主应用程序域分离,并释放所述目标线程。
12.一种可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-6任意一项所述的调整应用属性的实现方法的各个步骤。
CN201810102278.8A 2018-02-01 2018-02-01 调整应用属性的实现方法、装置及可读存储介质 Active CN108304230B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810102278.8A CN108304230B (zh) 2018-02-01 2018-02-01 调整应用属性的实现方法、装置及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810102278.8A CN108304230B (zh) 2018-02-01 2018-02-01 调整应用属性的实现方法、装置及可读存储介质

Publications (2)

Publication Number Publication Date
CN108304230A CN108304230A (zh) 2018-07-20
CN108304230B true CN108304230B (zh) 2021-04-13

Family

ID=62850916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810102278.8A Active CN108304230B (zh) 2018-02-01 2018-02-01 调整应用属性的实现方法、装置及可读存储介质

Country Status (1)

Country Link
CN (1) CN108304230B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110378084B (zh) * 2019-07-22 2021-06-08 北京顶象技术有限公司 应用程序保护方法、装置、计算机设备及存储介质
CN112860224B (zh) * 2019-11-28 2023-12-12 北京达佳互联信息技术有限公司 一种函数执行环境构建方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080072276A1 (en) * 2006-08-24 2008-03-20 Novell, Inc. System and method for applying security policies on multiple assembly caches
CN104503754A (zh) * 2014-12-16 2015-04-08 江南大学 一种机器人图形化编程系统中编程及编译的设计方法
CN106294166A (zh) * 2016-08-16 2017-01-04 腾讯科技(深圳)有限公司 一种游戏数据监控方法和装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080072276A1 (en) * 2006-08-24 2008-03-20 Novell, Inc. System and method for applying security policies on multiple assembly caches
CN104503754A (zh) * 2014-12-16 2015-04-08 江南大学 一种机器人图形化编程系统中编程及编译的设计方法
CN106294166A (zh) * 2016-08-16 2017-01-04 腾讯科技(深圳)有限公司 一种游戏数据监控方法和装置

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
mono嵌入式应用研究(三):注册内部函数;sagasarate;《https://blog.csdn.net/sagasarate/article/details/51063485》;20160405;第1-2页 *
mono嵌入式应用研究(二):虚拟机的初始化;sagasarate;《https://blog.csdn.net/sagasarate/article/details/51062771》;20160405;第1-2页 *
Mono源码阅读--加载文件;Rorschach321;《https://blog.csdn.net/u011247544/article/details/78507729》;20171111;第1页 *
Schedulable online testing framework for real-time embedded applications in VM;Okehee Goh等;《EMBEDDED AND UBIQUITOUS COMPUTING, PROCEEDINGS》;20071220;第4808卷;第730-741页 *

Also Published As

Publication number Publication date
CN108304230A (zh) 2018-07-20

Similar Documents

Publication Publication Date Title
CN105094783B (zh) 安卓应用稳定性测试的方法及装置
CN106126423B (zh) 游戏应用程序的测试方法、装置及系统
EP3660684A1 (en) Efficient and comprehensive source code fuzzing
US8615750B1 (en) Optimizing application compiling
US20150378756A1 (en) Systems and methods for mobile application tracing instrumentation
US10042658B1 (en) Automatically adding bytecode to a software application to determine network communication information
US10209968B2 (en) Application compiling
CN105740144B (zh) 一种Android移动终端的自动化测试方法及系统
US9588872B2 (en) Discovery of code paths
US9207920B2 (en) Systems and methods for remote analysis of software applications
US10725893B2 (en) System and method for determination of code coverage for software applications in a network environment
US9282100B2 (en) Privilege separation
Saltaformaggio et al. {DSCRETE}: Automatic rendering of forensic information from memory images via application logic reuse
US10929277B2 (en) Detecting hard-coded strings in source code
CN109857520B (zh) 一种虚拟机自省中的语义重构改进方法及系统
CN109241746B (zh) 代码处理方法、装置、计算设备以及存储介质
CN106933642B (zh) 应用程序的处理方法及处理装置
CN108304230B (zh) 调整应用属性的实现方法、装置及可读存储介质
US10216620B2 (en) Static code testing of active code
CN108228266B (zh) 一种Android插件框架下不同插件间启动Fragment组件的方法和装置
CN112445706A (zh) 程序异常代码获取方法、装置、电子设备以及存储介质
CN113127329A (zh) 脚本调试方法、装置及计算机存储介质
CN109947407B (zh) 一种数据获取方法及装置
CN117992359B (zh) 服务化软件的观测方法、装置和电子设备
Troost A testing tool visualizing and ensuring data-flow coverage

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