CN111679831A - 软件开发包处理方法、运行监控方法、装置及存储介质 - Google Patents
软件开发包处理方法、运行监控方法、装置及存储介质 Download PDFInfo
- Publication number
- CN111679831A CN111679831A CN202010499923.1A CN202010499923A CN111679831A CN 111679831 A CN111679831 A CN 111679831A CN 202010499923 A CN202010499923 A CN 202010499923A CN 111679831 A CN111679831 A CN 111679831A
- Authority
- CN
- China
- Prior art keywords
- file
- monitoring
- software development
- development kit
- class
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/04—Trading; Exchange, e.g. stocks, commodities, derivatives or currency exchange
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Business, Economics & Management (AREA)
- Accounting & Taxation (AREA)
- Quality & Reliability (AREA)
- Finance (AREA)
- Mathematical Physics (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供一种软件开发包处理方法、软件开发包运行监控方法、装置及存储介质,涉及软件技术领域。该方法包括:获取项目的软件开发包的字节码文件;根据监控目标列表扫描所述字节码文件获得监控点,所述监控点为待监控的方法调用;在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件;基于所述注入后的字节码文件生成所述项目的安装包。该方法实现了对软件开发包的字节码文件中待监控的方法调用的处置,一定程度提高了对软件开发包进行监控的效果和便捷性。
Description
技术领域
本公开涉及软件技术领域,具体而言,涉及一种软件开发包处理方法、软件开发包运行监控方法、装置及可读存储介质。
背景技术
随着移动互联网技术的快速发展,各种各样的移动设备应用程序(Application,App)被开发出来以满足用户多样的需求。与此同时App架构越发复杂,集成的第三方软件开发包(Software Development Kit,SDK)也越来越多,App因为导入不规范的第三方SDK而被非正常使用的事件也越发频发。因此,在移动设备App中对第三方SDK的状态和行为的监听,特别是涉及到线上交易的金融类App,成为非常重要的工作任务。
如上所述,如何提供便捷的软件开发包处理方法以便对软件开发包进行监听成为亟待解决的问题。
在所述背景技术部分公开的上述信息仅用于加强对本公开的背景的理解,因此它可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种软件开发包处理方法、软件开发包运行监控方法、装置及可读存储介质,至少在一定程度上克服相关技术中对软件开发包监听效果差的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的一方面,提供一种软件开发包处理方法,包括:获取项目的软件开发包的字节码文件;根据监控目标列表扫描所述字节码文件获得监控点,所述监控点为待监控的方法调用;在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件;基于所述注入后的字节码文件生成所述项目的安装包。
根据本公开的一实施例,所述方法还包括:在所述处置代码前注入监听代码,所述监听代码用于根据配置的策略信息确定是否执行所述处置代码。
根据本公开的一实施例,所述监控目标列表包括待监控的方法的名称信息和所述待监控的方法所属的类的名称,所述待监控的方法的名称信息包括待监控的方法的方法名和方法签名;所述根据监控目标列表扫描所述字节码文件获得监控点包括:将所述字节码文件中的类以及类的方法与所述监控目标列表中待监控的方法及所属的类的名称进行比对,从而确定匹配的监控点。
根据本公开的一实施例,在所述根据监控目标列表扫描所述字节码文件获得监控点之前,所述方法还包括:基于插件技术通过转换实现接口读入所述字节码文件,输出所述软件开发包的类文件。
根据本公开的一实施例,所述方法还包括:利用字节码操纵框架从通过所述转换实现接口获得的所述类文件中根据所述类文件的路径排除属于安全文件包的类文件。
根据本公开的一实施例,所述根据监控目标列表扫描所述字节码文件获得监控点包括:利用所述字节码操纵框架根据监控目标列表扫描所述类文件获得所述监控点;所述在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件包括:利用所述字节码操纵框架在所述类文件中所述监控点上下文处注入处置代码获得所述注入后的类文件;通过所述转换实现接口读入所述注入后的类文件,输出所述注入后的字节码文件。
根据本公开的再一方面,提供一种软件开发包运行监控方法,包括:在运行如上所述的安装包时,通过运行所述处置代码对所述监控点实现监控。
根据本公开的一实施例,所述软件开发包运行监控方法还包括:通过所述监听代码从策略配置文件中读取处置目标列表,所述策略配置文件预先配置,或者从服务器动态下发;将所述处置目标列表中的处置目标与所述字节码文件中所述监控点进行匹配,在所述处置目标与所述监控点匹配时运行所述处置代码;在所述处置目标与所述监控点不匹配时运行所述监控点。
根据本公开的再一方面,提供一种软件开发包处理装置,包括:文件获取模块,用于获取项目的软件开发包的字节码文件;目标查找模块,用于根据监控目标列表扫描所述字节码文件获得监控点,所述监控点为待监控的方法调用;文件修改模块,用于在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件;项目打包模块,用于基于所述注入后的字节码文件生成所述项目的安装包。
根据本公开的再一方面,提供一种设备,包括:存储器、处理器及存储在所述存储器中并可在所述处理器中运行的可执行指令,所述处理器执行所述可执行指令时实现如上述任一种方法。
根据本公开的再一方面,提供一种计算机可读存储介质,其上存储有计算机可执行指令,所述可执行指令被处理器执行时实现如上述任一种方法。
本公开的实施例提供的软件开发包处理方法,通过获取项目的软件开发包的字节码文件,根据监控目标列表扫描字节码文件获得待监控的方法调用所在的监控点,在字节码文件中监控点处注入处置代码获得注入后的字节码文件,基于注入后的字节码文件生成项目的安装包,从而可通过在字节码文件中注入处置代码以处置字节码文件中的待监控的方法调用,一定程度提高了对软件开发包进行监控的效果和便捷性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
通过参照附图详细描述其示例实施例,本公开的上述和其它目标、特征及优点将变得更加显而易见。
图1示出本公开实施例中一种系统架构的示意图。
图2示出本公开实施例中一种软件开发包处理方法的流程图。
图3示出本公开实施例中另一种软件开发包处理方法的流程图。
图4示出本公开实施例中一种在字节码文件中注入代码的流程示意图。
图5示出本公开实施例中一种软件开发包运行监控方法的流程图。
图6示出本公开实施例中一种监控目标查找、注入及处置的流程示意图。
图7示出本公开实施例中一种软件开发包处理装置的框图。
图8示出本公开实施例中另一种软件开发包处理装置的框图。
图9示出本公开实施例中一种软件开发包装运行监控装置的框图。
图10示出本公开实施例中一种电子设备的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施例使得本公开将更加全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现或者操作以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本公开的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。符号“/”一般表示前后关联对象是一种“或”的关系。
在本公开中,除非另有明确的规定和限定,“连接”等术语应做广义理解,例如,可以是电连接或可以互相通讯;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
安卓(Android)平台是一个基于Java虚拟机而开发的开放平台,其源码也是开源的,因此可通过对SDK进行监听来防止应用程序的非正常操作。相关技术中移动设备应用程序安全保护主要涉及代码混淆、字符串加密、安装包加固等等。对于SDK的监听工作,还缺乏比较有效的综合技术手段。相关技术中SDK监控手段主要包括代码静态扫描、代码漏洞扫描以及人工手动分析。
代码静态扫描仅能扫描出SDK中原有的类文件特征,而代码漏洞扫描仅能根据已经发现的开源漏洞列表,来对源代码或者类文件进行风险检测。以上两种基于静态扫描的方法,主要要借助第三方静态扫描工具进行,对整个应用的字节码文件或者源代码进行扫描,因此可能存在以下问题:一是仅根据风险列表作比对,无法发现未知的风险;二是无法分析加密后的常量和一些混淆后的代码风险;三是无法做到动态处理风险。
人工分析方法主要是通过专业的逆向人员利用通过逆向代码并进行人工分析来分析SDK,该方法存在以下问题:一是人工分析无法做到多任务分析,且成本非常高;二是对分析人员的专业技术能力有较高的要求;三是无法预知未知的风险以及动态处理。
如上所述,相关技术中监听SDK的方法都不能高效实现自动化、可扩展、动态处理等功能,因此,本公开提供了一种方法,通过根据监控目标列表扫描SDK的字节码文件中获得监控点,在字节码文件中监控点处注入处置代码获得注入后的节码文件,从而实现快捷、易用的SDK状态和行为监听。
图1示出了可以应用本公开的软件开发包处理方法或软件开发包处理装置的示例性系统架构10。
如图1所示,系统架构10可以包括终端设备102,网络104和服务器106。网络104用以在终端设备102和服务器106之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备102通过网络104与服务器106交互,以接收或发送数据等。终端设备102可以是具有显示屏并且支持输入、输出的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。本公开的软件开发包处理方法或软件开发包处理装置可以存储在终端设备102上的一个SDK(以下称之为监控SDK)为载体,例如,当用户需要在终端设备102上的App上集成其他第三方SDK以实现一些功能(如支付、拍照等)时,可将App、第三方SDK、监控SDK共同打包生成安卓应用程序包(Android applicationPackage,APK)文件,实现对第三方SDK的监听和处理。服务器106可以是提供各种服务的服务器或服务器集群等,例如对用户利用终端设备102进行Android项目构建提供支持的后台处理服务器(仅为示例)。后台处理服务器可以对接收到的项目代码数据进行分析等处理,并将如Android项目打包结果等反馈给终端设备。后台处理服务器也可以为终端设备102提供处置文件,以便实现动态地对第三方SDK进行监控和处理。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2是根据一示例性实施例示出的一种软件开发包处理方法的流程图。如图2所示的方法例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
参考图2,本公开实施例提供的方法20可以包括以下步骤。
在步骤S202中,获取项目的软件开发包的字节码文件。软件开发包(SDK)是用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合,可以为某个程序设计语言提供API的一些文件,SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。安卓App项目打包的过程中会生成Java字节码文件,Java字节码是Java虚拟机执行的一种指令格式,包括编译之后生成的类(Class)字节码文件,而Class字节码文件包含了Java虚拟机指令集和符号表以及若干其他的辅助信息。安卓项目开发者的代码原始字节码文件从包括安卓应用开发打包、安卓SDK开发打包等场景产生,可利用安卓代码编辑器和插件来获取Android项目打包的过程中生成的字节码文件。
在步骤S204中,根据监控目标列表扫描字节码文件获得监控点,监控点为待监控的方法调用。用户需要在App上集成其他第三方SDK以实现一些功能时,可将App、第三方SDK、监控SDK共同打包生成APK,其中监控SDK可用于实现本公开的方法,第三方SDK的Class文件中方法调用时可能会导致对系统敏感应用程序编程接口(Application ProgrammingInterface,API)的调用,因此需要监控第三方SDK的Class文件。在该项目打包过程中,可通过读取监控SDK中预置的包括监控目标列表的配置文件,其中监控目标列表可包括所有需要监控的方法的信息列表,可包括如方法名、方法签名、方法所在的类名、类所属的软件开发包的名称等等的路径信息。监控SDK根据监控目标列表在第三方SDK的字节码文件中查找待监控的方法调用,例如将字节码文件中的类以及类的方法与监控目标列表中待监控的方法及所属的类的名称进行比对,从而确定匹配的监控点并进行标记以便后续处理。
Class文件中包含了Java虚拟机指令集和符号表以及若干其他的辅助信息,其中包含各种方法调用,每一个方法的调用都是一个指令集的集合。第三方SDK的Class文件中方法调用时可能会导致对系统敏感应用程序编程接口(Application ProgrammingInterface,API)的调用,例如对设备文件系统的访问操作、对网络的访问、动态加载文件、获取手机设备标识符调用等等。
在步骤S206中,在字节码文件中监控点处注入处置代码获得注入后的字节码文件。可在待监控的方法的上、下文处注入处置代码,处置代码是对待监控的方法调用进行实际处置的代码,例如跳过如对系统接口进行调用的方法的执行,再如拦截如打开无权限访问的文件的方法的执行等等,在打包完成的APK实际运行过程中,运行至字节码文件中的监控点时,可通过该处置代码实现待监控的方法调用的处置。
在一些实施例中,例如,监控目标原始代码块为:
String imei=getImei()
通过注入处理后可变成:
String imei=“”;
/*
*String imei=getImei()
*/
在运行时可将原方法调用替换掉以进行拦截。
在步骤S208中,基于注入后的字节码文件生成项目的安装包。根据未修改的Class文件和注入后的(第三方SDK的)的Class文件,生成可执行字节码文件(Dex文件),继续打包过程,完成App项目打包,生成集成可监听的第三方SDK的APK。
本公开的实施例提供的软件开发包处理方法,通过获取项目的软件开发包的字节码文件,根据监控目标列表扫描字节码文件获得待监控的方法调用所在的监控点,在字节码文件中监控点处注入处置代码获得注入后的字节码文件,基于注入后的字节码文件生成项目的安装包,从而可通过在字节码文件中注入处置代码以处置字节码文件中的待监控的方法调用,实现便捷处理,一定程度提高了对软件开发包进行监控的效果。
图3是根据一示例性实施例示出的另一种软件开发包处理方法的流程图。如图3所示的方法例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
参考图3,本公开实施例提供的方法30可以包括以下步骤。
在步骤S302中,获取项目的软件开发包的字节码文件。步骤S302的具体实施方式请参照步骤S202,此处不再赘述。
在步骤S304中,基于插件技术通过转换实现接口读入字节码文件,输出软件开发包的类文件。在一些实施例中,例如,可通过安卓的转换实现接口(Transform API)来实现对字节码文件的扫描,通过安卓构建系统的Transform API,将项目打包的中间件的字节码文件在打包流程中通过文件流的形式传递到集成在集成开发环境(IntegratedDevelopment Environment,IDE)的插件(例如Gradle)实现类。插件集成和插件配置为预先配置步骤,便于操作且无侵入性。
例如,可创建插件主体类,用于实现接口:
MyPlugin extends Transform implements Plugin
该类继承Transform Api,同时实现Plugin接口,标明是Gradle插件;
注册插件:
project.extensions.getByType(AppExtension).registerTransform(this)
然后将该插件注册到打包的App。
通过TransformApi获取字节码文件流:
Collection<TransformInput>inputs=transformInvocation.inputs
通过TransformApi的transform回调获取输入的字节码流。
在步骤S306中,利用字节码操纵框架从通过转换实现接口获得的类文件中根据类文件的路径排除属于安全文件包的类文件。对于App项目中安卓系统相关的类以及App自身的类、监控SDK的类都可不进行监听,App、监控SDK等都属于安全文件包,因此可在字节码操纵框架(ASM)扫描Class文件时过滤掉这些类对应的Class文件,以获得需要监听的第三方SDK的类生成的Class文件。可通过Transform Api获取所有Class文件的路径信息中所属的文件包名称信息,如App名称、Android等等,以便筛选出待监控的第三方SDK的Class文件。
在步骤S308中,利用字节码操纵框架根据监控目标列表扫描类文件获得监控点。在一些实施例中,例如,可利用类ASM的字节码扫描工具对类文件进行扫描。例如首先获得监控目标列表上的第一行的待监控的方法的路径信息,确认其所属的软件开发包、类与正在处理的类文件符合后,通过比对方法名和方法签名来定位可能调用了敏感API的该待监控的方法,例如getDeviceId()方法的方法名称为:getDeviceId,签名为:()v,基于此可以通过ASM字节码扫描工具对原始字节码文件进行扫描识别出该方法,以便对该方法所在的监控点准备后续的代码注入。注入成功后获得监控目标列表上的下一行的待监控的方法的路径信息,若其所属的软件开发包或类与正在处理的字节码文件不符合,则跳过该方法,继续获得下一行的待监控的方法的名称信息,重复上述步骤直至将该Class文件中的所有待监控的方法调用注入完成,然后再获取下一个Class文件,直至将监控目标列表上所有的监控目标注入完成。
在步骤S310中,利用字节码操纵框架在类文件中监控点上下文处注入处置代码,并在处置代码前注入监听代码,监听代码用于根据配置的策略信息确定是否执行处置代码,获得注入后的类文件。监听代码可为在监控目标代码前的选择命令,如果在配置的策略信息中获得了对待监控的方法进行处置的信息,则运行处置代码,对该待监控的方法调用进行拦截;如果未在配置的策略信息中获得对该待监控的方法进行处置的信息,则Apk运行至该待监控的方法时不进行处理,可根据原逻辑继续运行,因此可实现在不影响原始运行逻辑中的调用顺序的情况下实现监听。其中配置的策略信息可在运行时从策略配置文件中读取,策略配置文件可预先配置在监控SDK中,也可从服务器接收。
在一些实施例中,例如,待监控的方法原始代码块为:
String imei=getImei()
通过注入处理后可变成:
String imei=“”;
if(!XX.intercept()){
String imei=getImei();}。
其中,if(!XX.intercept())为监听代码,XX.intercept()函数的具体命令可包含在监控SDK的预置配置文件中,其中包括了(在策略配置文件中)扫描处置目标列表中是否包括getImei()调用的逻辑,以后续运行时确定需要处置getImei()时进行如拦截等处理。
在步骤S312中,通过转换实现接口读入注入后的类文件,输出注入后的字节码文件。Transform API可将注入后的类文件覆盖原始类文件,以继续编译等打包流程。
在步骤S314中,基于注入后的字节码文件生成项目的安装包。步骤S314的具体实施方式请参照步骤S208,此处不再赘述。
根据本公开实施例提供的软件开发包处理方法,基于插件技术利用字节码操纵框架在软件开发包的字节码文件中查找待监控的方法调用,具有通用性、兼容性;并在监控点上下文处注入处置和监听代码,实现了在不影响原始调用顺序的情况下,对可能调用敏感API进行监听,操作便捷且无侵入性;并可通过配置的策略信息来实施处置,提高了监控目标的可扩展性。
图4示出了一种在字节码文件中注入代码的流程示意图。如图4所示,开始(S401)原始App项目打包过程;基于插件技术通过Transform API生成Class文件(S402);判断当前Class文件所属的SDK是否为第三方SDK,若是,则进一步进行扫描以查找待监控的方法调用,在找到时通过ASM插件注入监听和处置代码并生成注入后的Class文件,若否,则跳过(S403);根据过滤掉的未修改的Class文件和第三方SDK的修改后的Class文件,继续打包过程,生成可执行字节码文件(Dex文件)(S404);App项目打包完成,生成集成可监听的第三方SDK的Apk(S405)。
图5是根据一示例性实施例示出的一种软件开发包运行监控方法的流程图。如图5所示的方法例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
如图5所示的方法在运行经上述方法处理后的安装包时,通过运行处置代码对监控点实现监控。参考图5,本公开实施例提供的方法50可以包括以下步骤。
在步骤S502中,通过监听代码从策略配置文件中读取处置目标列表,策略配置文件预先配置,或者从服务器动态下发。监控SDK中的包括监控目标列表的配置文件中可包括默认的策略配置文件。策略配置文件也可通过服务端下发至用户终端,由用户终端在本地进行持久化存储,即监控SDK所在的用户终端可从服务器获得可随时更新的策略配置文件。在接收了服务器下发的策略配置文件后,可将原默认的策略配置文件覆盖,获取下发的策略信息为当前策略信息。
在步骤S504中,将处置目标列表中的处置目标与字节码文件中监控点进行匹配,在处置目标与监控点匹配时运行处置代码;在处置目标与监控点不匹配时运行监控点。
在一些实施例中,例如,在运行至监控点处时,可能根据策略信息进行拦截,即可能发生不正常运行时,跳过原始的方法调用,例如,待监控的方法原始代码块为:
String imei=getImei()
通过注入处理后可变成:
String imei=“”;
if(!XX.intercept()){
String imei=getImei();}。
其中,if(!XX.intercept())为监听代码,XX.intercept()函数的具体命令可包含在监控SDK的预置配置文件中,其中包括了(在策略配置文件中)扫描处置目标列表中是否包括getImei()调用的逻辑,在运行时若在处置目标列表中查找到该方法,则可对其进行拦截。
第三方SDK的Class文件中方法API调用时可能同时会要求返回处理结果,例如返回手机设备标识符的调用、返回设备存储空间的调用等等。若有返回值,则在拦截的同时返回无效的结果。
根据本公开实施例提供的软件开发包处理方法,通过根据策略配置文件通过监听代码和处置代码实现动态拦截对敏感API的调用,实现在不影响原始调用顺序的前提下动态拦截对敏感API的调用,提高了监控目标的可扩展性。
图6示出了一种监控目标查找、注入及处置的流程示意图。如图6所示,开始通过Transform API获取字节码文件(S601)并获得相应的Class文件;利用ASM扫描Class文件(S602),根据所属的SDK名称判断当前Class文件是否需要监听(S603),过滤系统和自身的类;在需要监听时将监控目标列表中的待监控的方法与Class文件中的方法逐一进行匹配(S604),判断方法名和方法签名是否相同(S605);在方法匹配时注入相应的监听和处置代码(S606);然后输出注入后的类文件,或在类、方法不需要监听时直接输出原始类文件(S607);输出当前类文件的字节码文件(S608),继续App打包流程,生成APK;在APK运行时,运行至监控点时(S610),可读取下发或预置的策略配置文件(S611),根据处置目标列表判断是否处置该方法(S612);若命中处置目标列表则进行处置(S613),对该方法调用进行拦截,获得运行结果(S614)。
图7是根据一示例性实施例示出的一种软件开发包处理装置的框图。如图7所示的装置例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
参考图7,本公开实施例提供的装置70可以包括文件获取模块702、目标查找模块704、文件修改模块706和项目打包模块708。
文件获取模块702可用于获取项目的软件开发包的字节码文件。
目标查找模块704可用于根据监控目标列表扫描字节码文件获得监控点,监控点为待监控的方法调用。
文件修改模块706可用于在字节码文件中监控点处注入处置代码获得注入后的字节码文件。
项目打包模块708可用于基于注入后的字节码文件生成项目的安装包。
图8是根据一示例性实施例示出的另一种软件开发包处理装置的框图。如图8所示的装置例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
参考图8,本公开实施例提供的装置80可以包括文件获取模块802、文件读取模块8031、文件过滤模块8032、目标查找模块804、文件修改模块806和项目打包模块808。
文件获取模块802可用于获取项目的软件开发包的字节码文件。
文件读取模块8031可用于基于插件技术通过转换实现接口读入字节码文件,输出软件开发包的类文件。
文件过滤模块8032可用于利用字节码操纵框架从通过转换实现接口获得的类文件中根据类文件的路径排除属于安全文件包的类文件。
目标查找模块804可用于将字节码文件中的类以及类的方法与监控目标列表中待监控的方法及所属的类的名称进行比对,从而确定匹配的监控点,监控点为待监控的方法调用,监控目标列表包括待监控的方法的名称信息和待监控的方法所属的类的名称,待监控的方法的名称信息包括待监控的方法的方法名和方法签名。
目标查找模块804还可用于利用字节码操纵框架根据监控目标列表扫描类文件获得监控点。
文件修改模块806利用字节码操纵框架在类文件中监控点上下文处注入监听代码和处置代码获得注入后的类文件,监听代码用于根据配置的策略信息确定是否执行处置代码;通过转换实现接口读入注入后的类文件,输出注入后的字节码文件。
项目打包模块808可用于基于注入后的字节码文件生成项目的安装包。
图9是根据一示例性实施例示出的一种软件开发包装运行监控装置的框图。如图9所示的装置例如可以应用于上述系统的终端,也可以应用于上述系统的服务器。
参考图9,本公开实施例提供的装置90可以包括目标读取模块902和目标匹配模块904。
目标读取模块902可用于通过监听代码从策略配置文件中读取处置目标列表,策略配置文件预先配置,或者从服务器动态下发。
目标匹配模块904可用于将处置目标列表中的处置目标与字节码文件中监控点进行匹配,在处置目标与监控点匹配时运行处置代码;在处置目标与监控点不匹配时运行监控点。
本公开实施例提供的装置中的各个模块的具体实现可以参照上述方法中的内容,此处不再赘述。
图10示出本公开实施例中一种电子设备的结构示意图。需要说明的是,图10示出的设备仅以计算机系统为示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图10所示,设备1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行各种适当的动作和处理。在RAM 1003中,还存储有设备1000操作所需的各种程序和数据。CPU1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本公开的系统中限定的上述功能。
需要说明的是,本公开所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括文件获取模块、目标查找模块、文件修改模块和项目打包模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,文件获取模块还可以被描述为“通过转换实现接口获取字节码文件的模块”。
作为另一方面,本公开还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取项目的软件开发包的字节码文件;根据监控目标列表扫描字节码文件获得监控点,监控点为待监控的方法调用;在字节码文件中监控点处注入处置代码获得注入后的字节码文件;基于注入后的字节码文件生成项目的安装包。
以上具体地示出和描述了本公开的示例性实施例。应可理解的是,本公开不限于这里描述的详细结构、设置方式或实现方法;相反,本公开意图涵盖包含在所附权利要求的精神和范围内的各种修改和等效设置。
Claims (10)
1.一种软件开发包处理方法,其特征在于,包括:
获取项目的软件开发包的字节码文件;
根据监控目标列表扫描所述字节码文件获得监控点,所述监控点为待监控的方法调用;
在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件;
基于所述注入后的字节码文件生成所述项目的安装包。
2.根据权利要求1所述的软件开发包处理方法,其特征在于,还包括:
在所述处置代码前注入监听代码,所述监听代码用于根据配置的策略信息确定是否执行所述处置代码。
3.根据权利要求2所述的软件开发包处理方法,其特征在于,所述监控目标列表包括待监控的方法的名称信息和所述待监控的方法所属的类的名称,所述待监控的方法的名称信息包括待监控的方法的方法名和方法签名;
所述根据监控目标列表扫描所述字节码文件获得监控点包括:
将所述字节码文件中的类以及类的方法与所述监控目标列表中待监控的方法及所属的类的名称进行比对,从而确定匹配的监控点。
4.根据权利要求2所述的软件开发包处理方法,其特征在于,在所述根据监控目标列表扫描所述字节码文件获得监控点之前,所述方法还包括:
基于插件技术通过转换实现接口读入所述字节码文件,输出所述软件开发包的类文件。
5.根据权利要求4所述的软件开发包处理方法,其特征在于,还包括:
利用字节码操纵框架从通过所述转换实现接口获得的所述类文件中根据所述类文件的路径排除属于安全文件包的类文件。
6.根据权利要求4或5所述的软件开发包处理方法,其特征在于,所述根据监控目标列表扫描所述字节码文件获得监控点包括:
利用所述字节码操纵框架根据监控目标列表扫描所述类文件获得所述监控点;
所述在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件包括:
利用所述字节码操纵框架在所述类文件中所述监控点上下文处注入处置代码获得所述注入后的类文件;
通过所述转换实现接口读入所述注入后的类文件,输出所述注入后的字节码文件。
7.一种软件开发包运行监控方法,其特征在于,包括:在运行如权利要求2-6任一项所述的安装包时,通过运行所述处置代码对所述监控点实现监控。
8.根据权利要求7所述的软件开发包运行监控方法,其特征在于,还包括:
通过所述监听代码从策略配置文件中读取处置目标列表,所述策略配置文件预先配置,或者从服务器动态下发;
将所述处置目标列表中的处置目标与所述字节码文件中所述监控点进行匹配,在所述处置目标与所述监控点匹配时运行所述处置代码;在所述处置目标与所述监控点不匹配时运行所述监控点。
9.一种软件开发包处理装置,其特征在于,包括:
文件获取模块,用于获取项目的软件开发包的字节码文件;
目标查找模块,用于根据监控目标列表扫描所述字节码文件获得监控点,所述监控点为待监控的方法调用;
文件修改模块,用于在所述字节码文件中所述监控点处注入处置代码获得注入后的字节码文件;
项目打包模块,用于基于所述注入后的字节码文件生成所述项目的安装包。
10.一种计算机可读存储介质,其上存储有计算机可执行指令,其特征在于,所述可执行指令被处理器执行时实现如权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010499923.1A CN111679831A (zh) | 2020-06-04 | 2020-06-04 | 软件开发包处理方法、运行监控方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010499923.1A CN111679831A (zh) | 2020-06-04 | 2020-06-04 | 软件开发包处理方法、运行监控方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111679831A true CN111679831A (zh) | 2020-09-18 |
Family
ID=72434951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010499923.1A Pending CN111679831A (zh) | 2020-06-04 | 2020-06-04 | 软件开发包处理方法、运行监控方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111679831A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112748930A (zh) * | 2021-01-19 | 2021-05-04 | 广州虎牙科技有限公司 | 编译检测方法、装置、设备及存储介质 |
CN112835615A (zh) * | 2021-02-08 | 2021-05-25 | 百度在线网络技术(北京)有限公司 | 软件开发工具包的插件化处理方法、装置及电子设备 |
CN112860279A (zh) * | 2021-02-20 | 2021-05-28 | 网易传媒科技(北京)有限公司 | 生成应用安装包的方法、装置、设备和介质 |
CN113094664A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止安卓应用程序被反编译的系统 |
CN113342419A (zh) * | 2021-06-25 | 2021-09-03 | 北京奇艺世纪科技有限公司 | 一种推送系统加载方法、装置、电子设备及存储介质 |
CN113419919A (zh) * | 2021-06-24 | 2021-09-21 | 亿览在线网络技术(北京)有限公司 | 一种对第三方sdk进行线程监控的方法 |
CN115334152A (zh) * | 2022-09-16 | 2022-11-11 | 北京向量栈科技有限公司 | 提交结构化机器学习计算任务到计算集群的方法 |
CN115686525A (zh) * | 2022-09-09 | 2023-02-03 | 上海和今信息科技有限公司 | 一种代码处理方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110134400A (zh) * | 2019-04-02 | 2019-08-16 | 北京奇艺世纪科技有限公司 | 数据获取方法、装置、电子设备及计算机可读存储介质 |
-
2020
- 2020-06-04 CN CN202010499923.1A patent/CN111679831A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110134400A (zh) * | 2019-04-02 | 2019-08-16 | 北京奇艺世纪科技有限公司 | 数据获取方法、装置、电子设备及计算机可读存储介质 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112748930A (zh) * | 2021-01-19 | 2021-05-04 | 广州虎牙科技有限公司 | 编译检测方法、装置、设备及存储介质 |
CN112748930B (zh) * | 2021-01-19 | 2024-03-01 | 广州虎牙科技有限公司 | 编译检测方法、装置、设备及存储介质 |
CN112835615A (zh) * | 2021-02-08 | 2021-05-25 | 百度在线网络技术(北京)有限公司 | 软件开发工具包的插件化处理方法、装置及电子设备 |
CN112835615B (zh) * | 2021-02-08 | 2024-01-30 | 百度在线网络技术(北京)有限公司 | 软件开发工具包的插件化处理方法、装置及电子设备 |
CN112860279A (zh) * | 2021-02-20 | 2021-05-28 | 网易传媒科技(北京)有限公司 | 生成应用安装包的方法、装置、设备和介质 |
CN113094664A (zh) * | 2021-04-09 | 2021-07-09 | 每日互动股份有限公司 | 一种防止安卓应用程序被反编译的系统 |
CN113419919A (zh) * | 2021-06-24 | 2021-09-21 | 亿览在线网络技术(北京)有限公司 | 一种对第三方sdk进行线程监控的方法 |
CN113342419A (zh) * | 2021-06-25 | 2021-09-03 | 北京奇艺世纪科技有限公司 | 一种推送系统加载方法、装置、电子设备及存储介质 |
CN113342419B (zh) * | 2021-06-25 | 2023-09-19 | 北京奇艺世纪科技有限公司 | 一种推送系统加载方法、装置、电子设备及存储介质 |
CN115686525A (zh) * | 2022-09-09 | 2023-02-03 | 上海和今信息科技有限公司 | 一种代码处理方法及装置 |
CN115334152A (zh) * | 2022-09-16 | 2022-11-11 | 北京向量栈科技有限公司 | 提交结构化机器学习计算任务到计算集群的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111679831A (zh) | 软件开发包处理方法、运行监控方法、装置及存储介质 | |
CN107402792B (zh) | 应用软件安装包的集成方法、装置、设备及存储介质 | |
CN111563015A (zh) | 数据监控方法及装置、计算机可读介质及终端设备 | |
CN111209001A (zh) | 批量生成安卓各渠道apk的方法、系统、设备和介质 | |
CN111143204B (zh) | 一种小程序代码扫描方法和装置 | |
CN112749088A (zh) | 应用程序检测方法、装置、电子设备和存储介质 | |
CN114239026A (zh) | 信息脱敏转换处理方法、装置、计算机设备和存储介质 | |
WO2021243555A1 (zh) | 一种快应用检测方法、装置、设备及存储介质 | |
CN112416395A (zh) | 一种热修复更新方法和装置 | |
CN111046393B (zh) | 漏洞信息上传方法、装置、终端设备及存储介质 | |
CN110348226B (zh) | 一种工程文件的扫描方法、装置、电子设备及存储介质 | |
CN112965736A (zh) | 代码处理方法、装置、电子设备及介质 | |
CN116910712A (zh) | 代码保护方法、系统、电子设备及存储介质 | |
CN109635558B (zh) | 访问控制方法、装置和系统 | |
CN114329535A (zh) | 文件加密方法、装置、电子设备和计算机可读介质 | |
CN115695400A (zh) | 一种Web页面与本地应用交互的方法及终端 | |
CN110046504B (zh) | 基于Linker的SO文件隐藏方法、储存介质及装置 | |
CN113032741A (zh) | 类文件加密方法、类文件运行方法、装置、设备及介质 | |
US20210295956A1 (en) | Systems and Methods for Hashing-Based Assessment of Electronic Clinical Trial Outcomes | |
CN113420302A (zh) | 主机漏洞检测方法及装置 | |
CN111190619A (zh) | 一种基于固件更新协议的Android取证方法 | |
CN111400736B (zh) | 应用程序加密的方法、装置、存储介质及电子设备 | |
CN113139197B (zh) | 一种项目验签方法、装置和电子设备 | |
CN113742008B (zh) | 接口调用方法、装置、电子设备及存储介质 | |
CN110908781B (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 |