CN106709287B - 应用脱壳的方法及装置 - Google Patents

应用脱壳的方法及装置 Download PDF

Info

Publication number
CN106709287B
CN106709287B CN201611161299.4A CN201611161299A CN106709287B CN 106709287 B CN106709287 B CN 106709287B CN 201611161299 A CN201611161299 A CN 201611161299A CN 106709287 B CN106709287 B CN 106709287B
Authority
CN
China
Prior art keywords
application
scheme
shelling
reinforcement
data
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
CN201611161299.4A
Other languages
English (en)
Other versions
CN106709287A (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.)
Jiangsu Pay Egis Technology Co ltd
Original Assignee
Jiangsu Pay Egis 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 Jiangsu Pay Egis Technology Co ltd filed Critical Jiangsu Pay Egis Technology Co ltd
Priority to CN201611161299.4A priority Critical patent/CN106709287B/zh
Publication of CN106709287A publication Critical patent/CN106709287A/zh
Application granted granted Critical
Publication of CN106709287B publication Critical patent/CN106709287B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种应用脱壳的方法及装置,其中,方法包括:使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;执行加固方案对应的脱壳方案,获取脱壳后的应用。利用本方案,根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳,还原为加固前的应用。同时,也使得基于应用的后续程序分析、安全检测等效率更高、效果更好。

Description

应用脱壳的方法及装置
技术领域
本发明涉及软件领域,具体涉及一种应用脱壳的方法及装置。
背景技术
目前搭载在智能操作系统上的终端设备已经得到了广泛的应用。随着终 端设备的发展,基于终端设备平台的安全问题也日益突出。越来越多的开发 者在开发出基于终端设备平台的应用后,会使用如第三方平台提供的加固服 务进行保护,对抗逆向工程和代码注入攻击等。但对监管部门和应用市场而 言,其需要对应用的安全性进行分析和评估。而加固后的应用因为加固使得 对应用进行程序行为分析等过程造成极大的困难。尤其是对于应用的静态分 析更加困难。
对于每一个应用进行程序分析,都必须进行人工脱壳,需要极度耗费时 间和精力。因此监管部门和应用市场急需一种自动脱壳的方法,以便提高脱 壳和程序分析的效率和效果。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分 地解决上述问题的应用脱壳的方法及装置。
根据本发明的一个方面,提供了一种应用脱壳的方法,包括:
使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;
根据加固厂商,获取对应的加固方案;
执行加固方案对应的脱壳方案,获取脱壳后的应用。
根据本发明的另一方面,提供了一种应用脱壳的装置,包括:
解析模块,用于使用自动化脚本解析加固后的应用代码,获取加固的应 用的加固厂商;
获取模块,用于根据加固厂商,获取对应的加固方案;
脱壳模块,用于执行加固方案对应的脱壳方案,获取脱壳后的应用。
根据本发明的应用脱壳的方法及装置,使用自动化脚本解析加固后的应 用代码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案; 执行加固方案对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用 的加固厂商,执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的 脱壳后的应用,即还原为加固前的应用。同时,也使得基于应用的后续程序 分析、安全检测等效率更高、效果更好。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技 术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它 目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本 领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的, 而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示 相同的部件。在附图中:
图1示出了根据本发明一个实施例的应用脱壳的方法的流程示意图;
图2示出了根据本发明另一个实施例的应用脱壳的方法的流程示意图;
图3示出了根据本发明一个实施例的应用脱壳的装置的功能结构示意 图;
图4示出了根据本发明一个实施例的应用脱壳的装置中脱壳模块的功能 结构示意图;
图5示出了根据本发明一个实施例的应用脱壳的装置中脱壳模块的功能 结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示 了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不 应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地 理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的应用脱壳的方法的流程示意图,如 图1所示,该方法具体包括如下步骤:
步骤S101,使用自动化脚本解析加固后的应用代码,获取加固的应用的 加固厂商。
其中,本文中所述的应用可以是移动应用,例如IOS应用,安卓应用, 也可以是非移动应用,例如windows系统应用等。
使用自动化脚本解析已经加固后的应用代码,从中可以查找到加固厂商 的标识。不同的加固厂商均具有各自不同的标识。根据标识可以确定具体的 加固厂商。如可以预先设置列表,记录不同标识与加固厂商的对应关系。具 体的可以记录为如加固厂商娜迦,标识libchaosvmp.so、libddog.so、libfdog.so; 加固厂商爱加密,标识libexec.so、libexecmain.so;加固厂商梆梆,标识 libsecexe.so、libsecmain.so、libDexHelper.so;加固厂商360,标识 libprotectClass.so、libjiagu.so;加固厂商通付盾,标识libegis.so;加固厂商网 秦,标识libnqshield.so;加固厂商百度,标识libbaiduprotect.so等。查找到加 固厂商的标识后,根据标识与加固厂商的对应关系,获取对应的加固的应用 的加固厂商。
步骤S102,根据加固厂商,获取对应的加固方案。
加固方案可以分为整体加固方案和非整体加固方案。整体加固方案为将 原应用加密处理,在其上添加壳文件,并将解密脱壳的代码添加到壳文件中。 非整体加固方案为应用中的各部分分别进行加固,而不是将应用整体的进行 加固。
通常情况下,加固厂商所采用的加固方案一般都是固定的。通过如预设 列表的方式,在列表中记录加固厂商及其采用的加固方案。根据具体的加固 厂商,从预设列表中可以获取其对应的加固方案。
步骤S103,执行加固方案对应的脱壳方案,获取脱壳后的应用。
不同的加固方案需要对应不同的脱壳方案。当加固方案为整体加固方案 时,脱壳方案为整体脱壳方案;加固方案为非整体加固方案时,脱壳方案为 重组脱壳方案。
根据加固方案,确定具体的脱壳方案后,执行该脱壳方案,可以获取到 脱壳后的应用。即对加固方案进行脱壳,还原为加固前的应用。
根据本发明的应用脱壳的方法,使用自动化脚本解析加固后的应用代 码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;执 行加固方案对应的脱壳方案,获取脱壳后的应用。本发明根据加固后应用的 加固厂商,获取加固方案。根据加固方案确定脱壳方案,执行对应的不同的 脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用,即还原为加固前 的应用。同时,也使得基于应用的后续程序分析、安全检测等效率更高、效 果更好。
图2示出了根据本发明另一个实施例的应用脱壳的方法的流程示意图, 如图2所示,该方法具体包括如下步骤:
步骤S201,使用自动化脚本解析加固后的应用代码,获取加固的应用的 加固厂商。
步骤S202,根据加固厂商,获取对应的加固方案。
以上步骤可参考图1实施例中步骤S101-S102,在此不再赘述。
步骤S203,根据加固方案确定脱壳方案。
不同的加固方案需要对应不同的脱壳方案。根据加固方案确定对应的脱 壳方案。当加固方案为整体加固方案时,脱壳方案为整体脱壳方案;加固方 案为非整体加固方案时,脱壳方案为重组脱壳方案。
当确定的脱壳方案为整体脱壳方案时,执行步骤S204-S206;当确定的 脱壳方案为重组脱壳方案时,执行步骤S207-S214。
步骤S204,安装并启动加固后的应用。
步骤S205,修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的 应用在内存中的地址及大小。
步骤S206,从内存中提取解密脱壳后的应用,存储为脱壳后的应用。
整体加固方案后的应用在运行时,将添加的壳文件作为应用运行的入口 点。首先运行壳文件,在其运行过程中加载壳文件中的解密脱壳的代码。执 行加载的解密脱壳的代码,解密并释放出原应用至内存空间中。而后动态加 载原应用,最终执行原应用的执行逻辑。
针对整体加固方案本身的脱壳特征,制定整体脱壳方案。具体的执行过 程如下:
首先安装加固后的应用,启动所安装的应用。在启动该应用后,不需再 附加其他任何调试器,运行由整体加固方案其本身附带的解密脱壳流程。同 时,查找到该应用的壳文件中解密脱壳的代码,修改解密脱壳的代码,如修 改解密脱壳代码中调用的一些函数,在其中添加功能。使其一方面继续执行 解密脱壳流程,另一方面同时从该解密脱壳流程的过程中获取解密脱壳后的 应用在内存中的地址、大小等信息。在获取到这些信息后,根据这些信息, 可以从内存中提取到解密脱壳后的应用,将其存储在本地磁盘或硬盘等存储设备上,即为脱壳后的应用。
步骤S207,读取应用的代码,按照应用的文件格式划分和切割应用的代 码。
非整体加固方案后的应用在运行时,会释放出一个不完整但可以通过系 统运行时校验的应用文件。该不完整应用文件中自带了修复模块。修复模块 在运行时会注入代码,通过注入的代码可以动态监控系统运行。完成所有代 码的注入后,动态加载并执行不完整应用。实时动态监控该不完整应用在运 行时加载的代码,在加载每一个类的类时,修复模块根据该类的签名信息判 断该类是否需要进行修复,对需要进行修复的类进行修复,使本次加载的类 在真正加载前已经处于修复完成的状态,以便应用进行加载。在加载每一个 类的类时,都重复执行上述过程,以保证加载的类在真正加载前已经处于修 复完成的状态。即非整体加固方案后的应用在运行时,对应用的脱壳不是一 次完成的,而是在每次应用加载类时,对类进行修复,获取修复完成的类。
针对非整体加固方案本身的脱壳特征,制定重组脱壳方案。首先,读取 非整体加固方案后应用的代码,按照应用的文件格式划分和切割应用的代码。 其中,将应用的代码划分和切割为包括头文件、数据文件、与数据文件一一 对应的数据索引区及其他文件。头文件在应用运行时不会被加载,也不会被 非整体加固方案进行加固,不需要对头文件进行处理。数据文件包括应用中 所有数据项,数据项包括了应用要调用的类的代码、参数、数据结构等。数 据索引区包括应用中所有类名称及其要调用的数据项的地址。该地址可以记录数据项在应用文件中的偏移地址或直接指向数据项在数据文件中的实际地 址指示符,通过该地址,可以找到该数据项。
步骤S208,动态模拟应用运行,获取应用运行时所调用的类名称。
动态模拟应用的运行,获取应用运行时每一次所调用的类名称,即应用 中每个接口的名称。
步骤S209,依次根据类名称,从数据索引区中找到类对应的数据项的地 址。
步骤S210,根据地址从数据文件中提取类对应的数据项。
步骤S211,将数据项重构在预设的第二数据文件中。
步骤S212,修改数据索引区中该数据项的地址,将地址修改为该数据项 在第二数据文件中的地址。
根据类名称,可以从数据索引区中找到该类对应的数据项的地址。根据 地址,从数据文件中提取出类对应的数据项。将数据项重构在预设的第二数 据文件中。预设的第二数据文件为新的空白数据文件。将数据项重构后,修 改数据索引区中该数据项的原地址,将原地址修改为该数据项在第二数据文 件中的地址。该数据项在第二数据文件中的地址为该数据项相对于应用文件 的偏移地址或为指向数据项在第二数据文件中的实际地址指示符等。
可选地,若该类的签名信息中标识了该类为非整体加固方案加固后的类, 将该数据项重构在预设的第二数据文件中。若该类的签名信息中没有标识该 类为非整体加固方案加固后的类,可以对该类对应的数据项不进行处理。
步骤S213,判断是否遍历完应用数据索引区中每一个类所对应的数据 项。
判断是否遍历完应用数据索引区中每一个类所对应的数据项。若已遍历 完应用数据索引区中每一个类所对应的数据项,即已经将所有需修复的数据 项均重构,执行步骤S214。否则,重复执行步骤S209-S212,直至遍历完应 用数据索引区中每一个类所对应的数据项。
步骤S214,将头文件、数据文件、数据索引区与第二数据文件进行拼接, 得到脱壳后的应用。
执行上述步骤S208-S213后,得到修改后的数据索引区及新生成的第二 数据文件。将原头文件、数据文件与修改后的数据索引区及新生成的第二数 据文件进行拼接,得到脱壳后的应用。
根据本发明的应用脱壳的方法,使用自动化脚本解析加固后的应用代 码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;根 据加固方案确定脱壳方案。执行对应的脱壳方案,获取脱壳后的应用。本发 明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案, 执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用, 即还原为加固前的应用。进一步,脱壳方案在基于加固方案本身脱壳的基础 上,整体脱壳方案通过修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取解密脱壳后的应用,存储 为脱壳后的应用;重组脱壳方案将应用进行划分和切割,根据应用运行时加 载的类名称,获取对应的数据项。将数据项重构在预设的第二数据文件,并 修改数据索引区中数据项对应的地址。在将已划分和切割的头文件、数据文 件与修改后的数据索引区及新生成的第二数据文件进行拼接,从而实现对应 用的重组,得到脱壳后的应用。本发明的脱壳效果好、效率高,同时,也使 得基于应用的后续程序分析、安全检测等效率更高、效果更好。
图3示出了根据本发明一个实施例的应用脱壳的装置的功能结构示意 图。如图3所示,应用脱壳的装置包括如下模块:
解析模块310,用于使用自动化脚本解析加固后的应用代码,获取加固 的应用的加固厂商。
其中,本文中所述的应用可以是移动应用,例如IOS应用,安卓应用, 也可以是非移动应用,例如windows系统应用等。
解析模块310使用自动化脚本解析已经加固后的应用代码,从中可以查 找到加固厂商的标识。不同的加固厂商均具有各自不同的标识。解析模块310 根据标识可以确定具体的加固厂商。如解析模块310可以预先设置列表,记 录不同标识与加固厂商的对应关系。具体的解析模块310预先设置的列表可 以记录为如加固厂商娜迦,标识libchaosvmp.so、libddog.so、libfdog.so;加 固厂商爱加密,标识libexec.so、libexecmain.so;加固厂商梆梆,标识 libsecexe.so、libsecmain.so、libDexHelper.so;加固厂商360,标识libprotectClass.so、libjiagu.so;加固厂商通付盾,标识libegis.so;加固厂商网 秦,标识libnqshield.so;加固厂商百度,标识libbaiduprotect.so等。解析模块 310查找到加固厂商的标识后,根据标识与加固厂商的对应关系,获取对应 的加固的应用的加固厂商。
获取模块320,用于根据加固厂商,获取对应的加固方案。
加固方案可以分为整体加固方案和非整体加固方案。整体加固方案为将 原应用加密处理,在其上添加壳文件,并将解密脱壳的代码添加到壳文件中。 非整体加固方案为应用中的各部分分别进行加固,而不是将应用整体的进行 加固。
通常情况下,加固厂商所采用的加固方案一般都是固定的。获取模块320 通过如预设列表的方式,在列表中记录加固厂商及其采用的加固方案。获取 模块320根据具体的加固厂商,从预设列表中可以获取其对应的加固方案。
脱壳模块330,用于执行加固方案对应的脱壳方案,获取脱壳后的应用。
不同的加固方案需要对应不同的脱壳方案。当加固方案为整体加固方案 时,脱壳方案为整体脱壳方案;加固方案为非整体加固方案时,脱壳方案为 重组脱壳方案。
脱壳模块330根据加固方案,确定具体的脱壳方案后,执行该脱壳方案, 可以获取到脱壳后的应用。即脱壳模块330对加固方案进行脱壳,还原为加 固前的应用。
进一步,根据加固方案确定对应的脱壳方案。当加固方案为整体加固方 案时,脱壳方案为整体脱壳方案,脱壳模块330还包括了如图4所示的模块:
安装启动模块331,用于安装并启动加固后的应用。
修改模块332,用于修改加固方案的解壳流程中的函数,获取解壳后的 应用在内存中的地址及大小。
提取模块333,用于将从内存中提取的解壳后的应用存储为脱壳后的应 用。
整体加固方案后的应用在运行时,将添加的壳文件作为应用运行的入口 点。首先运行壳文件,在其运行过程中加载壳文件中的解密脱壳的代码。执 行加载的解密脱壳的代码,解密并释放出原应用至内存空间中。而后动态加 载原应用,最终执行原应用的执行逻辑。
针对整体加固方案本身的脱壳特征,制定整体脱壳方案。具体的执行过 程如下:
首先安装启动模块331安装加固后的应用,启动所安装的应用。在安装 启动模块331启动该应用后,不需再附加其他任何调试器,运行由整体加固 方案其本身附带的解密脱壳流程。同时,修改模块332查找到该应用的壳文 件中解密脱壳的代码,修改解密脱壳的代码,如修改模块332修改解密脱壳 代码中调用的一些函数,在其中添加功能。使其一方面继续执行解密脱壳流 程,另一方面同时从该解密脱壳流程的过程中获取解密脱壳后的应用在内存 中的地址、大小等信息。修改模块332在获取到这些信息后,提取模块333 根据这些信息,可以从内存中提取到解密脱壳后的应用,将其存储在本地磁 盘或硬盘等存储设备上,即为脱壳后的应用。
进一步,根据加固方案确定对应的脱壳方案。当加固方案为非整体加固 方案时,脱壳方案为重组脱壳方案,脱壳模块330还包括了如图5所示的模 块:
划分切割模块334,用于读取应用的代码,按照应用的文件格式划分和 切割应用的代码。
重构模块336,用于动态模拟应用运行,获取应用运行时所调用的类名 称;依次根据类名称,从数据索引区中找到类对应的数据项在数据文件中的 地址;根据地址从数据文件中提取类对应的数据项;将数据项重构在预设的 第二数据文件中;修改数据索引区中该数据项的地址,将地址修改为该数据 项在第二数据文件中的地址。
循环模块337,用于重复执行重构模块336,直至遍历完应用数据索引区 中每一个类所对应的数据项。
拼接模块338,用于将头文件、数据文件、数据索引区与第二数据文件 进行拼接,得到脱壳后的应用。
非整体加固方案后的应用在运行时,会释放出一个不完整但可以通过系 统运行时校验的应用文件。该不完整应用文件中自带了修复模块。修复模块 在运行时会注入代码,通过注入的代码可以动态监控系统运行。完成所有代 码的注入后,动态加载并执行不完整应用。实时动态监控该不完整应用在运 行时加载的代码,在加载每一个类的类时,修复模块根据该类的签名信息判 断该类是否需要进行修复,对需要进行修复的类进行修复,使本次加载的类 在真正加载前已经处于修复完成的状态,以便应用进行加载。在加载每一个 类的类时,都重复执行上述过程,以保证加载的类在真正加载前已经处于修 复完成的状态。即非整体加固方案后的应用在运行时,对应用的脱壳不是一 次完成的,而是在每次应用加载类时,对类进行修复,获取修复完成的类。
针对非整体加固方案本身的脱壳特征,制定重组脱壳方案。首先,划分 切割模块334读取非整体加固方案后应用的代码,按照应用的文件格式划分 和切割应用的代码。其中,划分切割模块334将应用的代码划分和切割为包 括头文件、数据文件、与数据文件一一对应的数据索引区及其他文件。头文 件在应用运行时不会被加载,也不会被非整体加固方案进行加固,不需要对 头文件进行处理。数据文件包括应用中所有数据项,数据项包括了应用要调 用的类的代码、参数、数据结构等。数据索引区包括应用中所有类名称及其 要调用的数据项的地址。该地址可以记录数据项在应用文件中的偏移地址或 直接指向数据项在数据文件中的实际地址指示符,通过该地址,可以找到该 数据项。
类获取模块335动态模拟应用的运行,获取应用运行时每一次所调用的 类名称,即应用中每个接口的名称。
重构模块336根据类名称,可以从数据索引区中找到该类对应的数据项 的地址。根据地址,重构模块336从数据文件中提取出类对应的数据项。重 构模块336将数据项重构在预设的第二数据文件中。预设的第二数据文件为 新的空白数据文件。重构模块336将数据项重构后,修改数据索引区中该数 据项的原地址,将原地址修改为该数据项在第二数据文件中的地址。该数据 项在第二数据文件中的地址为该数据项相对于应用文件的偏移地址或为指向 数据项在第二数据文件中的实际地址指示符等。
可选地,若该类的签名信息中标识了该类为非整体加固方案加固后的类, 重构模块336将该数据项重构在预设的第二数据文件中。若该类的签名信息 中没有标识该类为非整体加固方案加固后的类,重构模块336可以对该类对 应的数据项不进行处理。
循环模块337判断是否遍历完应用数据索引区中每一个类所对应的数据 项。若已遍历完应用数据索引区中每一个类所对应的数据项,即重构模块336 已经将所有需修复的数据项均重构,执行拼接模块338。否则,重复执行重 构模块336,直至遍历完应用数据索引区中每一个类所对应的数据项。
循环模块337判断遍历完应用数据索引区中每一个类所对应的数据项 后,拼接模块338将原头文件、数据文件与修改后的数据索引区及新生成的 第二数据文件进行拼接,得到脱壳后的应用。
根据本发明的应用脱壳的装置,使用自动化脚本解析加固后的应用代 码,获取加固的应用的加固厂商;根据加固厂商,获取对应的加固方案;根 据加固方案确定脱壳方案。执行对应的脱壳方案,获取脱壳后的应用。本发 明根据加固后应用的加固厂商,获取加固方案。根据加固方案确定脱壳方案, 执行对应的不同的脱壳方案进行不同的自动化脱壳,获取到的脱壳后的应用, 即还原为加固前的应用。进一步,脱壳方案在基于加固方案本身脱壳的基础 上,整体脱壳方案通过修改整体加固方案中的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取解密脱壳后的应用,存储 为脱壳后的应用;重组脱壳方案将应用进行划分和切割,根据应用运行时加 载的类名称,获取对应的数据项。将数据项重构在预设的第二数据文件,并 修改数据索引区中数据项对应的地址。在将已划分和切割的头文件、数据文 件与修改后的数据索引区及新生成的第二数据文件进行拼接,从而实现对应 用的重组,得到脱壳后的应用。本发明的脱壳效果好、效率高,同时,也使 得基于应用的后续程序分析、安全检测等效率更高、效果更好。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明 的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根 据发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修 改。因此,本发明的范围应该被理解和认定为覆盖了所有这些其他变型或修 改。
本领域技术人员应当理解,本发明的实施方式可以实现为一种系统、装 置、设备、方法或计算机程序产品。此外,本发明也不针对任何特定编程语 言,应当明白,可以利用各种编程语言实现本发明描述的内容,并且上面对 特定语言所做的描述是为了披露本发明的最佳实施方式。
需要注意的是,尽管在上面的说明中详细描述了应用脱壳的装置的若干 模块,但是这种划分仅仅是示例性的,并非是强制性的。本领域的技术人员 可以理解,实际上,可以对实施例中的模块进行自适应性地改变,将实施例 中的多个模块组合成一个模块,也可将一个模块划分成多个模块。
此外,尽管在附图中以特定顺序描述了本发明实施操作,但是,这并非 要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示 的操作才能实现期望的结果。可以省略某些步骤,将多个步骤合并为一个步 骤执行,或者将一个步骤分成多个步骤执行。
综上所述,应用本发明所述的应用脱壳的方法及装置,使用自动化脚本 解析加固后的应用代码,获取加固的应用的加固厂商;根据加固厂商,获取 对应的加固方案;根据加固方案确定脱壳方案。执行对应的脱壳方案,获取 脱壳后的应用。本发明根据加固后应用的加固厂商,获取加固方案。根据加 固方案确定脱壳方案,执行对应的不同的脱壳方案进行不同的自动化脱壳, 获取到的脱壳后的应用,即还原为加固前的应用。进一步,脱壳方案在基于 加固方案本身脱壳的基础上,整体脱壳方案通过修改整体加固方案中的解密 脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小,从内存中提取 解密脱壳后的应用,存储为脱壳后的应用;重组脱壳方案将应用进行划分和 切割,根据应用运行时加载的类名称,获取对应的数据项。将数据项重构在 预设的第二数据文件,并修改数据索引区中数据项对应的地址。在将已划分 和切割的头文件、数据文件与修改后的数据索引区及新生成的第二数据文件 进行拼接,从而实现对应用的重组,得到脱壳后的应用。本发明的脱壳效果 好、效率高,同时,也使得基于应用的后续程序分析、安全检测等效率更高、 效果更好。
以上对本发明的方法和具体实施方法进行了详细的介绍,并给出了相应 的实施例。当然,除上述实施例外,本发明还可以有其它实施方式,凡采用 等同替换或等效变换形成的技术方案,均落在本发明所要保护的范围之内。

Claims (10)

1.一种应用脱壳的方法,其特征在于,包括:
步骤S1,使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;
步骤S2,根据所述加固厂商,获取对应的加固方案;
步骤S3,执行所述加固方案对应的脱壳方案,获取脱壳后的应用;所述加固方案为非整体加固方案,所述脱壳方案为重组脱壳方案;
所述执行所述加固方案对应的脱壳方案,获取脱壳后的应用进一步包括:
步骤S31,读取所述应用的代码,按照所述应用的文件格式划分和切割所述应用的代码;其中,将所述应用的代码划分和切割为头文件、数据文件、与所述数据文件一一对应的数据索引区;
步骤S32,动态模拟应用运行,获取应用运行时所调用的类名称;
步骤S33,依次根据所述类名称,从所述数据索引区中找到所述类对应的数据项的地址;
步骤S34,根据所述地址从所述数据文件中提取所述类对应的数据项;
步骤S35,将所述数据项重构在预设的第二数据文件中;
步骤S36,修改所述数据索引区中该数据项的地址,将所述地址修改为该数据项在第二数据文件中的地址;
重复执行步骤S33-S36,直至遍历完应用数据索引区中每一个类所对应的数据项;
步骤S37,将所述头文件、数据文件、数据索引区与所述第二数据文件进行拼接,得到脱壳后的应用。
2.根据权利要求1所述的方法,其特征在于,所述加固方案为整体加固方案,所述脱壳方案为整体脱壳方案;
所述执行所述加固方案对应的脱壳方案,获取脱壳后的应用进一步包括:
安装并启动加固后的应用;
修改整体加固方案的解密脱壳的代码,获取解密脱壳后的应用在内存中的地址及大小;
从内存中提取所述解密脱壳后的应用,存储为脱壳后的应用。
3.根据权利要求1所述的方法,其特征在于,所述数据文件包括应用中所有数据项;所述数据索引区包括应用中所有类名称及其对应的数据项的地址。
4.根据权利要求1所述的方法,其特征在于,所述使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商进一步包括:
使用自动化脚本解析加固后的应用代码,查找加固厂商的标识,获取对应的所述加固的应用的加固厂商。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述应用为移动应用或非移动应用。
6.一种应用脱壳的装置,其特征在于,包括:
解析模块,用于使用自动化脚本解析加固后的应用代码,获取加固的应用的加固厂商;
获取模块,用于根据所述加固厂商,获取对应的加固方案;
脱壳模块,用于执行所述加固方案对应的脱壳方案,获取脱壳后的应用;所述加固方案为非整体加固方案,所述脱壳方案为重组脱壳方案;
所述脱壳模块进一步包括:
划分切割模块,用于读取所述应用的代码,按照所述应用的文件格式划分和切割所述应用的代码;其中,将所述应用的代码划分和切割为头文件、数据文件、与所述数据文件一一对应的数据索引区;
类获取模块,用于动态模拟应用运行,获取应用运行时所调用的类名称;
重构模块,用于依次根据所述类名称,从所述数据索引区中找到所述类对应的数据项的地址;根据所述地址从所述数据文件中提取所述类对应的数据项;将所述数据项重构在预设的第二数据文件中;修改所述数据索引区中该数据项的地址,将所述地址修改为该数据项在第二数据文件中的地址;
循环模块,用于重复执行所述重构模块,直至遍历完应用数据索引区中每一个类所对应的数据项;
拼接模块,用于将所述头文件、数据文件、数据索引区与所述第二数据文件进行拼接,得到脱壳后的应用。
7.根据权利要求6所述的装置,其特征在于,所述加固方案为整体加固方案,所述脱壳方案为整体脱壳方案;
所述脱壳模块进一步包括:
安装启动模块,用于安装并启动加固后的应用;
修改模块,用于修改所述加固方案的解壳流程中的函数,获取解壳后的应用在内存中的地址及大小;
提取模块,用于将从内存中提取的所述解壳后的应用存储为脱壳后的应用。
8.根据权利要求6所述的装置,其中,所述数据文件包括应用中所有数据项;所述数据索引区包括应用中所有类名称及其对应的数据项的地址。
9.根据权利要求6所述的装置,其中,所述解析模块进一步用于:
使用自动化脚本解析加固后的应用代码,查找加固厂商的标识,获取对应的加固的应用的加固厂商。
10.根据权利要求6-9任一项所述的装置,其中,所述应用为移动应用或非移动应用。
CN201611161299.4A 2016-12-15 2016-12-15 应用脱壳的方法及装置 Active CN106709287B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611161299.4A CN106709287B (zh) 2016-12-15 2016-12-15 应用脱壳的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611161299.4A CN106709287B (zh) 2016-12-15 2016-12-15 应用脱壳的方法及装置

Publications (2)

Publication Number Publication Date
CN106709287A CN106709287A (zh) 2017-05-24
CN106709287B true CN106709287B (zh) 2020-04-03

Family

ID=58937814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611161299.4A Active CN106709287B (zh) 2016-12-15 2016-12-15 应用脱壳的方法及装置

Country Status (1)

Country Link
CN (1) CN106709287B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109165019A (zh) * 2018-07-28 2019-01-08 安徽捷兴信息安全技术有限公司 一种针对手机应用的脱壳方法及装置
CN111353154A (zh) * 2018-12-24 2020-06-30 中移(杭州)信息技术有限公司 一种应用程序的脱壳方法、装置、终端设备和介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106022130A (zh) * 2016-05-20 2016-10-12 中国科学院信息工程研究所 加固应用程序的脱壳方法及装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106022130A (zh) * 2016-05-20 2016-10-12 中国科学院信息工程研究所 加固应用程序的脱壳方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Android应用程序通用自动脱壳方法研究(https://blog.csdn.net/mingzznet/article/details/51850232);双刃剑客;《CSDN》;20160806;第1页,第4页,第6页 *

Also Published As

Publication number Publication date
CN106709287A (zh) 2017-05-24

Similar Documents

Publication Publication Date Title
CN109359468B (zh) 漏洞检测方法、装置及设备
CN107451474B (zh) 用于终端的软件漏洞修复方法和装置
CN106815135B (zh) 漏洞检测方法及装置
CN104318160B (zh) 查杀恶意程序的方法和装置
CN107346284B (zh) 一种应用程序的检测方法及检测装置
US9891862B2 (en) Forensic data acquisition apparatus and method for guaranteeing integrity of flash memory in smart device
CN108197476B (zh) 一种智能终端设备的漏洞检测方法及装置
CN107291485B (zh) 动态链接库的加固方法、运行方法、加固装置和安全系统
CN105550581A (zh) 一种恶意代码检测方法及装置
CN109614107B (zh) 一种软件开发工具包的集成方法和装置
CN106709287B (zh) 应用脱壳的方法及装置
CN113868648A (zh) 一种针对恶意文件的自动化脱壳引擎实现方法
WO2020264515A1 (en) Automatic correctness and performance measurement of binary transformation systems
CN109918912B (zh) 一种针对计算机病毒的文件修复方法及相关设备
CN110414218B (zh) 内核检测方法、装置、电子设备及存储介质
CN104915594A (zh) 应用程序运行方法及装置
CN110147653A (zh) 应用程序安全加固方法及装置
KR101477050B1 (ko) 메모리 덤프 기법을 이용한 어플리케이션의 실행코드 추출 방법
EP3818437B1 (en) Binary software composition analysis
CN107220174B (zh) 一种自动化测试的方法及装置
EP3692456A1 (en) Binary image stack cookie protection
CN112948819B (zh) 应用文件脱壳方法和装置、计算机可读存储介质
CN113885885A (zh) 基于动态执行多点插桩的安卓安装包批量自动化脱壳平台
CN110377499B (zh) 一种对应用程序进行测试的方法及装置
CN109408063B (zh) 基于虚拟机的指令插桩方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 215028 No. 88 Dongchang Road, Suzhou Industrial Park, Jiangsu Province

Applicant after: JIANGSU PAYEGIS TECHNOLOGY CO., LTD.

Address before: Suzhou City, Jiangsu province 215021 East Road, Suzhou Industrial Park, No. 88 building 2.5 Industrial Park building C2 4F

Applicant before: JIANGSU PAYEGIS TECHNOLOGY CO., LTD.

GR01 Patent grant
GR01 Patent grant