CN112784264B - 越狱状态检测方法、装置、设备及存储介质 - Google Patents

越狱状态检测方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112784264B
CN112784264B CN202110063578.1A CN202110063578A CN112784264B CN 112784264 B CN112784264 B CN 112784264B CN 202110063578 A CN202110063578 A CN 202110063578A CN 112784264 B CN112784264 B CN 112784264B
Authority
CN
China
Prior art keywords
module
node
current
jail
modules
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
CN202110063578.1A
Other languages
English (en)
Other versions
CN112784264A (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.)
Beijing Luota Information Technology Co ltd
Original Assignee
Beijing Luota Information Technology 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 Beijing Luota Information Technology Co ltd filed Critical Beijing Luota Information Technology Co ltd
Priority to CN202110063578.1A priority Critical patent/CN112784264B/zh
Publication of CN112784264A publication Critical patent/CN112784264A/zh
Application granted granted Critical
Publication of CN112784264B publication Critical patent/CN112784264B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)

Abstract

本申请实施例公开了一种越狱状态检测方法、装置、设备及存储介质,其包括:获取目标内存空间中存储的每个第一模块,所述目标内存空间为当前应用程序的内存空间,各所述第一模块中包括所述当前应用程序的主模块和至少一个非主模块;提取每个所述第一模块对应的模块信息,所述模块信息包含所述第一模块以及所述第一模块对应的各第二模块,所述第二模块为所述第一模块运行过程中依赖的模块;根据各所述模块信息构建所述当前应用程序的模块依赖树形图;根据所述模块依赖树形图的数量确定操作系统的越狱状态,所述当前应用程序安装在所述操作系统中。采用上述方法可以在不依赖iOS中特定API时,准确的实现越狱检测。

Description

越狱状态检测方法、装置、设备及存储介质
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种越狱状态检测方法、装置、设备及存储介质。
背景技术
iOS是一种移动操作系统,其具有封闭的特征以及严格的管理权限。iOS中可安装各类的应用程序,每个应用程序运行在自己的沙盒环境中。iOS的用户无法访问系统文件以及各应用程序的代码和数据。
越狱是指利用iOS的漏洞,使用户获取iOS的最高权限的操作。越狱后,用户可以访问和修改任意系统文件以及任意应用程序的代码和数据。随着黑灰产业的发展,越来越多的黑灰产业工作人员利用越狱的方式篡改应用程序的代码和数据,以牟取不正当利润。例如,通过越狱插件修改iOS中付费应用程序的代码,以破解应用程序的付费功能,这样严重影响了应用程序开发者的利益。因此,检测iOS是否越狱是保证iOS安全运行的重要手段。
一些相关技术中,各应用程序可利用检测特征的方式检测iOS是否越狱。举例而言,iOS被越狱后,越狱插件通常安装在/Library/MobileSubstrate/DynamicLibraries目录下,而正常情况(非越狱)下,iOS不包含该目录,因此,将该目录作为特征,通过调用access等应用程序接口(Application Programming Interface,API)检测该特征是否存在,若存在,则确定iOS被越狱。一些相关技术中,各应用程序还可通过检测路径读取权限的方式检测iOS是否越狱。举例而言,调用write等API在应用程序沙盒外的目录中写入文件,如果具有写入权限,则说明iOS被越狱。由上述内容可知,检测iOS是否越狱时,需要利用iOS的一些特定API。然而,iOS被越狱后,越狱插件的权限大于应用程序的权限,越狱插件可对特定的API进行篡改,以欺骗应用程序,使应用程序无法准确的检测出iOS是否越狱。
综上,如何在不依赖iOS中特定API的前提下实现越狱检测,成为了亟需解决的技术问题。
发明内容
本申请实施例提供了一种越狱状态检测方法、装置、设备及存储介质,以在不依赖iOS中特定API时,准确的实现越狱检测。
第一方面,本申请实施例提供了一种越狱状态检测方法,包括:
获取目标内存空间中存储的每个第一模块,所述目标内存空间为当前应用程序的内存空间,各所述第一模块中包括所述当前应用程序的主模块和至少一个非主模块;
提取每个所述第一模块对应的模块信息,所述模块信息包含所述第一模块以及所述第一模块对应的各第二模块,所述第二模块为所述第一模块运行过程中依赖的模块;
根据各所述模块信息构建所述当前应用程序的模块依赖树形图;
根据所述模块依赖树形图的数量确定操作系统的越狱状态,所述当前应用程序安装在所述操作系统中。
第二方面,本申请实施例还提供了一种越狱状态检测装置,包括:
第一获取模块,用于获取目标内存空间中存储的每个第一模块,所述目标内存空间为当前应用程序的内存空间,各所述第一模块中包括所述当前应用程序的主模块和至少一个非主模块;
信息提取模块,用于提取每个所述第一模块对应的模块信息,所述模块信息包含所述第一模块以及所述第一模块对应的各第二模块,所述第二模块为所述第一模块运行过程中依赖的模块;
图构建模块,用于根据各所述模块信息构建所述当前应用程序的模块依赖树形图;
状态确定模块,用于根据所述模块依赖树形图的数量确定操作系统的越狱状态,所述当前应用程序安装在所述操作系统中。
第三方面,本申请实施例还提供了一种计算机设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的越狱状态检测方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的越狱状态检测方法。
上述越狱状态检测方法、装置、设备及存储介质,通过读取当前应用程序的目标内存空间中存储的各第一模块,根据第一模块提取相应的模块信息,该模块信息表明第一模块以及其依赖的第二模块,之后,根据模块信息构建表明各模块间依赖关系的模块依赖树形图,并根据模块依赖树形图的数量确定操作系统的越狱状态的技术手段,无需依赖iOS中特定的API,实现了无特征检测,提高了越狱检测的准确性,有效的防止反检测,达到辅助风险控制的作用。
附图说明
图1为本申请实施例提供的一种越狱状态检测方法的流程图;
图2为本申请实施例提供的当前应用程序的内存布局示意图;
图3为本申请实施例提供的另一种越狱状态检测方法的流程图;
图4为本申请实施例提供的Mach-O格式的文件结构示意图;
图5为本申请实施例提供的第二数组示意图;
图6为本申请实施例提供的一种模块依赖树形图的第一初始图;
图7为图6所示的模块依赖树形图更新后的模块依赖树形图;
图8为图7所示的模块依赖树形图更新后的模块依赖树形图;
图9为图8所示的模块依赖树形图更新后的模块依赖树形图;
图10为本申请实施例提供的一种模块依赖树形图;
图11为本申请实施例提供的一种模块依赖树形图的第二初始图;
图12为图11所示的模块依赖树形图更新后的模块依赖树形图;
图13为图12所示的模块依赖树形图更新后的模块依赖树形图;
图14为本申请实施例提供的已越狱状态下第一模块依赖树形图;
图15为本申请实施例提供的已越狱状态下第二模块依赖树形图;
图16为本申请实施例提供的一种越狱状态检测装置的结构示意图;
图17是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
本申请实施例提供的越狱状态检测方法可以由越狱状态检测设备执行,该越狱状态检测设备为计算机设备,该计算机设备可以通过软件和/或硬件的方式实现,该计算机设备可以是两个或多个物理实体构成,也可以是一个物理实体构成。实施例中,计算机设备为用户使用的设备,例如,计算机设备为手机、平板电脑、笔记本电脑、台式电脑等。
示例性的,计算机设备安装的操作系统为iOS,实施例中,以iOS的系统版本为iOS10或iOS 10以后为例进行描述。该操作系统下可安装至少一个应用程序,该应用程序可以为操作系统自带的应用程序,也可以为从第三方设备或后台服务器中下载的应用程序。其中,计算机设备也可以为应用程序本身。可选的,应用程序除了实现自带的功能外,还可以对iOS的越狱状态进行检测,其中,自带的功能可根据实际情况设置,例如,应用程序自带的功能为购物功能、导航功能或教学功能等。
具体的,图1为本申请实施例提供的一种越狱状态检测方法的流程图,参考图1,该越狱状态检测方法具体包括:
步骤110、获取目标内存空间中存储的每个第一模块,目标内存空间为当前应用程序的内存空间,各第一模块中包括当前应用程序的主模块和至少一个非主模块。
示例性的,当前应用程序是指当前运行的应用程序。操作系统未被越狱时,运行当前应用程序包括运行应用程序的主代码(程序)以及所依赖的各模块,其中,模块是为完成某一功能所需要的一段代码或子代码。依赖的模块是指应用程序运行过程中需要调用的模块。依赖的模块可以是当前应用程序自带的模块、操作系统库中的模块或者是操作系统第三方库中的模块。进一步的,操作系统被越狱后,若想要篡改应用程序的代码或数据,则将具有篡改程序功能的模块注入到当前应用程序的运行环境中,以实现篡改应用程序的代码或数据。或者,操作系统被越狱后,即使不安装越狱插件,也可以在当前应用程序的运行环境中注入一模块已达到加载非法插件的目的。此时,当前应用程序加载的模块不仅包括主代码及依赖的各模块,还包括越狱后注入的模块。可理解,在当前应用程序启动前,操作系统库中的模块或操作系统第三方库中的模块已经加载到当前应用程序的内存空间中,并且,越狱后注入的模块也加载到当前应用程序的内存空间中。此时,当前应用程序的内存空间中记录有当前应用程序运行过程中的主代码、依赖的各模块以及越狱后注入的各模块。需说明,iOS提供的_dyld_image_count和_dyld_get_image_header等与动态链接相关的API可获取到当前应用程序已经加载的所有模块,但是,iOS被越狱后,这类API易被篡改,以达到隐藏越狱后注入的模块的效果,而内存空间中一直保留越狱注入的模块,因此,实施例中,通过遍历当前应用程序的内存空间的方式确定内存空间中包含的各模块。
具体的,目标内存空间是指当前应用程序的内存空间,目标内存空间为虚拟内存空间,其可为内存页的形式。一个实施例中,当前应用程序的内存布局由内核内存空间和当前应用程序的内存空间组成。例如,图2为本申请实施例提供的当前应用程序的内存布局示意图,其示出一种简化的虚拟内存布局。参考图2,内存布局包括内核内存空间和应用程序的内存空间。其中,内核内存空间用于存储内核数据,内核可理解为管理操作系统资源的代码,内核用于将应用程序与操作系统硬件进行隔离,并提供基本的操作系统服务。应用程序的存储空间中记录n个模块。可理解,一个模块是一个文件,其采用的文件格式可根据实际情况设定,例如,各模块采用Mach-O格式,Mach-O格式是iOS的可执行文件的格式。进一步的,虚拟存储空间中还保存有栈内存和堆内存,其中,栈内存的空间大小由操作系统分配,并且在当前应用程序运行期间固定不变。堆内存中存储非固定大小的值。需说明,实际应用中,应用程序的内存空间还可存储其他的内容。
进一步的,目标内存空间具有可执行的属性,通过设定的API可遍历目标内存空间。一个实施例中,iOS中vm_region或vm_region_64系列的API提供了遍历虚拟内存空间的功能,因此,通过该API遍历目标内存空间,以获取目标内存空间中存储的各模块。实施例中,将目标内存空间中存储的模块记为第一模块。第一模块包括主模块和非主模块,其中,主模块是指当前应用程序主代码,非主模块是指依赖的各模块以及越狱后注入的模块。一般而言,非主模块为多个。
一个实施例中,每个模块均包含模块标志,该模块标志用于指示所属的文件为模块。因此,遍历目标内存空间时,先查找模块标志,进而通过模块标志定位出第一模块,以实现获取目标内存空间中的全部第一模块。可选的,获取第一模块是指获取第一模块的首地址,通过首地址可在目标内存空间中定位到第一模块。后续步骤通过读取第一模块的首地址便可以找到对应的第一模块。
步骤120、提取每个第一模块对应的模块信息,模块信息包含第一模块以及第一模块对应的各第二模块,第二模块为第一模块运行过程中依赖的模块。
示例性的,第一模块中记录有第一模块的类型、第一模块运行时需要的全部段加载命令以及第一模块的代码、数据和符号等内容。其中,段加载命令可定义第一模块运行中需要加载的模块以及第一模块的一些属性或符号在数据中的位置等。可理解,第一模块运行中需要加载的模块为第一模块运行过程中依赖的模块,实施例中,将第一模块运行过程中依赖的模块记为第二模块。可选的,当需要调用第二模块时,对应的段加载命令中写明需要调用的第二模块的全路径名等内容。此时,通过读取各段加载命令便可以确定需要调用的全部第二模块。
需说明,每个第一模块对应至少一个第二模块。可理解,当第一模块为主模块时,其对应的第二模块可为目标内存空间中的非主模块,也可以为其他模块。当第一模块为非主模块时,其对应的第二模块也可以为目标内存空间中的其他非主模块或者是其他模块。不同第一模块可对应至少一个相同的第二模块,也可对应不同的第二模块。一般而言,其他的第一模块不会依赖越狱后注入的模块。越狱后注入的模块可依赖至少一个其他的第一模块。
进一步的,确定第一模块依赖的第二模块后,生成第一模块的模块信息。该模块信息包含第一模块以及其对应的各第二模块。通过模块信息可明确第一模块和第二模块间的依赖关系。一个实施例中,模块信息包含第一模块的名称和其对应的各第二模块的名称。可理解,模块信息中还包含第一模块的其他信息,其中,其他信息的内容实施例不作限定。此时,一个模块信息可通过如下代码表示:
可理解,某个第一模块对应的第二模块为另一个第一模块时,则该第二模块存在相应的模块信息。
步骤130、根据各模块信息构建当前应用程序的模块依赖树形图。
其中,树形图是数据树的图形表示形式,以父子层次结构来组织对象。确定每个第一模块的模块信息后,便可以构建模块依赖树形图。其中,模块依赖树形图可表示出当前应用程序对应的各第一模块以及其依赖的第二模块。模块依赖树形图中的一个节点对应一个模块。一个实施例中,每个节点包含其对应模块的模块信息、依赖的模块个数(即该节点下子节点的个数)以及依赖的模块节点列表(即该节点下各子节点的列表)。此时,每个节点对应的代码如下:
示例性的,某个模块和其依赖的模块在模块依赖树形图中为父子关系,且通过箭头连接。同一模块在模块依赖树形图中仅出现一次。在构建模块依赖树形图时,若已经添加了某个模块,则后续构建过程中,如果找到其他模块也依赖该模块,则忽略该模块,避免该模块重复出现在模块依赖树形图中。一个实施例中,将当前应用程序的主模块作为模块依赖树形图的根节点,之后,根据模块信息找到主模块依赖的第二模块,以及当第二模块为第一模块时再根据模块信息找到其所依赖的第二模块,以此类推,直到找到可依赖的全部第二模块,并在上述过程中将找到的第二模块添加在模块依赖树形图中,以构建模块依赖树形图。可理解,若某个第一模块不是其他第一模块所依赖的模块,则该第一模块不会被添加在上述模块依赖树形图中,因此,可将该第一模块作为另一模块依赖树形图的根节点,并根据该第一模块的模块信息构建另一模块依赖树形图。按照这类方式,便可以构建第一模块对应的全部模块依赖树形图。
需说明,模块依赖树形图的的构建规则可根据实际情况设定,例如,采用深度优先算法构建模块依赖树形图,此时,构建根节点后,将根节点作为父节点,之后,根据模块信息在父节点下添加一个子节点,之后,将子节点作为父节点,并根据模块信息在该父节点下添加一个子节点,以此类推,直到某个父节点下不存在子节点。之后,将该父节点作为子节点并回退到该子节点的父节点,并继续按照上述方式为父节点添加一个子节点,直到无法添加新的节点后,确定一个模块依赖树形图构建完成。再如,采用广度优先算法构建模块依赖树形图。此时,构建根节点后,将根节点作为父节点,之后,根据模块信息在该父节点下添加全部子节点,之后,将各子节点作为父节点,并根据模块信息在各该父节点下再添加全部子节点,之后,再次将各子节点作为父节点,重复上述操作,直到无法添加新的子节点后,确定一个模块依赖树形图构建完成。
步骤140、根据模块依赖树形图的数量确定操作系统的越狱状态,当前应用程序安装在操作系统中。
操作系统正常情况(未被越狱)时,当前应用程序依赖的各模块(第一模块和第二模块)均在同一个模块依赖树形图中。但是,操作系统被越狱后,越狱注入的模块不被其他的第一模块依赖,因此,越狱注入的模块以及其依赖的第二模块会形成至少一个独立的模块依赖树形图。据此,实施例中通过模块依赖树形图的数量可以确定操作系统的越狱状态。其中,越狱状态包括已越狱状态和未越狱状态。此时,本步骤具体为:若模块依赖树形图为多个,则确定操作系统为已越狱状态;若模块依赖树形图为一个,则确定操作系统为未越狱状态。示例性的,判断模块依赖树形图的数量是否为一个,若为一个,则说明当前应用程序仅生成了一个模块依赖树形图,因此,将操作系统确定为未越狱状态。若该数量为多个,则说明当前应用程序生成了多个模块依赖树形图,因此,将操作系统确定为已越狱状态,即操作系统为越狱后的操作系统。
上述,通过读取当前应用程序的目标内存空间中存储的各第一模块,根据第一模块提取相应的模块信息,该模块信息表明第一模块以及其依赖的第二模块,之后,根据模块信息构建表明各模块间依赖关系的模块依赖树形图,并根据模块依赖树形图的数量确定操作系统的越狱状态的技术手段,无需依赖iOS中特定API,便可以实现越狱检测,即实现了无特征检测,并且,提高了越狱检测的准确性,有效的防止反检测,达到辅助风险控制的作用。
图3为本申请实施例提供的另一种越狱状态检测方法的流程图。本实施例实在上述实施例的基础上进行具体化。参考图3,该越狱状态检测方法包括:
步骤210、获取目标内存空间中存储的每个第一模块,目标内存空间为当前应用程序的内存空间,各第一模块中包括当前应用程序的主模块和至少一个非主模块。
一个实施例中,本步骤具体包括步骤211-步骤213:
步骤211、依次读取目标内存空间中存储的各文件标志。
模块在目标内存空间中以文件的形式存储。一个实施例中,目标内存空间中存储的每个文件均有对应的文件标志,通过文件标志可区分文件的类型。其中,文件的类型实施例不作限定,例如,文件的类型包括模块、链接器、可执行程序等。目标内存空间存储文件时同步存储文件标志。
示例性的,利用vm_region/vm_region_64系列API提供的遍历虚拟内存空间的功能,在目标内存空间中依次读取各文件标志。
步骤212、若文件标志属于模块标志,则将文件标志对应的文件识别为第一模块。
读取文件标志后,识别该文件标志,以确定其是否属于模块标志,若属于模块标志,则确定相应的文件为模块,并将该模块识别为第一模块。若不属于模块标志,则确定相应的文件不是模块。
步骤213、记录第一模块的首地址,以通过首地址获取相应的第一模块。
示例性的,识别到第一模块后,记录第一模块的首地址,以通过首地址在目标内存空间中查找第一模块。
一个实施例中,第一模块的首地址存放在第一数组中。具体的,首地址存放在数组中,实施例中,将该数组记为第一数组。可理解,每识别到一个第一模块后,均获取该第一模块的首地址并加入第一数组中。
举例而言,读取目标内存空间,识别当前读取的文件标志。若文件标志是模块标志,则获取当前模块标志对应模块的首地址,并将该首地址加入第一数组中。若文件标志不是模块标志,则放弃处理,并继续读取目标内存空间,直到全部文件标志均被读取完毕,返回读取错误,即确认遍历完目标内存空间,确认结束本次流程。
步骤220、提取每个第一模块对应的模块信息,模块信息包含第一模块以及第一模块对应的各第二模块,第二模块为第一模块运行过程中依赖的模块。
实施例中,第一模块为Mach-O格式的文件。其中,图4为本申请实施例提供的Mach-O格式的文件结构示意图。参考图4,该Mach-O格式的文件包括文件头部(Header)、加载命令(Load commands)和数据(Data),其中,头部文件中定义了文件的类型,如定义文件为模块、链接器或可执行程序等。需说明,根据首地址获取第一模块时具体为根据首地址获取第一模块的头部文件。进一步的,加载命令中存放了该文件运行时需要的所有段加载命令(Segment command),段加载命令中定义了该文件运行时依赖的其他模块和/或该文件本身的一些符号和属性在数据中的位置。例如,图4所示的文件中包含两个段加载命令,分别记为段加载命令1和段加载命令2。进一步的,数据保存了文件的代码、数据和符号等内容。其中,每个段加载命令在数据中存在对应的段数据,该段数据所在位置是段加载命令指出的文件本身的符号及属性等内容的位置。每个段数据可分为多节数据,如图4中,段加载命令1在数据中对应段数据1(Segment1),段数据1包括一节段1数据(Section 1date),一节段2数据(Section 2date),一节段3数据(Section3date)。
由于每个第一模块处理方式相同,因此,实施例中,以处理一个第一模块为例进行描述。可理解,每个第一模块均按所描述的处理方式进行处理后,可得到每个第一模块的模块信息。此时,本步骤包括步骤221-步骤223:
步骤221、读取第一模块记录的每个段加载命令。
可选的,若首地址存放在第一数组中,则通过第一数组获取第一模块的首地址。之后,通过第一模块的首地址在目标存储空间中读取第一模块的头部文件。读取头部文件后,从读取头部文件中读取加载命令中包含的段加载命令的个数,并依次读取每个段加载命令。
步骤222、若段加载命令包含依赖模块标志,则将段加载命令对应的模块确定为第二模块。
实施例中,段加载命令中定义了该文件运行时依赖的其他模块,并通过依赖模块标志将其他模块与自身第一模块进行区分。依赖模块标志用于指示采用该依赖模块标志的段加载命令中定义了依赖的其他模块,可理解,段加载命令中定义了依赖的其他模块具体为段加载命令里包含了其他模块的全路径名,通过该全路径名可定位到对应的模块。一个实施例中,使用LC_ID_DYLIB标识自身第一模块,使用LC_LOAD_DYLIB和LC_LOAD-WEAK_DYLIB标识第一模块依赖的模块,即LC_LOAD_DYLIB和LC_LOAD-WEAK_DYLIB为依赖模块标志。因此,读取一个段加载命令,若其类型为LC_LOAD_DYLIB或LC_LOAD-WEAK_DYLIB,则确定读取到依赖模块标志,获取段加载命令包含的模块作为第二模块,即通过全路径名确定第二模块的模块名。若其类型不是LC_LOAD_DYLIB和LC_LOAD-WEAK_DYLIB,则确定未读取到依赖模块标志,并继续读取下一个段加载命令。由上述内容可知,段加载命令可包含依赖模块标志,也可以不包含依赖模块标志,当不包含依赖模块标志时,直接读取下一个段加载命令。读取全部段加载模块后可获取当前第一模块对应的全部第二模块。
步骤223、根据各第二模块和第一模块生成第一模块的模块信息。
具体的,将第一模块的模块名、第二模块的模块名和第一模块需要的其他信息整合为第一模块的模块信息。
一个实施例中,第一模块的模块信息存放在第二数组中。具体的,模块信息存放在数组中,实施例中,将该数组记为第二数组。可理解,每获取一个第一模块的模块信息后,将模块信息加入第二数组中,以便后续构建模块依赖树形图时通过第二数组读取各模块信息。例如,图5为本申请实施例提供的第二数组示意图,参考图5,其包含n个第一模块的模块信息。可选的,主模块的模块信息放置在第二数组的第一个位置,即模块信息1为主模块的模块信息。
步骤230、根据各模块信息构建当前应用程序的模块依赖树形图。
构建模块依赖树形图中,模块依赖树形图中每添加一个节点,均对该节点对应的模块(第一模块或第二模块)进行标记,以将该模块与其他未添加到模块依赖树形图的模块进行区分,此时,被标记的模块也可认为是被选择的模块。一个实施例中,采用深度优先算法构建模块依赖树形图。此时,该步骤具体包括步骤231-步骤238:
步骤231、选择主模块作为模块依赖树形图的根节点,并将根节点作为当前节点。
步骤232、读取当前节点对应的模块信息中记录的各第二模块。
步骤233、判断读取的各第二模块中是否存在未被选择的第二模块。若存在未被选择的第二模块,则执行步骤234。若读取的模块信息中不存在未被选择的第二模块,则执行步骤235。
步骤234、选择一未被选择的第二模块作为当前节点的下一级节点,并将下一级节点更新为当前节点。返回执行步骤232。
步骤235、确认当前节点是否存在上一级节点。若存在,则执行步骤236。若不存在,则确定遍历不到新的未被选择的第二模块。执行步骤237。
步骤236、回退到当前节点的上一级节点,并将上一级节点更新为当前节点。返回执行步骤232。
步骤237、根据各第一模块的模块信息确定是否存在未被选择的第一模块。若存在未被选择的第一模块,则执行步骤238。若不存在未被选择的第一模块,则确定每个第一模块均被选择,停止构建模块依赖树形图。
步骤238、选择一未被选择的第一模块作为另一模块依赖树形图的根节点,并将根节点作为当前节点。返回执行步骤232。
示例性的,将主模块作为一个模块依赖树形图的根节点。并且,对该模块进行标记。之后,将根节点作为当前节点,并进行处理。其中,当前节点的处理方式为:读取当前节点对应的模块信息中记录的各第二模块,之后,确定各第二模块中是否存在未被选择的第二模块,其中,未被选择的第二模块是指还未出现在模块依赖树形图的第二模块,可通过判断第二模块是否被标记的方式确定其是否被选择。若存在未被选择的第二模块,则选择一个未被选择的第二模块作为当前节点下的一个节点(子节点),并对所选择的第二模块进行标记。需说明,若未被选择的第二模块为多个,则只选择一个未被选择的第二模块,其他未被选择的第二模块暂不处理。之后,将新添加的节点更新为当前节点,并继续按照上述方式进行处理。由于每个第一模块对应的第二模块中可包含其他的第一模块,因此,将其他的第一模块作为第二模块添加在模块依赖树形图时,可以继续获取该第二模块的模块信息,以继续添加其他的模块。进一步的,若当前节点不存在对应的模块信息或者是当前节点对应的模块信息中各第二模块均被标记,则确定当前节点对应的各第二模块中不存在未被选择的第二模块,进而说明当前节点为最底层的节点,无法再为其添加子节点。此时,回退到当前节点的上一级节点(父节点),并将上一级节点继续作为当前节点进行处理,按照上述方式进行操作后,若回退到根节点后,确定根节点的每个第二模块均被标记,则无法再回退到根节点的上一级节点,此时,若继续将根节点作为当前节点也不会再遍历到新的未被选择的第二模块,因此,可以确定当前的模块依赖树形图构造完毕。之后,再次遍历全部的模块信息,以确定是否存在未添加到模块依赖树形图中的第一模块。若存在未添加到模块依赖树形图中的第一模块,则说明第一模块与以构建的模块依赖树形图之间没有任何的依赖关系,因此,选择第一模块作为新的模块依赖树形图的根节点并再次构建一模块依赖树形图,之后,再次遍历全部的模块信息,直到确定不存在未添加到模块依赖树形图中的第一模块为止,即每个第一模块均被选择为止。此时,每个第一模块均被添加到相应的模块依赖树形图中。
需说明,将各节点作为当前节点仅是为了解释深度优先算法,实际应用中,也可以直接对各节点进行操作,无需限定当前节点。
下面以一个模块依赖树形图为例,描述模块依赖树形图构造方案,具体的,将主模块作为模块依赖树形图的根节点,并在主模块对应的模块信息中选择未被标记的模块1(第二模块)作为根节点下的一个子节点,例如,图6为本申请实施例提供的一种模块依赖树形图的第一初始图。参考图6,其示出了根节点和一个子节点间的连接示意图。之后,标记模块1,并在模块1对应的模块信息中选择未被标记的模块11(第二模块)作为模块1下的一个节点(子节点)。此时,图6所示的模块依赖树形图更新为图7所示的模块依赖树形图。之后,标记模块11,并在模块11对应的模块信息中选择未被标记的模块111(第二模块)作为模块11下的一个子节点。此时,图7所示的模块依赖树形图更新为图8所示的模块依赖树形图。之后,标记模块111。确定模块111对应的模块信息中不存在未被标记的第二模块,回退到模块11。在模块11对应的模块信息中选择未被标记的模块112(第二模块)作为模块11下的另一个子节点。此时,图8所示的模块依赖树形图更新为图9所示的模块依赖树形图。之后,标记模块112。确定模块112对应的模块信息中不存在未被选择的第二模块,回退到模块11。确定模块11对应的模块信息也不存在未被选择的第二模块,回退到模块1,之后,再次按照上述流程在模块1对应的模块信息中选择未被标记的第二模块,直到模块1对应的全部第二模块均被标记后,回退到根节点,并再次按照上述流程在根节点对应的模块信息中选择未被标记的第二模块,直到遍历不到新的未被标记的第二模块后,确定模块依赖树形图构建完成。此时,构建依赖树形图如图10所示。图10为本申请实施例提供的一种模块依赖树形图。可理解,图6至图9分别为图10所示的模块依赖树形图构建过程中的部分步骤。
另一个实施例中,采用广度优先算法构建模块依赖树形图。此时,该步骤具体包括步骤239-步骤2318:
步骤239、选择主模块作为模块依赖树形图的根节点,并将根节点作为当前层中的节点。
步骤2310、在当前层中选择一节点作为当前节点。
步骤2311、读取当前节点对应的模块信息中记录的各第二模块。
步骤2312、判断读取的各第二模块中是否存在未被选择的第二模块。若存在未被选择的第二模块,则执行步骤2313。若不存在未被选择的第二模块,则执行步骤2314。
步骤2313、将每个未被选择的第二模块均选择为当前节点的子节点。执行步骤2314。
步骤2314、判断当前层中的每个节点是否均作为当前节点。若是,则执行步骤2315。若否,则在当前层中选择另一节点更新为当前节点,返回执行步骤2311。
步骤2315、确定当前层中各节点是否存在子节点。若存在,则执行步骤2316。若不存在,则确定遍历不到新的未被选择的第二模块。执行步骤2137。
步骤2316、将当前层中各节点下的全部子节点更新为当前层中的节点。返回执行步骤2310。
步骤2137、根据各第一模块的模块信息确定是否存在未被选择的第一模块。若存在未被选择的第一模块,则执行步骤2318。若不存在未被选择的第一模块,则确定每个第一模块均被选择,停止构建模块依赖树形图。
步骤2318、选择一未被选择的第一模块作为另一模块依赖树形图的根节点,并将根节点作为当前层中的节点。返回执行步骤2310。
示例性的,将主模块作为一个模块依赖树形图的根节点。对该模块进行标记。之后,将根节点作为当前层中的节点,其中,当前层中的节点包括当前层级内的全部节点,例如,连接同一个父节点的各子节点属于同一层级,并且,多个父节点属于同一层级时,各父节点连接的各子节点也属于同一层级。进一步的,在当前层中选择一个节点作为当前节点,并读取当前节点的模块信息中记录的各第二模块,之后,在各第二模块中选择全部未被选择的第二模块,并分别作为当前节点下的子节点。之后,将当前层中的每个节点均作为当前节点并进行上述处理后,可得到当前层中各节点的全部子节点。可理解,对于根节点而言,其对应的层级中只有一个节点,因此,对根节点处理完,便可以确定已处理完当前层的各节点。之后,将当前层中各节点的全部子节点更新为当前层中的节点,即将当前层的下一层作为当前层。之后,再次将当前层的各节点分别作为当前节点并进行上述处理,以得到当前层中各节点的全部子节点,可理解,某个节点不存在对应的模块信息或者其对应的各第二模块均被选择,则对该节点进行上述处理后确认该节点没有相应的子节点。若当前层的每个节点均没有相应的子节点,则说明没有遍历到新的未被选择的第二模块,因此,确定当前的模块依赖树形图构造完毕。之后,再次遍历全部的模块信息,以确定是否存在未添加到模块依赖树形图中的第一模块。若存在未添加到模块依赖树形图中的第一模块,则说明第一模块与以构建的模块依赖树形图之间没有任何的依赖关系,因此,选择第一模块作为新的模块依赖树形图的根节点并再次构建一模块依赖树形图,之后,再次遍历全部的模块信息,直到确定不存在未添加到模块依赖树形图中的第一模块为止。此时,每个第一模块均被标记。
需说明,将各层级作为当前层,并将当前层的各节点作为当前节点仅是为了解释广度优先算法,实际应用中,也可以直接对各节点进行操作,无需限定当前层和当前节点。
下面以一个模块依赖树形图为例,描述模块依赖树形图构造方案,具体的,将主模块作为模块依赖树形图的根节点,根据主模块对应的模块信息,确定未被标记的第二模块包括模块1、模块2、……、模块n,并将模块1、模块2、……、模块n分别作为根节点下的子节点。例如,图11为本申请实施例提供的一种模块依赖树形图的第二初始图。参考图11,其示出了根节点和其每个子节点间的连接示意图。之后,标记模块1至模块n,将模块1至模块n更新为当前层的节点。之后,选择模块1,并根据模块1对应的模块信息确定未被标记的第二模块包括模块11和模块12,并将模块11和模块12分别作为模块1的子节点。此时,图11所示的模块依赖树形图更新为图12所示的模块依赖树形图。之后,标记模块11和模块12。之后,选择模块2,并根据模块2对应的模块信息确定未被标记的第二模块包括模块21和模块22,并将模块21和模块22分别作为模块2的子节点。此时,图12所示的模块依赖树形图更新为图13所示的模块依赖树形图。之后,标记模块21和模块22。按照上述方式继续确定模块3至模块n下的子节点。之后,将模块1至模块n下的各子节点作为当前层的节点,并分别确定当前层各节点的子节点。例如,参考图13,分别确定模块11的子节点、模块12的子节点、模块21的子节点,以此类推,直到该层中每个节点均处理完毕。之后,将当前最低层的子节点更新为当前层的节点并重复上述过程,直到遍历不到未被标记的第二模块时确定模块依赖树形图构建完成。此时,构建的模块依赖树形图如图10所示。可理解,图11至图13分别为采用广度优先算法构建图10所示的模块依赖树形图时的部分步骤。
需说明,上述对各模块的操作均可理解为对模块名的操作。
步骤240、获取当前应用程序的证书签名。
在上述实施例的基础上,越狱后的操作系统中,用户可对第一模块的段加载命令(Load Commands)进行修改,以增加依赖模块标志,进而将依赖模块标志指向越狱注入的模块。例如,在段加载命令中增加LC_LOAD_DYLIB,该LC_LOAD_DYLIB用于指向越狱注入的模块,即将段加载命令的类型设置为LC_LOAD_DYLIB,并在段加载命令中增加越狱注入的模块的全路径名。此时,越狱注入的模块与第一模块间存在依赖关系,无法根据越狱注入的模块构建单独的模块依赖树形图。例如,图14为本申请实施例提供的已越狱状态下第一模块依赖树形图。参考图14,其左侧的模块依赖树形图为当前应用程序正常运行时的模块依赖树形图,右侧的模块依赖树形图为越狱注入的模块(即插件模块)对应的模块依赖树形图。当修改左侧模块依赖树形图的根节点的模块信息时,可以将越狱注入的模块作为根节点依赖的模块,此时,图14的模块依赖树形图转换为图15所示的模块依赖树形图,图15为本申请实施例提供的已越狱状态下第二模块依赖树形图。由图15可知,图14中两个模块依赖树形图合并成一个模块依赖树形图。此时,根据模块依赖树形图的数量检测越狱状态时易出现误检测的情况。因此,为了避免误检测的情况,实施例中,获取当前应用程序的证书签名,并通过证书签名确定当前应用该程序是否合法。
其中,证书签名是数字证书一种,其可证明当前应用程序的合法性。iOS中安装的应用程序具有统一的证书签名。实施例中,获取当前应用程序的证书签名。
步骤250、判断证书签名是否通过校验。若通过校验,则执行步骤260。若校验未通过,则执行步骤270。
示例性的,校验证书签名可确定当前应用程序是否合法。若当前应用程序合法,则证书签名校验成功,即证书签名通过校验。若当前应用程序不合法,则证书签名校验失败,即证书签名不会通过校验。
如果想要篡改模块信息(Mach-O格式的文件),只能是篡改主模块的模块信息或者当前应用程序打包后自带模块的模块信息,即只能篡改当前应用程序自身的文件。当前应用程序的文件被篡改后,其证书签名不会通过校验。一般而言,当操作系统被越狱后,其不会对应用程序的证书签名进行校验,但是,应用程序可自行对其证书签名进行校验。因此,实施例中,由当前应用程序对其自身的证书签名进行校验,并确定是否校验通过。若校验通过,则说明当前应用程序的文件未被篡改,执行步骤260。若校验未通过,则说明当前应用程序的模块信息(Mach-O格式的文件)被篡改,执行步骤270。
步骤260、根据模块依赖树形图的数量确定操作系统的越狱状态。
步骤270、确定操作系统为已越狱状态。
上述,通过读取目标内存空间中各文件标志,以在文件标志为模块标志时将其对应的文件作为第一模块,并获取第一模块的首地址,可实现准确的查找当前应用程序运行时使用的各模块。通过读取第一模块的段加载指令,并根据段加载指令中记载的依赖模块标志,可准确的提取各第一模块依赖的第二模块,进而得到表示依赖关系的模块信息,通过深度优先算法或广度优先算法可丰富模块依赖树形图的构建方式,以在应用时选择适用的构建方式。通过证书签名和模块依赖树形图相结合的方式检测越狱状态,可以在篡改Mach-O格式的文件时,准确识别出已越狱状态,保证检测结果。并且,上述过程无需依赖iOS中特定API,提高了越狱检测的准确性。
图16为本申请实施例提供的一种越狱状态检测装置的结构示意图,参考图16,该越狱状态检测装置包括:第一获取模块301、信息提取模块302、图构建模块303以及状态确定模块304。
其中,第一获取模块301,用于获取目标内存空间中存储的每个第一模块,目标内存空间为当前应用程序的内存空间,各第一模块中包括当前应用程序的主模块和至少一个非主模块;信息提取模块302,用于提取每个第一模块对应的模块信息,模块信息包含第一模块以及第一模块对应的各第二模块,第二模块为第一模块运行过程中依赖的模块;图构建模块303,用于根据各模块信息构建当前应用程序的模块依赖树形图;状态确定模块304,用于根据模块依赖树形图的数量确定操作系统的越狱状态,当前应用程序安装在所述操作系统中。
在上述实施例的基础上,状态确定模块304具体用于:若模块依赖树形图为多个,则确定操作系统为已越狱状态;若模块依赖树形图为一个,则确定操作系统为未越狱状态。
在上述实施例的基础上,该装置还包括:第二获取模块,用于根据模块依赖树形图的数量确定操作系统的越狱状态之前,获取当前应用程序的证书签名;校验判断模块,用于判断证书签名是否通过校验;操作执行模块,用若通过校验,则执行根据模块依赖树形图的数量确定操作系统的越狱状态的操作。
在上述实施例的基础上,该装置还包括:已越狱状态确定模块,用于若未通过校验,则确定操作系统为已越狱状态。
在上述实施例的基础上,第一获取模块301包括:标志读取单元,用于依次读取目标内存空间中存储的各文件标志;模块识别单元,用于若文件标志属于模块标志,则将文件标志对应的文件识别为第一模块;地址记录单元,用于记录第一模块的首地址,以通过首地址获取相应的第一模块。
在上述实施例的基础上,信息提取模块302包括:命令读取单元,用于读取第一模块记录的每个段加载命令;标志确定单元,用于若段加载命令包含依赖模块标志,则将所述段加载命令对应的模块确定为第二模块;信息生成单元,用于根据各第二模块和第一模块生成第一模块的模块信息。
在上述实施例的基础上,第一模块为Mach-O格式的文件。
在上述实施例的基础上,图构建模块303包括:第一选择单元,用于选择主模块作为模块依赖树形图的根节点,并将根节点作为当前节点;第一读取单元,用于读取当前节点对应的模块信息中记录的各第二模块;第一判断单元,用于判断读取的各第二模块中是否存在未被选择的第二模块;第二选择单元,用于若存在未被选择的第二模块,则选择一未被选择的第二模块作为当前节点的下一级节点,并将下一级节点更新为当前节点;第一返回单元,用于返回执行读取当前节点对应的模块信息中记录的各第二模块的操作,直到读取的各模块信息中不存在未被选择的第二模块;回退单元,用于回退到当前节点的上一级节点,并将上一级节点更新为当前节点;第二返回单元,用于返回执行读取当前节点对应的模块信息中记录的各第二模块的操作,直到遍历不到新的未被选择的第二模块;第二判断单元,用于根据各第一模块的模块信息确定是否存在未被选择的第一模块;第三选择单元,用于若存在未被选择的第一模块,则选择一未被选择的第一模块作为另一模块依赖树形图的根节点,并将根节点作为当前节点;第三返回单元,用于返回执行读取当前节点对应的模块信息中记录的各第二模块的操作,直到每个第一模块均被选择。
在上述实施例的基础上,图构建模块303包括:第四选择单元,用于选择主模块作为模块依赖树形图的根节点,并将根节点作为当前层中的节点;第五选择单元,用于在当前层中选择一节点作为当前节点;第二读取单元,用于读取当前节点对应的模块信息中记录的各第二模块;第三判断单元,用于判断读取的各第二模块中是否存在未被选择的第二模块;第六选择单元,用于若存在未被选择的第二模块,则将每个未被选择的第二模块均选择为当前节点的子节点;第四返回单元,用于在当前层中选择另一节点更新为当前节点,并返回执行读取当前节点对应的模块信息中记录的各第二模块的操作,直到当前层中每个节点均作为当前节点;第五返回单元,用于将当前层中各节点下的全部子节点更新为当前层中的节点,返回执行在当前层中选择一节点作为当前节点的操作,直到遍历不到新的未被选择的第二模块;第四判断单元,用于根据各第一模块的模块信息确定是否存在未被选择的第一模块;第七选择单元,用于若存在未被选择的第一模块,则选择一未被选择的第一模块作为另一模块依赖树形图的根节点,并将根节点作为当前层中的节点;第六返回单元,用于返回执行在所述当前层中选择一节点作为当前节点的操作,直到每个第一模块均被选择。
本实施例提供的越狱状态检测装置可用于执行上述实施例提供的越狱状态检测方法,具备相应的功能和有益效果。
本申请实施例还提供了一种计算机设备,该计算机设备可集成本申请实施例提供的越狱状态检测装置。图17是本申请实施例提供的一种计算机设备的结构示意图。参考图17,该计算机设备包括:输入装置43、输出装置44、存储器42以及一个或多个处理器41;存储器42,用于存储一个或多个程序;当一个或多个程序被一个或多个处理器41执行,使得一个或多个处理器41实现如上述实施例提供的越狱状态检测方法。其中输入装置43、输出装置44、存储器42和处理器41可以通过总线或者其他方式连接,图17中以通过总线连接为例。
存储器42作为一种计算设备可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本申请任意实施例所述的越狱状态检测方法对应的程序指令/模块(例如,越狱状态检测装置中的第一获取模块301、信息提取模块302、图构建模块303以及状态确定模块304)。输入装置43可用于接收输入的数字或字符信息,以及产生与设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。处理器41通过运行存储在存储器42中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的越狱状态检测方法。
上述提供的计算机设备可用于执行上述任意实施例提供的越狱状态检测方法,具备相应的功能和有益效果。
本申请实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本申请实施例提供的越狱状态检测方法,具备相应的功能和有益效果。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本申请可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务进程,或者网络设备等)执行本申请各个实施例所述的越狱状态检测方法。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (12)

1.一种越狱状态检测方法,其特征在于,包括:
获取目标内存空间中存储的每个第一模块,所述目标内存空间为当前应用程序的内存空间,各所述第一模块中包括所述当前应用程序的主模块和至少一个非主模块,所述主模块包括当前应用程序主代码,所述非主模块包括依赖的各模块以及越狱后注入的模块;
提取每个所述第一模块对应的模块信息,所述模块信息包含所述第一模块以及所述第一模块对应的各第二模块,所述第二模块为所述第一模块运行过程中依赖的模块;
根据各所述模块信息构建所述当前应用程序的模块依赖树形图;
根据所述模块依赖树形图的数量确定操作系统的越狱状态,所述当前应用程序安装在所述操作系统中。
2.根据权利要求1所述的越狱状态检测方法,其特征在于,所述根据所述模块依赖树形图的数量确定操作系统的越狱状态包括:
若所述模块依赖树形图为多个,则确定操作系统为已越狱状态;
若所述模块依赖树形图为一个,则确定所述操作系统为未越狱状态。
3.根据权利要求1所述的越狱状态检测方法,其特征在于,所述根据所述模块依赖树形图的数量确定操作系统的越狱状态之前,还包括:
获取所述当前应用程序的证书签名;
判断所述证书签名是否通过校验;
若通过校验,则执行根据所述模块依赖树形图的数量确定操作系统的越狱状态的操作。
4.根据权利要求3所述的越狱状态检测方法,其特征在于,还包括:
若未通过校验,则确定所述操作系统为已越狱状态。
5.根据权利要求1所述的越狱状态检测方法,其特征在于,所述获取目标内存空间中存储的每个第一模块包括:
依次读取目标内存空间中存储的各文件标志;
若所述文件标志属于模块标志,则将所述文件标志对应的文件识别为第一模块;
记录所述第一模块的首地址,以通过所述首地址获取相应的第一模块。
6.根据权利要求1所述的越狱状态检测方法,其特征在于,所述提取每个所述第一模块对应的模块信息包括:
读取所述第一模块记录的每个段加载命令;
若所述段加载命令包含依赖模块标志,则将所述段加载命令对应的模块确定为第二模块;
根据各所述第二模块和所述第一模块生成所述第一模块的模块信息。
7.根据权利要求6所述的越狱状态检测方法,其特征在于,所述第一模块为Mach-O格式的文件。
8.根据权利要求1所述的越狱状态检测方法,其特征在于,所述根据各所述模块信息构建所述当前应用程序的模块依赖树形图包括:
选择所述主模块作为模块依赖树形图的根节点,并将所述根节点作为当前节点;
读取所述当前节点对应的模块信息中记录的各第二模块;
判断读取的各所述第二模块中是否存在未被选择的第二模块;
若存在未被选择的第二模块,则选择一所述未被选择的第二模块作为当前节点的下一级节点,并将所述下一级节点更新为当前节点;
返回执行读取所述当前节点对应的模块信息中记录的各第二模块的操作,直到读取的模块信息中不存在未被选择的第二模块;
回退到当前节点的上一级节点,并将所述上一级节点更新为当前节点;
返回执行读取所述当前节点对应的模块信息中记录的各第二模块的操作,直到遍历不到新的未被选择的第二模块;
根据各所述第一模块的模块信息确定是否存在未被选择的第一模块;
若存在未被选择的第一模块,则选择一所述未被选择的第一模块作为另一模块依赖树形图的根节点,并将该根节点作为当前节点;
返回执行读取所述当前节点对应的模块信息中记录的各第二模块的操作,直到每个第一模块均被选择。
9.根据权利要求1所述的越狱状态检测方法,其特征在于,所述根据各所述模块信息构建所述当前应用程序的模块依赖树形图包括:
选择所述主模块作为模块依赖树形图的根节点,并将所述根节点作为当前层中的节点;
在所述当前层中选择一节点作为当前节点;
读取所述当前节点对应的模块信息中记录的各第二模块;
判断读取的各所述第二模块中是否存在未被选择的第二模块;
若存在未被选择的第二模块,则将每个所述未被选择的第二模块均选择为当前节点的子节点;
在所述当前层中选择另一节点更新为当前节点,并返回执行读取所述当前节点对应的模块信息中记录的各第二模块的操作,直到所述当前层中每个节点均作为当前节点;
将所述当前层中各节点下的全部子节点更新为当前层中的节点,返回执行在当前层中选择一节点作为当前节点的操作,直到遍历不到新的未被选择的第二模块;
根据各所述第一模块的模块信息确定是否存在未被选择的第一模块;
若存在未被选择的第一模块,则选择一所述未被选择的第一模块作为另一模块依赖树形图的根节点,并将该根节点作为当前层中的节点;
返回执行在所述当前层中选择一节点作为当前节点的操作,直到每个第一模块均被选择。
10.一种越狱状态检测装置,其特征在于,包括:
第一获取模块,用于获取目标内存空间中存储的每个第一模块,所述目标内存空间为当前应用程序的内存空间,各所述第一模块中包括所述当前应用程序的主模块和至少一个非主模块,所述主模块包括当前应用程序主代码,所述非主模块包括依赖的各模块以及越狱后注入的模块;
信息提取模块,用于提取每个所述第一模块对应的模块信息,所述模块信息包含所述第一模块以及所述第一模块对应的各第二模块,所述第二模块为所述第一模块运行过程中依赖的模块;
图构建模块,用于根据各所述模块信息构建所述当前应用程序的模块依赖树形图;
状态确定模块,用于根据所述模块依赖树形图的数量确定操作系统的越狱状态,所述当前应用程序安装在所述操作系统中。
11.一种计算机设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的越狱状态检测方法。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-9中任一所述的越狱状态检测方法。
CN202110063578.1A 2021-01-18 2021-01-18 越狱状态检测方法、装置、设备及存储介质 Active CN112784264B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110063578.1A CN112784264B (zh) 2021-01-18 2021-01-18 越狱状态检测方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110063578.1A CN112784264B (zh) 2021-01-18 2021-01-18 越狱状态检测方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112784264A CN112784264A (zh) 2021-05-11
CN112784264B true CN112784264B (zh) 2024-04-02

Family

ID=75757141

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110063578.1A Active CN112784264B (zh) 2021-01-18 2021-01-18 越狱状态检测方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112784264B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430590B1 (en) * 1999-01-29 2002-08-06 International Business Machines Corporation Method and apparatus for processing executable program modules having multiple dependencies
CN104200155A (zh) * 2014-08-12 2014-12-10 中国科学院信息工程研究所 基于苹果手机操作系统iOS保护用户隐私的监测装置和方法
CN106155808A (zh) * 2015-04-16 2016-11-23 腾讯科技(深圳)有限公司 计算机系统资源的管理方法及装置
CN106250728A (zh) * 2015-06-09 2016-12-21 汤姆逊许可公司 用于保护ios软件模块的设备和方法
CN107798245A (zh) * 2017-11-02 2018-03-13 北京理工大学 一种基于组件依赖图的软件安全漏洞预测方法
CN108628753A (zh) * 2017-03-24 2018-10-09 华为技术有限公司 内存空间管理方法和装置
CN110489618A (zh) * 2019-09-12 2019-11-22 北京启迪区块链科技发展有限公司 树形图渲染方法、装置、设备和介质
CN110619219A (zh) * 2019-07-31 2019-12-27 广州亚美信息科技有限公司 应用程序源码保护方法、装置、计算机设备和存储介质

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6430590B1 (en) * 1999-01-29 2002-08-06 International Business Machines Corporation Method and apparatus for processing executable program modules having multiple dependencies
CN104200155A (zh) * 2014-08-12 2014-12-10 中国科学院信息工程研究所 基于苹果手机操作系统iOS保护用户隐私的监测装置和方法
CN106155808A (zh) * 2015-04-16 2016-11-23 腾讯科技(深圳)有限公司 计算机系统资源的管理方法及装置
CN106250728A (zh) * 2015-06-09 2016-12-21 汤姆逊许可公司 用于保护ios软件模块的设备和方法
CN108628753A (zh) * 2017-03-24 2018-10-09 华为技术有限公司 内存空间管理方法和装置
CN107798245A (zh) * 2017-11-02 2018-03-13 北京理工大学 一种基于组件依赖图的软件安全漏洞预测方法
CN110619219A (zh) * 2019-07-31 2019-12-27 广州亚美信息科技有限公司 应用程序源码保护方法、装置、计算机设备和存储介质
CN110489618A (zh) * 2019-09-12 2019-11-22 北京启迪区块链科技发展有限公司 树形图渲染方法、装置、设备和介质

Also Published As

Publication number Publication date
CN112784264A (zh) 2021-05-11

Similar Documents

Publication Publication Date Title
CN108292231B (zh) 从数据生成应用的方法和系统
US7493596B2 (en) Method, system and program product for determining java software code plagiarism and infringement
CN104123493A (zh) 应用程序的安全性检测方法和装置
CN107015794B (zh) 软件即服务参考流程扩展验证框架
CN111506500B (zh) 内存泄露检测方法、装置、电子设备及可读存储介质
CN111913878A (zh) 基于程序分析结果的字节码插桩方法、装置及存储介质
US11868465B2 (en) Binary image stack cookie protection
CN110070360B (zh) 一种事务请求处理方法、装置、设备及存储介质
US8875093B2 (en) Instantiating a coding competition to develop a program module in a networked computing environment
US7966562B1 (en) System and method for providing domain-sensitive help
US20050289358A1 (en) Method and system for sensitive information protection in structured documents
CN107533544B (zh) 元素标识符生成
CN112784264B (zh) 越狱状态检测方法、装置、设备及存储介质
CN112257037A (zh) 一种进程水印方法、系统及电子设备
CN113805861B (zh) 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN111142735B (zh) 一种软件页面的创建方法、装置、终端设备和存储介质
CN112434287B (zh) 一种检测Hook的方法、装置、设备及存储介质
CN112925523A (zh) 对象比较方法、装置、设备及计算机可读介质
CN114911534B (zh) 页面信息提取方法、设置方法、装置、电子设备及介质
CN113296834B (zh) 一种基于逆向工程的安卓闭源服务类型信息提取方法
JP4000916B2 (ja) データ管理装置及びデータ管理プログラム
KR102651294B1 (ko) 화면 구성 요소에 대한 정보 수집을 지원하는 방법
US11989572B2 (en) Computer system enabled with runtime software module tracking
CN112915546B (zh) 资源文件处理方法、装置、计算机可读介质及电子设备
US20220318386A1 (en) Generation of a causality tree representation of threat analysis report data

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