CN106778088A - 基于Hook技术的动态加载方法 - Google Patents

基于Hook技术的动态加载方法 Download PDF

Info

Publication number
CN106778088A
CN106778088A CN201611089104.XA CN201611089104A CN106778088A CN 106778088 A CN106778088 A CN 106778088A CN 201611089104 A CN201611089104 A CN 201611089104A CN 106778088 A CN106778088 A CN 106778088A
Authority
CN
China
Prior art keywords
file
dex
hook
functions
dex file
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
Application number
CN201611089104.XA
Other languages
English (en)
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.)
Sichuan Changhong Electric Co Ltd
Original Assignee
Sichuan Changhong Electric 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 Sichuan Changhong Electric Co Ltd filed Critical Sichuan Changhong Electric Co Ltd
Priority to CN201611089104.XA priority Critical patent/CN106778088A/zh
Publication of CN106778088A publication Critical patent/CN106778088A/zh
Pending legal-status Critical Current

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/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
    • 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/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种基于Hook技术的动态加载方法,它包括以下步骤:步骤1,对已经加固处理的APK文件进行解压,得到经过加密处理的原始APK文件中的DEX文件,将DEX文件进行存储;步骤2,通过DEX类加载器将步骤1中的DEX文件加载到ART虚拟机;步骤3,采用API Hook方法Hook掉ibart.so库和libc.so库中与DEX文件加载相关的函数;步骤4,重写被Hook的函数,本发明在内存中对加密的Dex文件进行解密保存,增加了反编译的难度,极大程度地提高了APK文件的安全性。本发明适用于Android系统Art模式下软件加壳保护。

Description

基于Hook技术的动态加载方法
技术领域
本发明涉及智能终端安全技术领域,具体涉及基于Hook技术的动态加载方法。
背景技术
近年来,智能手机在全球范围内迅速普及,据最新智能终端销量统计,在中国Android系统目前已占据移动端73%以上的市场份额,大量的用户带来潜在的安全压力,APK应用作为智能设备与用户的唯一交互入口,涉及的业务越来越广,涵盖了娱乐、支付、生活等各个领域。移动互联在给大众消费者带来便捷的同时,也附着各种安全隐患。相对于系统安全来说,Android应用程序级数式的增长过程中面临的安全问题严峻很多。恶意应用层出不穷,热门应用被简单的二次打包、篡改、恶意注入,成为黑客手中敛财的利器。
APK应用实际上是一个Zip压缩文件,该文件结构如下表1所示,其中的Dex文件是核心java代码,包含了应用的关键算法、实现逻辑等,是APK的关键部分,一旦其被反编译,整个应用的源代码将被暴露,破坏者可以向其中注入恶意代码,使其成为一个携带恶意代码的Apk文件。因此,Dex文件是加固产品重点保护的对象,但是现有的加固方法大多存在一些缺陷,主要表现在加固后的APK脱壳加载运行时,Dex动态加载类提供的接口必须要求解密后的源程序短暂地保存在文件系统中,这就极大地增加了Dex文件被泄露的风险。
表1
发明内容
本发明克服了现有技术的不足,提供一种基于Hook技术的动态加载方法。
为解决上述的技术问题,本发明采用以下技术方案:
基于Hook技术的动态加载方法,它包括以下步骤:
步骤1,对已经加固处理的APK文件进行解压,得到经过加密处理的原始APK文件中的DEX文件,将DEX文件进行存储;
步骤2,通过DEX类加载器将步骤1中的DEX文件加载到ART虚拟机;
步骤3,采用API Hook方法Hook掉ibart.so库和libc.so库中与DEX文件加载相关的函数;
步骤4,重写被Hook的函数。
更进一步的技术方案是,所述步骤3中需要Hook的函数包括libart.so库中的execv函数和libc.so库中的read函数、mmap函数和munmap函数。
更进一步的技术方案是,所述步骤4具体包括:
步骤4.1,重写execv函数,在重写的execv函数中判断如果处理的文件为加密后的DEX文件,则让系统退出调用dex2oat的进程,加快Dex文件的启动时间;
步骤4.2,重写read函数,在重写的read函数中判断如果处理的文件为加密后的DEX文件,则将DEX文件头标志赋值给系统校验变量,让加密后的DEX文件通过系统的文件类型校验;
步骤4.3,重写mmap函数,将加密后的DEX文件映射进内存,在重写的mmap函数中判断如果处理的文件为加密后的DEX文件,则调用解密算法对加密的DEX文件进行解密,并返回解密的DEX文件给系统解析加载,进而完成加密DEX文件的加载;
步骤4.4,重写munmap函数,在重写的munmap函数中将hook_mmap中申请的内存释放掉。
更进一步的技术方案是,所述步骤2中的DEX类加载器为Android API提供的Dexclassloder类。
更进一步的技术方案是,所述步骤3中的API Hook方法包括Inline hook方法和Got hook方法。
本技术方案中一方面,通过Hook execv函数让系统退出调用dex2oat的进程,可以加速加壳APK的启动时间;另一方面,在内存中对加密DEX文件进行解密,使得DEX文件难以被获取,克服了使用Dexclassloader类加载DEX文件必须将DEX文件以文件形式明文存放在存储设备上的缺点,大大降低了加壳APK被反编译的风险,保证了APK核心代码DEX文件的安全。
与现有技术相比,本发明的有益效果是:
本发明在内存中对加密的Dex文件进行解密保存,增加了反编译的难度,极大程度地提高了APK文件的安全性。本发明适用于Android系统Art模式下软件加壳保护。
附图说明
图1为本发明一种实施例的基于Hook技术的动态加载方法流程框图。
具体实施方式
下面结合附图对本发明作进一步阐述。
如图1所示的基于Hook技术的动态加载方法,它主要包括如下步骤:
对已作加固处理的APK文件进行解压,得到经过加密处理后的原始APK中的DEX文件另行存储;
在native层使用API Hook技术Hook DEX文件加载相关函数,包括libart.so库中的execv函数和libc.so库中的read函数、mmap函数和munmap函数;
execv函数Hook成功后,重写execv函数,在重写的execv函数中判断所处理的文件是否为加密后的DEX文件,如果是,则让系统退出调用dex2oat的进程,加快DEX文件的启动时间;
read函数Hook成功后,重写read函数,在重写的read函数中判断处理的文件是否为加密后的DEX文件,如果是,则直接将DEX文件头标志赋值给系统校验变量,让加密后的DEX文件通过系统的文件类型校验;
mmap函数Hook成功后,重写mmap函数,将加密后的DEX文件映射进内存,在重写的mmap函数中判断处理的文件是否为加密后的DEX文件,如果是,则在hook_mmap中调用解密算法对加密DEX文件进行解密,并返回解密后的DEX文件;
munmap函数Hook成功后,重写munmap函数,在重写的munmap函数中使用将hook_mmap中申请的内存释放掉。
以上具体实施方式对本发明的实质进行详细说明,但并不能对本发明的保护范围进行限制,显而易见地,在本发明的启示下,本技术领域普通技术人员还可以进行许多改进和修饰,需要注意的是,这些改进和修饰都落在本发明的权利要求保护范围之内。

Claims (5)

1.一种基于Hook技术的动态加载方法,其特征在于,它包括以下步骤:
步骤1,对已经加固处理的APK文件进行解压,得到经过加密处理的原始APK文件中的DEX文件,将DEX文件进行存储;
步骤2,通过DEX类加载器将步骤1中的DEX文件加载到ART虚拟机;
步骤3,采用API Hook方法Hook掉ibart.so库和libc.so库中与DEX文件加载相关的函数;
步骤4,重写被Hook的函数。
2.根据权利要求1所述的基于Hook技术的动态加载方法,其特征在于,所述步骤3中需要Hook的函数包括libart.so库中的execv函数和libc.so库中的read函数、mmap函数和munmap函数。
3.根据权利要求1所述的基于Hook技术的动态加载方法,其特征在于,所述步骤4具体包括:
步骤4.1,重写execv函数,在重写的execv函数中判断如果处理的文件为加密后的DEX文件,则让系统退出调用dex2oat的进程,加快Dex文件的启动时间;
步骤4.2,重写read函数,在重写的read函数中判断如果处理的文件为加密后的DEX文件,则将DEX文件头标志赋值给系统校验变量,让加密后的DEX文件通过系统的文件类型校验;
步骤4.3,重写mmap函数,将加密后的DEX文件映射进内存,在重写的mmap函数中判断如果处理的文件为加密后的DEX文件,则调用解密算法对加密的DEX文件进行解密,并返回解密的DEX文件给系统解析加载,进而完成加密DEX文件的加载;
步骤4.4,重写munmap函数,在重写的munmap函数中将hook_mmap中申请的内存释放掉。
4.根据权利要求1所述的基于Hook技术的动态加载方法,其特征在于,所述步骤2中的DEX类加载器为Android API提供的Dexclassloder类。
5.根据权利要求1所述的基于Hook技术的动态加载方法,其特征在于,所述步骤3中的API Hook方法包括Inline hook方法和Got hook方法。
CN201611089104.XA 2016-11-28 2016-11-28 基于Hook技术的动态加载方法 Pending CN106778088A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611089104.XA CN106778088A (zh) 2016-11-28 2016-11-28 基于Hook技术的动态加载方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611089104.XA CN106778088A (zh) 2016-11-28 2016-11-28 基于Hook技术的动态加载方法

Publications (1)

Publication Number Publication Date
CN106778088A true CN106778088A (zh) 2017-05-31

Family

ID=58914137

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611089104.XA Pending CN106778088A (zh) 2016-11-28 2016-11-28 基于Hook技术的动态加载方法

Country Status (1)

Country Link
CN (1) CN106778088A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108710801A (zh) * 2018-05-29 2018-10-26 北京迪诺益佳信息科技有限公司 一种移动应用动态加载代码的行为管控方法
CN109214184A (zh) * 2018-07-20 2019-01-15 北京大学 一种Android加固应用程序通用自动化脱壳方法和装置
CN109344577A (zh) * 2018-09-25 2019-02-15 四川大学 一种art下使用自修改技术进行软件保护的方法
CN109408073A (zh) * 2018-09-21 2019-03-01 北京大学 一种Android非侵入式应用重打包方法
CN112883374A (zh) * 2021-02-02 2021-06-01 电子科技大学 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105068932A (zh) * 2015-08-25 2015-11-18 北京安普诺信息技术有限公司 一种Android应用程序加壳的检测方法
CN105303072A (zh) * 2015-10-26 2016-02-03 李晖 基于art模式的软件加固方法及装置
CN105631335A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种动态脱壳方法、装置和设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105068932A (zh) * 2015-08-25 2015-11-18 北京安普诺信息技术有限公司 一种Android应用程序加壳的检测方法
CN105303072A (zh) * 2015-10-26 2016-02-03 李晖 基于art模式的软件加固方法及装置
CN105631335A (zh) * 2015-12-25 2016-06-01 北京奇虎科技有限公司 一种动态脱壳方法、装置和设备

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108710801A (zh) * 2018-05-29 2018-10-26 北京迪诺益佳信息科技有限公司 一种移动应用动态加载代码的行为管控方法
CN108710801B (zh) * 2018-05-29 2019-03-22 北京迪诺益佳信息科技有限公司 一种移动应用动态加载代码的行为管控方法
CN109214184A (zh) * 2018-07-20 2019-01-15 北京大学 一种Android加固应用程序通用自动化脱壳方法和装置
CN109214184B (zh) * 2018-07-20 2021-08-20 北京大学 一种Android加固应用程序通用自动化脱壳方法和装置
CN109408073A (zh) * 2018-09-21 2019-03-01 北京大学 一种Android非侵入式应用重打包方法
CN109408073B (zh) * 2018-09-21 2021-10-08 北京大学 一种Android非侵入式应用重打包方法
CN109344577A (zh) * 2018-09-25 2019-02-15 四川大学 一种art下使用自修改技术进行软件保护的方法
CN112883374A (zh) * 2021-02-02 2021-06-01 电子科技大学 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统
CN112883374B (zh) * 2021-02-02 2022-07-01 电子科技大学 一种基于ART环境下的Android平台应用程序通用脱壳方法及系统

Similar Documents

Publication Publication Date Title
CN106778088A (zh) 基于Hook技术的动态加载方法
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN105426708B (zh) 一种Android系统的应用程序的加固方法
CN104239757B (zh) 应用程序防止逆向的方法及装置、运行方法及终端
KR101518420B1 (ko) 안드로이드 플랫폼에서의 apk 파일 관리 장치 및 방법
KR101503785B1 (ko) 동적 라이브러리를 보호하는 방법 및 장치
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN107273723B (zh) 一种基于so文件加壳的Android平台应用软件保护方法
WO2016078130A1 (zh) 一种防逆向apk文件的动态加载方法
CN106650330A (zh) 一种基于Dex加载器的Android应用软件加固保护方法
CN111191195A (zh) 一种用于保护apk的方法和装置
CN103530535A (zh) 一种Android平台应用程序保护的加脱壳方法
CN103413073A (zh) 一种保护java可执行程序的方法及设备
CN109241707A (zh) 应用程序的混淆方法、装置和服务器
CN112269970A (zh) 一种脚本加密方法、装置、服务器及存储介质
CN106845234A (zh) 一种基于函数流关键点监控的安卓恶意软件检测方法
JP2019096299A (ja) 共通中間言語のための保安提供装置と方法、及び保安実行装置と方法
KR101642267B1 (ko) 앱 위변조 방지시스템 및 그 방법
CN108985096B (zh) 一种Android SQLite数据库安全增强、安全操作方法以及装置
KR101557455B1 (ko) 응용 프로그램 코드 분석 장치 및 그것을 이용한 코드 분석 방법
CN106775843B (zh) 基于内存加载的dalvik字节码优化方法
CN103530169B (zh) 虚拟机文件保护方法和用户终端
CN105930728A (zh) 一种应用审查方法及装置
CN110457872B (zh) 一种Android App应用资源的隐藏加固方法
CN112667975A (zh) 一种基于混合加固Android系统应用软件安全防护方法

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170531