CN109753799B - 一种Android应用程序防篡改的方法、系统及计算机存储介质 - Google Patents

一种Android应用程序防篡改的方法、系统及计算机存储介质 Download PDF

Info

Publication number
CN109753799B
CN109753799B CN201811534679.7A CN201811534679A CN109753799B CN 109753799 B CN109753799 B CN 109753799B CN 201811534679 A CN201811534679 A CN 201811534679A CN 109753799 B CN109753799 B CN 109753799B
Authority
CN
China
Prior art keywords
current function
function
tampered
current
memory
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
CN201811534679.7A
Other languages
English (en)
Other versions
CN109753799A (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.)
Xiamen Anscen Network Technology Co ltd
Original Assignee
Xiamen Anscen Network 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 Xiamen Anscen Network Technology Co ltd filed Critical Xiamen Anscen Network Technology Co ltd
Priority to CN201811534679.7A priority Critical patent/CN109753799B/zh
Publication of CN109753799A publication Critical patent/CN109753799A/zh
Application granted granted Critical
Publication of CN109753799B publication Critical patent/CN109753799B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明提供了一种Android应用程序防篡改的方法、系统及计算机存储介质。所述方法包括:检测当前函数的第一标志是否为第一预定标志;比较所述当前函数的内存结构与原函数的内存结构,判断所述当前函数是否被篡改;如果所述当前函数被篡改,则将当前函数恢复为原函数。根据本发明的方法、系统及计算机存储介质,实现恶意代码注入的检测并进行即时反制,自动恢复成原始的程序,更加有效和准确地进行应用程序的自我保护,同时也保障用户的安全使用。

Description

一种Android应用程序防篡改的方法、系统及计算机存储介质
技术领域
本发明涉及计算机技术领域,更具体地涉及应用程序的方法。
背景技术
Android应用程序被恶意篡改,除了反编译修改静态代码再重打包的方式进行静态篡改,还包括动态篡改,即原始应用程序安装之后,对原有程序动态注入恶意代码,在程序运行过程中改变程序的运行路径及运行参数。现有的应用程序防篡改的方法一般是基于安装包的静态文件校验,如对应用程序的存储文件进行校验生成验证文件再打包到安装包中的方法,或通过对APK进行解压修改classes.dex执行文件重新打包的方法。这种基于静态文件校验的方法的不足之处在于无法检测程序被动态篡改的情况,例如程序被动态注入恶意代码,基于静态文件的检测方法就并无法检测出程序被篡改。这些恶意行为可能造成用户隐私被窃取、被远程操控等安全问题。
因此,现有技术中存在无法检测动态注入的恶意代码,以及应用程序安全性低的问题。
发明内容
考虑到上述问题而提出了本发明。本发明提供了一种Android应用程序防篡改的方法、系统及计算机存储介质,基于内存检测的动态防篡改的检测方案,检测到恶意代码注入时进行即时反制,自动恢复成原始的程序,更加有效和准确地进行应用程序的自我保护,同时也保障用户的安全使用。
根据本发明一方面,提供了一种Android应用程序防篡改的方法,包括:
检测当前函数的第一标志是否为第一预定标志;
比较所述当前函数的内存结构与原函数的内存结构,判断所述当前函数是否被篡改;
如果所述当前函数被篡改,则将当前函数恢复为原函数。
示例性地,所述检测当前函数的第一标志是否为第一预定标志包括:在Dalvik运行模式下,检测当前函数的修饰符是否为ACC_NATIVE。
示例性地,所述检测当前函数的第一标志是否为第一预定标志包括:在Art运行模式下,检测当前函数的access_flags是否标识为被Xposed Hook。
示例性地,所述比较所述当前函数的内存结构与原函数的内存结构包括:通过获取所述当前函数的XposedHookInfo,并将其转换为method结构,比较所述当前函数的method结构与所述原函数的method结构。
示例性地,所述转换为method结构包括:在Dalvik运行模式下,通过获取当前函数method的insns即XposedHookInfo,将其转换为Method结构。
示例性地,所述转换为method结构包括:在Art运行模式下,通过获取当前函数method的entry_point_from_jni,将hookinfo->original_mathod转换为ArtMethod结构。
示例性地,所述判断所述当前函数是否被篡改包括:如果所述当前函数的Method结构与原函数的Method结构中除了修改过的值,其余的值都相同,则确定当前函数被注入代码。
示例性地,在Dalvik运行模式下,修改过的值包括:Method结构中的accessFlags,以及nativeFunc、insns、registersSize、outsSize中的至少一个;其余的值包括:clazz、methodIndex、name、shorty中的至少一个。
示例性地,在Art运行模式下,修改过的值包括:ArtMethod类结构中的access_flags_,以及entry_point_from_jni_、entry_point_from_quick_compiled_code_、dex_code_item_offset_中的至少一个;其余的值包括:declaring_class_、dex_method_index_、method_index_中的至少一个。
示例性地,将当前函数恢复为原函数包括:将检测到被篡改的当前函数的内存空间替换为备份的原函数内存空间。
根据本发明另一方面,提供了一种Android应用程序防篡改的系统,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
根据本发明另一方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被计算机执行时实现上述方法的步骤。
根据本发明实施例的一种Android应用程序防篡改的方法、系统和存储介质,采用非接触式的方法,基于内存检测的动态防篡改的检测方案,检测到恶意代码注入时进行即时反制,自动恢复成原始的程序,更加有效和准确地进行应用程序的自我保护,同时也保障用户的安全使用。
附图说明
通过结合附图对本发明实施例进行更详细的描述,本发明的上述以及其它目的、特征和优势将变得更加明显。附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是用于实现根据本发明实施例的一种Android应用程序防篡改的方法的示意性流程图;
图2是用于实现根据本发明实施例的在Dalvik运行模式下检测当前函数是否被篡改的示意性流程图;
图3是用于实现根据本发明实施例的在Art运行模式下检测当前函数是否被篡改的示例的示意性流程图;
图4是用于实现根据本发明实施例的在Dalvik运行模式下恢复原函数的示例的示意性流程图;
图5是用于实现根据本发明实施例的在Art运行模式下恢复原函数的示例的示意性流程图。
具体实施方式
为了使得本发明的目的、技术方案和优点更为明显,下面将参照附图详细描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。基于本发明中描述的本发明实施例,本领域技术人员在没有付出创造性劳动的情况下所得到的所有其它实施例都应落入本发明的保护范围之内。
dex文件是Android应用程序的可执行文件,如前所述,例如,基于Xposed的开源框架下,动态注入的恶意代码,把原有函数的method结构体进行了拷贝,保存到一个新的地址A指向的内存空间,同时修改原函数的修饰符,修改原函数的入口指向一个回调函数,回调函数内容包含被注入的代码和原函数的代码(即A所指向的程序),保存原函数的代码是为了运行被注入的代码之后能够运行原函数的逻辑。这样原函数被调用时则会执行回调函数,原函数原有的运行逻辑或参数就被篡改了。
具体来说,例如:在Dalvik运行模式下,首先通过拷贝当前函数相关信息保存到hookinfo实现原函数的备份,接着修改当前函数的method修饰符为ACC_NATIVE(accessFlags与0x00000100进行或运算),修改当前函数的nativeFunc指向hook回调方法,以及替换当前函数的method->insns指向hookinfo,最后修正当前函数的registersSize及outsSize;在Art运行模式下,首先通过拷贝当前函数相关信息保存到hookinfo->original_method实现原函数的备份,接着修改当前函数的ArtMethod->access_flags_(与0x10000000进行或运算),以标志此函数为被注入的函数,替换当前函数的entry_point_from_jni_指向hookinfo,修改entry_point_from_quick_compiled_code_指向hook回调函数,最后修改dex_code_item_offset_为0。
这种对Android应用程序的动态注入篡改程序是无法被现有的基于静态文件检测的方法所检测的。
因此,本发明实施例提出了一种Android应用程序防篡改的方法。参考图1来描述用于实现本发明实施例的一种Android应用程序防篡改的方法100。
首先,在步骤S110,检测当前函数的第一标志是否为第一预定标志;
在步骤S120,比较所述当前函数的内存结构与原函数的内存结构,判断所述当前函数是否被篡改;
在步骤S130,如果所述当前函数被篡改,则将当前函数恢复为原函数。
根据本发明实施例,步骤110可以进一步地包括:第一标志包括当前函数的修饰符或access_flags访问标志;第一预定标志包括ACC_NATIVE或被Xposed Hook。
在一个实施例中,在Dalvik运行模式下,检测当前函数的修饰符是否为ACC_NATIVE。
在另一个实施例中,在Art运行模式下,检测当前函数的access_flags是否标识为被Xposed Hook。
根据本发明实施例,步骤120可以进一步地包括:所述比较所述当前函数的内存结构与原函数的内存结构包括:通过获取所述当前函数的XposedHookInfo,并将其转换为method结构,比较所述当前函数的method结构与所述原函数的method结构。
根据本发明实施例,步骤120还可以进一步地包括:所述判断所述当前函数是否被篡改包括:如果所述当前函数的Method结构与原函数的Method结构中除了修改过的值,其余的值都相同,则确定当前函数被注入代码。
在一个实施例中,参见图2,图2示出了用于实现根据本发明实施例的在Dalvik运行模式下检测当前函数是否被篡改的示例的示意性流程图。具体来说:
在Dalvik运行模式下,首先通过获取当前函数method(标识为curMethod)的insns即XposedHookInfo,将其转换为Method结构(标识为originMethod);
然后,比较所述当前函数中curMethod与originMethod的内存结构,如果除去修改过的值,其余的值都相同,就确定所述当前函数函数被xposed注入了代码。其中,修改过的值包括:Method结构中的accessFlags,以及nativeFunc、insns、registersSize、outsSize中的至少一个;其余的值包括:clazz、methodIndex、name、shorty中的至少一个。
在另一个实施例中,参见图3,图3示出了用于实现根据本发明实施例的在Art运行模式下检测当前函数是否被篡改的示例的示意性流程图。具体来说:
在Art运行模式下,首先通过获取当前函数method(标识为curMethod)的entry_point_from_jni_即XposedHookInfo,将hookinfo->original_mathod转换为ArtMethod结构(标识为originMethod)。
然后,比较所述当前函数中curMethod与originMethod的内存结构,如果除去修改过的值之外,其余的值都一样,就可以判断该函数被xposed注入了代码。其中,修改过的值包括:ArtMethod类结构中的access_flags_,以及entry_point_from_jni_、entry_point_from_quick_compiled_code_、dex_code_item_offset_中的至少一个;其余的值包括:declaring_class_、dex_method_index_、method_index_中的至少一个。
根据本发明实施例,步骤230可以进一步地包括:将检测到被篡改的当前函数的内存空间替换为备份的原函数内存空间。
在一个实施例中,参见图4,图4示出了根据本发明实施例的在Dalvik运行模式下恢复原函数的示例的示意性流程图。具体来说:在Dalvik运行模式下,恢复当前函数method(标识为curMethod)为原函数originMethod的内容。
在另一个实施例中,参见图5,图5示出了实现根据本发明实施例的在Art运行模式下恢复原函数的示例的示意性流程图。具体来说:在Art运行模式下,恢复当前函数method(标识为curMethod)为原函数originMethod的内容。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
根据本发明实施例,还提供了一种Android应用程序防篡改的系统,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述方法的步骤。
此外,根据本发明实施例,还提供了一种计算机可读存储介质,在所述存储介质上存储了程序指令,在所述程序指令被计算机或处理器运行时用于执行本发明实施例的Android应用程序防篡改方法的相应步骤。所述存储介质可以包括只读存储器,可擦除可编程只读存储器等各种存储器,或上述存储介质的任意组合。
根据本发明实施例的Android应用程序防篡改方法、系统以及存储介质,基于内存检测的动态防篡改的检测方案,检测到恶意代码注入时进行即时反制,自动恢复成原始的程序,更加有效和准确地进行应用程序的自我保护,同时也保障用户的安全使用。
尽管这里已经参考附图描述了示例实施例,应理解上述示例实施例仅仅是示例性的,并且不意图将本发明的范围限制于此。本领域普通技术人员可以在其中进行各种改变和修改,而不偏离本发明的范围和精神。所有这些改变和修改意在被包括在所附权利要求所要求的本发明的范围之内。本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
以上所述,仅为本发明的具体实施方式或对具体实施方式的说明,本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。本发明的保护范围应以权利要求的保护范围为准。

Claims (9)

1.一种Android应用程序防篡改的方法,其特征在于,所述方法包括:
检测当前函数的第一标志是否为第一预定标志,包括:在Dalvik运行模式下,检测当前函数的修饰符是否为ACC_NATIVE,或在Art运行模式下,检测当前函数的access_flags是否标识为被Xposed Hook;
若当前函数的第一标志为第一预定标志,比较所述当前函数的内存结构与原函数的内存结构,判断所述当前函数是否被篡改,所述比较所述当前函数的内存结构与原函数的内存结构包括:通过获取所述当前函数的XposedHookInfo,并将其转换为method结构,比较所述当前函数的method结构与所述原函数的method结构;
如果所述当前函数被篡改,则将当前函数恢复为原函数。
2.如权利要求1所述的方法,其特征在于,所述转换为method结构包括:在Dalvik运行模式下,通过获取当前函数method的insns即XposedHookInfo,将其转换为Method结构。
3.如权利要求1所述的方法,其特征在于,所述转换为method结构包括:在Art运行模式下,通过获取当前函数method的entry_point_from_jni,将hookinfo->original_mathod转换为ArtMethod结构。
4.如权利要求1所述的方法,其特征在于,所述判断所述当前函数是否被篡改包括:如果所述当前函数的Method结构与原函数的Method结构中除了修改过的值,其余的值都相同,则确定当前函数被注入代码。
5.如权利要求4所述的方法,其特征在于,在Dalvik运行模式下,修改过的值包括:Method结构中的accessFlags,以及nativeFunc、insns、registersSize、outsSize中的至少一个;其余的值包括:clazz、methodIndex、name、shorty中的至少一个。
6.如权利要求4所述的方法,其特征在于,在Art运行模式下,修改过的值包括:ArtMethod类结构中的access_flags_,以及entry_point_from_jni_、entry_point_from_quick_compiled_code_、dex_code_item_offset_中的至少一个;其余的值包括:declaring_class_、dex_method_index_、method_index_中的至少一个。
7.如权利要求1所述的方法,其特征在于,将当前函数恢复为原函数包括:将检测到被篡改的当前函数的内存空间替换为备份的原函数内存空间。
8.一种Android应用程序防篡改的系统,包括存储器、处理器及存储在所述存储器上且在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被计算机执行时实现权利要求1至6中任一项所述方法的步骤。
CN201811534679.7A 2018-12-14 2018-12-14 一种Android应用程序防篡改的方法、系统及计算机存储介质 Active CN109753799B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811534679.7A CN109753799B (zh) 2018-12-14 2018-12-14 一种Android应用程序防篡改的方法、系统及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811534679.7A CN109753799B (zh) 2018-12-14 2018-12-14 一种Android应用程序防篡改的方法、系统及计算机存储介质

Publications (2)

Publication Number Publication Date
CN109753799A CN109753799A (zh) 2019-05-14
CN109753799B true CN109753799B (zh) 2021-01-15

Family

ID=66403825

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811534679.7A Active CN109753799B (zh) 2018-12-14 2018-12-14 一种Android应用程序防篡改的方法、系统及计算机存储介质

Country Status (1)

Country Link
CN (1) CN109753799B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105550581A (zh) * 2015-12-10 2016-05-04 北京奇虎科技有限公司 一种恶意代码检测方法及装置
CN106502703A (zh) * 2016-10-27 2017-03-15 腾讯科技(深圳)有限公司 一种函数调用方法和装置
CN107808096A (zh) * 2017-11-23 2018-03-16 厦门安胜网络科技有限公司 检测apk运行时被注入恶意代码的方法、终端设备及存储介质
CN107958152A (zh) * 2017-12-04 2018-04-24 山东中创软件商用中间件股份有限公司 基于虚拟文件系统的防篡改方法、装置以及设备
CN108229147A (zh) * 2016-12-21 2018-06-29 武汉安天信息技术有限责任公司 一种基于Android虚拟容器的内存检测装置及方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102314561B (zh) * 2010-07-01 2014-07-23 电子科技大学 基于api hook的恶意代码自动分析方法和系统
US11100218B2 (en) * 2014-01-20 2021-08-24 Prevoty, Inc. Systems and methods for improving accuracy in recognizing and neutralizing injection attacks in computer services
US10303876B2 (en) * 2016-12-27 2019-05-28 Mcafee, Llc Persistence probing to detect malware
CN106874761A (zh) * 2016-12-30 2017-06-20 北京邮电大学 一种安卓系统恶意应用检测方法及系统
CN108021357B (zh) * 2017-11-20 2022-03-11 北京奇虎科技有限公司 程序调用的优化方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105550581A (zh) * 2015-12-10 2016-05-04 北京奇虎科技有限公司 一种恶意代码检测方法及装置
CN106502703A (zh) * 2016-10-27 2017-03-15 腾讯科技(深圳)有限公司 一种函数调用方法和装置
CN108229147A (zh) * 2016-12-21 2018-06-29 武汉安天信息技术有限责任公司 一种基于Android虚拟容器的内存检测装置及方法
CN107808096A (zh) * 2017-11-23 2018-03-16 厦门安胜网络科技有限公司 检测apk运行时被注入恶意代码的方法、终端设备及存储介质
CN107958152A (zh) * 2017-12-04 2018-04-24 山东中创软件商用中间件股份有限公司 基于虚拟文件系统的防篡改方法、装置以及设备

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Android Rooting:An Arms Race between Evasion and Detection;Long Nguyen-Vu 等;《SECURITY AND COMMUNICATION NETWORKS》;20171231;第2017卷;全文 *
安卓平台下面向隐私保护的恶意程序分析与检测方法研究;尼见;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180715;第2018卷(第7期);全文 *

Also Published As

Publication number Publication date
CN109753799A (zh) 2019-05-14

Similar Documents

Publication Publication Date Title
US20220303136A1 (en) Security privilege escalation exploit detection and mitigation
US10284591B2 (en) Detecting and preventing execution of software exploits
CN109561085B (zh) 一种基于设备识别码的身份验证方法、服务器及介质
US7607122B2 (en) Post build process to record stack and call tree information
US20140053267A1 (en) Method for identifying malicious executables
CN107690645A (zh) 使用解释器虚拟机的行为恶意软件检测
CN107908958B (zh) SELinux安全标识符防篡改检测方法及系统
US11593473B2 (en) Stack pivot exploit detection and mitigation
US20090328211A1 (en) Control flow deviation detection for software security
CN111400723A (zh) 基于tee扩展的操作系统内核强制访问控制方法及系统
CN113946825B (zh) 一种内存马处理方法及系统
CN111524007A (zh) 一种智能合约的嵌入式入侵检测方法及装置
CN114676419A (zh) 实时预警应用程序文件被篡改的方法、系统、设备及介质
CN106997435B (zh) 一种操作系统安全防控的方法、装置及系统
CN111931192B (zh) rootkit检测方法、装置及电子设备
CN109753799B (zh) 一种Android应用程序防篡改的方法、系统及计算机存储介质
US11671440B1 (en) Detection failure monitoring system
GB2599195A (en) Computer program trust assurance for Internet of Things (IoT) devices
CN113094699A (zh) 一种安全监测方法、电子设备和计算机可读存储介质
CN111752570A (zh) 一种编译方法、装置、终端及计算机可读存储介质
US11256492B2 (en) Computer program trust assurance for internet of things (IoT) devices
US12001545B2 (en) Detecting stack pivots using stack artifact verification
CN117786666B (zh) 功能代码的启动校验方法、装置、电子设备及存储介质
CN117131511A (zh) 用于数据保护的方法、装置、设备和可读介质
CN116089933A (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
GR01 Patent grant
GR01 Patent grant