防止应用程序被篡改的方法及装置制造方法

文档序号:6502140阅读:220来源:国知局
防止应用程序被篡改的方法及装置制造方法
【专利摘要】本发明提供一种防止应用程序被篡改的方法及装置,属于智能移动终端安全领域。其中,该防止应用程序被篡改的方法应用于Android系统的移动终端中,所述方法包括:对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;利用所述校验值生成用于校验所述存储文件的验证文件;对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。本发明的技术方案能够验证应用程序是否被篡改,从而增加应用程序的安全性。
【专利说明】防止应用程序被篡改的方法及装置

【技术领域】
[0001] 本发明涉及智能移动终端安全领域,特别是指一种防止应用程序被篡改的方法及 装直。

【背景技术】
[0002] Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动 设备,如智能手机和平板电脑。现在的安卓操作系统中,应用程序通常使用Java语言编 写。使用该语言编写的应用程序可以打包为后缀为.APK的程序包,将该程序包在移动终 端上运行即可安装对应的安卓应用。但是将应用程序打包为后缀为.APK的程序包有其 致命的缺陷,因为APK程序包比较容易被篡改,影响了应用程序的安全性。其中APK是 AndroidPackage的缩写,即Android安装包(APK)。APK是一种文件格式,通过将APK文件 直接传到Android模拟器或Android手机中执行即可实现安装。
[0003] 为了防止APK程序包被篡改,目前最常使用的解决方式有代码混淆、签名验证和 在线验证等三种方式。不过这三种方式都有其缺点:代码混淆方式是将部分代码进行替换, 如把1 (数字一)替换为1 (字母L),但是这样会使得代码阅读难度增加;签名验证方式可 在应用运行的时候验证签名是否正确,如果非官方签名则停止程序运行,但是此种方式依 然要依靠java代码进行验证,如果源程序被破解,即可删除验证相关代码;在线验证方式 是比较可靠的验证方式,不过需要连接网络时才能使用。


【发明内容】

[0004] 本发明要解决的技术问题是提供一种防止应用程序被篡改的方法及装置,能够验 证应用程序是否被篡改,从而增加应用程序的安全性。
[0005] 为解决上述技术问题,本发明的实施例提供技术方案如下:
[0006] -方面,提供一种防止应用程序被篡改的方法,应用于Android系统的移动终端 中,所述方法包括:
[0007] 对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值;
[0008] 利用所述校验值生成用于校验所述存储文件的验证文件;
[0009] 对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。
[0010] 具体地,所述安装包可以为APK文件。
[0011] 进一步地,所述对应用程序的存储文件进行文件校验之前还包括:
[0012] 对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程 序文件;
[0013] 所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值包 括:
[0014] 对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。
[0015] 进一步地,所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一 校验值包括:
[0016] 对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。
[0017] 进一步地,所述利用所述校验值生成用于校验所述存储文件的验证文件包括:
[0018] 利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行 编译得到所述验证文件。
[0019] 进一步地,所述对所述存储文件和验证文件进行编译打包之前还包括:
[0020] 在所述验证文件中添加预设可执行代码;
[0021] 所述对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包包 括:
[0022] 对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应 用程序的安装包。
[0023] 本发明实施例还提供了一种防止应用程序被篡改的装置,应用于Android系统的 移动终端中,包括:
[0024] 校验模块,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯一 校验值;
[0025] 验证模块,用于利用所述校验值生成用于校验所述存储文件的验证文件;
[0026] 编译模块,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序的 安装包。
[0027] 进一步地,所述装置还包括:
[0028] 提取模块,用于对应用程序的代码进行编译,形成可执行文件,从所述可执行文件 中提取出源程序文件;
[0029] 所述校验模块具体用于对所述源程序文件进行文件校验,得到所述源程序文件的 唯一校验值。
[0030] 进一步地,所述校验模块具体用于对应用程序的资源文件进行文件校验,得到所 述资源文件的唯一校验值。
[0031] 进一步地,所述验证模块具体用于利用所述校验值生成用于校验所述存储文件的 程序代码,并对所述程序代码进行编译得到所述验证文件。
[0032] 进一步地,所述装置还包括:
[0033] 添加模块,用于在所述验证文件中添加预设可执行代码;
[0034] 所述编译模块具体用于对所述存储文件和添加有预设可执行代码的验证文件进 行编译打包,生成所述应用程序的安装包。
[0035] 本发明的实施例具有以下有益效果:
[0036] 上述方案中,首先对应用程序的存储文件进行文件校验,得到存储文件的唯一校 验值,利用该校验值生成用于校验该存储文件的验证文件,再对存储文件和验证文件进行 编译打包,生成应用程序的安装包。如果应用程序存储文件中的代码有任何变化,存储文件 的校验值都会改变。这样在使用安装包安装应用程序时,通过对存储文件的校验值进行验 证,即可判断出存储文件是否被篡改,如果发现存储文件被篡改,则可以提示用户停止安装 过程。本发明的技术方案能够验证应用程序是否被篡改,从而增加应用程序的安全性。

【专利附图】

【附图说明】
[0037] 图1为本发明实施例防止应用程序被篡改的方法的流程示意图;
[0038] 图2为本发明实施例防止应用程序被篡改的装置的结构框图;
[0039] 图3为本发明实施例一防止应用程序被篡改的方法的流程示意图;
[0040] 图4为本发明实施例二防止应用程序被篡改的方法的流程示意图。

【具体实施方式】
[0041] 为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合 附图及具体实施例进行详细描述。
[0042] 本发明的实施例针对现有技术中验证应用程序是否被篡改比较困难的问题,提供 一种防止应用程序被篡改的方法及装置,能够验证应用程序是否被篡改,从而增加应用程 序的安全性。
[0043] 图1为本发明实施例防止应用程序被篡改的方法的流程示意图,如图1所示,本实 施例包括:
[0044] 步骤101 :对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验 值;
[0045] 步骤102 :利用所述校验值生成用于校验所述存储文件的验证文件;
[0046] 步骤103 :对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装 包。
[0047] 具体地,应用程序的安装包可以为应用程序的APK文件。
[0048] 进一步地,本发明的另一实施例中,包括上述步骤101?103的基础上,步骤101 之前还包括:
[0049] 对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程 序文件,其中源程序文件可以为classes, dex文件;
[0050] 所述步骤101包括:
[0051] 对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。
[0052] 进一步地,本发明的另一实施例中,包括上述步骤101?103的基础上,所述步骤 101包括:
[0053] 对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值,其中,所 述资源文件可以为arse格式文件。
[0054] 进一步地,本发明的另一实施例中,包括上述步骤101?103的基础上,所述步骤 102包括:
[0055] 利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行 编译得到所述验证文件,所述程序代码包括采用C++程序或C程序编写的代码,具体地,可 以将所述C++程序或C程序编写的代码编译成为so格式文件。
[0056] 进一步地,本发明的另一实施例中,包括上述步骤101?103的基础上,所述步骤 103之前还包括:
[0057] 在所述验证文件中添加预设可执行代码;
[0058] 所述步骤103包括:
[0059] 对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应 用程序的安装包。
[0060] 本发明的防止应用程序被篡改的方法,首先对应用程序的存储文件进行文件校 验,得到存储文件的唯一校验值,利用该校验值生成用于校验该存储文件的验证文件,再对 所述存储文件和验证文件进行编译打包,生成应用程序的安装包。如果应用程序存储文件 中的代码有任何变化,存储文件的校验值都会改变。这样在使用安装包安装应用程序时,通 过对存储文件的校验值进行验证,即可判断出存储文件是否被篡改,如果发现存储文件被 篡改,则可以提示用户停止安装过程。本发明的技术方案能够验证应用程序是否被篡改,从 而增加应用程序的安全性。
[0061] 图2为本发明实施例防止应用程序被篡改的装置的结构框图,如图2所示,本实施 例包括:
[0062] 校验模块20,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯 一校验值;
[0063] 验证模块21,用于利用所述校验值生成用于校验所述存储文件的验证文件;
[0064] 编译模块22,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序 的安装包。
[0065] 进一步地,所述装置还包括:
[0066] 提取模块23,用于对应用程序的代码进行编译,形成可执行文件,从所述可执行文 件中提取出源程序文件;
[0067] 所述校验模块20具体用于对所述源程序文件进行文件校验,得到所述源程序文 件的唯一校验值。
[0068] 进一步地,所述校验模块20具体用于对应用程序的资源文件进行文件校验,得到 所述资源文件的唯一校验值。
[0069] 进一步地,所述验证模块21具体用于利用所述校验值生成用于校验所述存储文 件的程序代码,并对所述程序代码进行编译得到所述验证文件。
[0070] 进一步地,所述装置还包括:
[0071] 添加模块24,用于在所述验证文件中添加预设可执行代码;
[0072] 所述编译模块22具体用于对所述存储文件和添加有预设可执行代码的验证文件 进行编译打包,生成所述应用程序的安装包。
[0073] 本发明的防止应用程序被篡改的装置,首先对应用程序的存储文件进行文件校 验,得到存储文件的唯一校验值,利用该校验值生成用于校验该存储文件的验证文件,再对 所述存储文件和验证文件进行编译打包,生成应用程序的安装包。如果应用程序存储文件 中的代码有任何变化,存储文件的校验值都会改变。这样在使用安装包安装应用程序时,通 过对存储文件的校验值进行验证,即可判断出存储文件是否被篡改,如果发现存储文件被 篡改,则可以提示用户停止安装过程。本发明的技术方案能够验证应用程序是否被篡改,从 而增加应用程序的安全性。
[0074] 下面结合具体的实施例对本发明的防止应用程序被篡改的方法进行详细介绍:
[0075] 实施例一:
[0076] -般对应用程序的恶意篡改都是通过修改应用程序中的java语言代码来实现。 黑客可以通过在原有代码中添加广告、病毒等恶意代码,或者删掉某些验证相关的代码来 实现恶意目的。所以只要避免代码被修改,就可以从根本上防止应用程序被恶意篡改。
[0077] 如图3所示,本实施例包括以下步骤:
[0078] 步骤al :在应用程序开发完毕后,先将应用程序的代码进行编译,形成可执行的 APK文件,从APK文件中提取出名为classes, dex的文件。
[0079] 步骤a2 :该classes, dex文件包括了所有的java语言代码,对该文件使用现有的 文件校验方法进行校验,并得出该文件的唯一校验码。比如可使用CRC校验对该文件进行 校验,得到该文件的CRC值。其中,CRC即循环冗余校验码(Cyclic Redundancy Check):是 数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意 选定。
[0080] 通过CRC校验可以确保文件不会被修改。因为对一个文件进行计算可以得到唯一 的CRC值,如果对这个文件进行细微修改(哪怕只修改一个字节),该文件的CRC值都会变得 完全不同,所以使用CRC校验可确保对classes, dex文件的任何修改都能被及时发现。
[0081] 步骤a3 :计算出CRC值后,需要编写一个用来验证CRC值的C++程序或C程序,并 将该C++程序或C程序编译成为so格式文件,如"test, so"文件。该"test, so"文件在应 用程序运行的时候,会重新计算classes, dex文件的CRC值,并与之前计算出来的CRC值进 行比对。如果两个CRC值一致,代表该classes, dex文件没有被篡改过,可以正常运行;如 果两个CRC值不一致,则该classes, dex文件可能已经被篡改,此时需要提示用户该应用程 序有风险,建议下载官方版本。
[0082] 步骤a4 :重新对包括上述"test, so"文件和classes, dex文件的所有代码进行编 译打包,形成一个带有验证机制的APK文件。用户可以使用该APK文件安装应用程序,在运 行该APK文件后,会首先调用"test, so"文件,"test, so"文件中的代码会对classes, dex 文件进行CRC校验,得到一 CRC值并与之前的CRC值对比,从而得到应用程序是否被篡改的 结论,避免用户受到损失。
[0083] 由于破解so格式文件的难度远远高于破解普通java代码的难度,因此,本实施 例的技术方案可以有效避免应用程序被恶意篡改,保证应用程序的完整性与安全性。本实 施例中,由于验证部分代码使用C++编写,增加了破解的难度;另外通过二次编译来完成对 classes, dex文件的CRC校验,这种方式即巧妙的获取到classes, dex文件的校验码,又可 以防止黑客了解验证逻辑,从而防止了黑客对代码的篡改。
[0084] 本实施例通过检测classes, dex文件的校验码是否变化来分析该文件是否被篡 改,虽然无法阻止应用程序被反编译,但是可以使得他人无法私自对代码进行修改,使得应 用程序的安全性大大增加。
[0085] 实施例二:
[0086] 由于调用so格式文件的代码仍然是用Java语言编写,这样有些黑客可以通过删 除调用"test, so"文件的代码来避过验证。因此,本实施例在"test, so"文件中添加预设 可执行代码,如果应用程序没有调用"test, so"文件,那么预设可执行代码无法运行,应用 程序获取错误信息给用户相关提示,从而避免应用程序被恶意修改的情况发生。
[0087] 如图4所示,本实施例包括以下步骤:
[0088] 步骤bl :在应用程序开发完毕后,先将应用程序的代码进行编译,形成可执行的 APK文件,从APK文件中提取出名为classes, dex的文件。
[0089] 步骤b2 :该classes, dex文件包括了所有的java语言代码,对该文件使用现有的 文件校验方法进行校验,并得出该文件的唯一校验码。比如可使用CRC校验对该文件进行 校验,得到该文件的CRC值。
[0090] 通过CRC校验可以确保文件不会被修改。因为对一个文件进行计算可以得到唯一 的CRC值,如果对这个文件进行细微修改(哪怕只修改一个字节),该文件的CRC值都会变得 完全不同,所以使用CRC校验可确保对classes, dex文件的任何修改都能被及时发现。
[0091] 步骤b3 :计算出CRC值后,需要编写一个用来验证CRC值的C++程序或C程序,并 将该C++程序或C程序编译成为so格式文件,如"test, so"文件。该"test, so"文件在应 用程序运行的时候,会重新计算classes, dex文件的CRC值,并与之前计算出来的CRC值进 行比对。如果两个CRC值一致,代表该classes, dex文件没有被篡改过,可以正常运行;如 果两个CRC值不一致,则该classes, dex文件可能已经被篡改,此时需要提示用户该应用程 序有风险,建议下载官方版本。
[0092] 步骤b4 :在"test, so"文件中添加预设可执行代码,比如可以在"test, so"文件 中添加一些程序初始化的代码,如申请内存空间,加载动画等等。如果"test, so"文件没有 运行这些代码,则应用程序没有初始化,会导致应用程序运行失败,避免用户损失。
[0093] 这样即使黑客通过某些手段阻止了 so格式文件对APK文件进行校验,由于很难知 道关键代码的内容,使得应用程序无法正常运行,从而给用户相关提示,避免应用程序被恶 意修改给用户造成损失。
[0094] 步骤b5 :重新对包括上述"test, so"文件和classes, dex文件的所有代码进行编 译打包,形成一个带有验证机制的APK文件。用户可以使用该APK文件安装应用程序,在运 行该APK文件后,会首先调用"test, so"文件,"test, so"文件中的代码会对classes, dex 文件进行CRC校验,得到一 CRC值并与之前的CRC值对比,从而得到应用程序是否被篡改的 结论,避免用户受到损失。
[0095] 本实施例通过检测classes, dex文件的校验码是否变化来分析该文件是否被篡 改,虽然无法阻止应用程序被反编译,但是可以使得他人无法私自对代码进行修改,使得应 用程序的安全性大大增加。
[0096] 进一步地,还可以利用本发明的技术方案来防止应用程序的资源文件被替换。应 用程序的资源文件是存储在一个arse格式文件中,例如resources, arse文件。如果对应 用程序中的资源进行替换,会导致该arse格式文件的CRC值发生改变。用实施例一所述的 方案对该arse格式文件进行CRC校验,即可判断资源文件是否被替换。
[0097] 本发明实施例中,在采用文件校验方法对文件进行校验时,除了采用CRC校验,还 可以使用其他校验方式,如MD5校验、SHA1校验、哈希校验等校验方式。只要是通过某种算 法,可以得到文件唯一的校验值的文件校验方法均可应用于本发明的技术方案中。另外,除 了采用单一的校验方式对文件进行校验,还可混合使用这些校验方式,即同时利用两种或 两种以上的校验方式对文件进行校验。
[0098] 本发明的防止应用程序被篡改的方法及装置,操作简单,破解难度大,安全性高, 并且不需要网络支持,随时都可以对应用程序安装包的安全性进行验证,适应能力好。
[0099] 此说明书中所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方 式的独立性。
[0100] 本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来 说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例 来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地 位于一起,而是可以包括存储在不同物理上的不同的指令,当这些指令逻辑上结合在一起 时,其构成模块并且实现该模块的规定目的。
[0101] 实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布 在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操 作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类 型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上 (包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。
[0102] 在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现 的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应 的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯 片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如 现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
[0103] 在本发明各方法实施例中,所述各步骤的序号并不能用于限定各步骤的先后顺 序,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,对各步骤的先后变化也 在本发明的保护范围之内。
[0104] 以上所述是本发明的优选实施方式,应当指出,对于本【技术领域】的普通技术人员 来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也 应视为本发明的保护范围。
【权利要求】
1. 一种防止应用程序被篡改的方法,应用于Android系统的移动终端中,其特征在于, 所述方法包括: 对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值; 利用所述校验值生成用于校验所述存储文件的验证文件; 对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包。
2. 根据权利要求1所述的防止应用程序被篡改的方法,其特征在于,所述对应用程序 的存储文件进行文件校验之前还包括: 对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提取出源程序文 件; 所述对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验值包括: 对所述源程序文件进行文件校验,得到所述源程序文件的唯一校验值。
3. 根据权利要求1所述的防止应用程序被篡改的方法,其特征在于,所述对应用程序 的存储文件进行文件校验,得到所述存储文件的唯一校验值包括: 对应用程序的资源文件进行文件校验,得到所述资源文件的唯一校验值。
4. 根据权利要求2或3所述的防止应用程序被篡改的方法,其特征在于,所述利用所述 校验值生成用于校验所述存储文件的验证文件包括: 利用所述校验值生成用于校验所述存储文件的程序代码,并对所述程序代码进行编译 得到所述验证文件。
5. 根据权利要求4所述的防止应用程序被篡改的方法,其特征在于,所述对所述存储 文件和验证文件进行编译打包之前还包括: 在所述验证文件中添加预设可执行代码; 所述对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装包包括: 对所述存储文件和添加有预设可执行代码的验证文件进行编译打包,生成所述应用程 序的安装包。
6. 根据权利要求1所述的防止应用程序被篡改的方法,其特征在于,所述安装包为APK 文件。
7. -种防止应用程序被篡改的装置,应用于Android系统的移动终端中,其特征在于, 所述装置包括: 校验模块,用于对应用程序的存储文件进行文件校验,得到所述存储文件的唯一校验 值; 验证模块,用于利用所述校验值生成用于校验所述存储文件的验证文件; 编译模块,用于对所述存储文件和验证文件进行编译打包,生成所述应用程序的安装 包。
8. 根据权利要求7所述的防止应用程序被篡改的装置,其特征在于,所述装置还包括: 提取模块,用于对应用程序的代码进行编译,形成可执行文件,从所述可执行文件中提 取出源程序文件; 所述校验模块具体用于对所述源程序文件进行文件校验,得到所述源程序文件的唯一 校验值。
9. 根据权利要求7所述的防止应用程序被篡改的装置,其特征在于, 所述校验模块具体用于对应用程序的资源文件进行文件校验,得到所述资源文件的唯 一校验值。
10. 根据权利要求8或9所述的防止应用程序被篡改的装置,其特征在于, 所述验证模块具体用于利用所述校验值生成用于校验所述存储文件的程序代码,并对 所述程序代码进行编译得到所述验证文件。
11. 根据权利要求7所述的防止应用程序被篡改的装置,其特征在于,所述装置还包 括: 添加模块,用于在所述验证文件中添加预设可执行代码; 所述编译模块具体用于对所述存储文件和添加有预设可执行代码的验证文件进行编 译打包,生成所述应用程序的安装包。
【文档编号】G06F21/54GK104123481SQ201310146217
【公开日】2014年10月29日 申请日期:2013年4月24日 优先权日:2013年4月24日
【发明者】熊丽兵, 傅盛, 徐鸣, 卢云飞 申请人:贝壳网际(北京)安全技术有限公司, 北京金山网络科技有限公司, 北京金山安全软件有限公司, 珠海市君天电子科技有限公司, 可牛网络技术(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1