Android下通过hook技术实现透明加解密保障数据安全
Android应用开发中的用户数据加密技术
Android应用开发中的用户数据加密技术在Android应用开发中,用户数据加密技术被广泛应用于保护用户的隐私和数据安全。
随着移动应用的普及和用户对数据隐私的关注增加,开发者必须采取措施确保用户数据不会被未经授权的访问和窃取。
本文将介绍Android应用开发中常用的用户数据加密技术。
一、对称加密算法对称加密算法是一种将数据转换成无法理解的密文,并且需要特定的密钥才能将密文解密为原始数据的方法。
在Android应用中,常见的对称加密算法有AES(Advanced Encryption Standard)和DES(Data Encryption Standard)。
1. AES算法AES算法是一种高级加密标准,广泛应用于保护敏感数据的机密性和完整性。
它使用128位、192位或256位密钥对数据进行加密和解密,并且是当前最安全可靠的加密算法之一。
在Android应用中,可以使用Android提供的javax.crypto包下的类库进行AES加密和解密操作。
2. DES算法DES算法是一种对称密钥算法,使用56位的密钥对数据进行加密和解密。
尽管DES算法已经过时,并且相对于AES来说安全性较低,但仍然可以在特定情况下使用。
在Android应用中,可以使用javax.crypto包下的类库来进行DES加密和解密操作。
二、非对称加密算法非对称加密算法是一种使用公钥和私钥进行加密和解密的方法。
它通过生成一对密钥,公钥用于加密数据,而私钥用于解密数据。
在Android应用中,常用的非对称加密算法有RSA(Rivest-Shamir-Adleman)和DSA(Digital Signature Algorithm)。
1. RSA算法RSA算法是一种公钥加密算法,它使用两个密钥,一个是公钥用于加密,另一个是私钥用于解密。
RSA算法的安全性基于大数分解问题,目前是最广泛使用的非对称加密算法之一。
在Android应用中,可以使用Java的javax.crypto包下的类库进行RSA加密和解密操作。
android hook原理
android hook原理Android Hook技术是一种基于Java层的反射机制,通过修改系统的一些关键API,来达到篡改Android应用程序的目的,从而获取或控制应用程序的行为。
本文将详细介绍Android Hook的原理和实现方法。
1. Hook的原理Hook可以分为两种:静态Hook和动态Hook。
静态Hook是指Hook在应用程序启动前,通过修改系统中的类、方法等来达到影响应用程序行为的目的。
动态Hook是指Hook在应用程序运行时,通过注入Hook代码来实现影响应用程序行为的目的。
静态Hook在安卓4.x之前是比较流行的,基本上可以用来hook系统和第三方应用。
但随着系统发展,为了保证安全,在安卓4.x之后开始加强了安全机制,静态Hook的难度也随之提高。
而动态Hook具有更强的适应性和协作性,目前在逆向实践中,动态Hook方式逐渐成为主流。
Hook的核心原理就是替换原有的方法,使应用程序在调用原有方法时,实际上调用的是钩子函数。
例如要Hook的函数名为“test()”,通过Hook技术替换“test()”函数,在“test()”函数执行之前或之后注入手段对其进行修改或记录。
原始函数->钩子函数->原始函数返回值Hook技术主要使用反射机制,通过分析源代码,找到要Hook的函数的参数和返回值,就可以在Hook中重写该函数并调用原函数的参数和返回值,从而获得源代码的控制权。
根据不同的Hook目的和Hook对象,Hook技术可以分为以下三种:(1) 替换某个方法的实现:伪装成原始方法实现的外壳函数,放到系统中,通过调用这个外壳函数,同时可以偷偷读取原始函数的参数和返回值。
(2) 调用某个方法之前或之后增加其他功能:如AOP编程,如执行时间统计,打印调用堆栈信息等。
(3) 动态代理:通过动态代理技术,将Hook出来的对象接口交给代理,用来实现细节替换,最后调用原函数。
Hook技术的实现需要了解Java代码结构、反射机制和Java字节码等知识,还需要熟悉Android API的相关知识。
基于Hook技术的Android平台隐私保护系统
基于Hook技术的Android平台隐私保护系统朱晓妍;章辉;马建峰【期刊名称】《网络与信息安全学报》【年(卷),期】2018(004)004【摘要】针对Android中恶意应用窃取用户隐私的问题,设计并实现了一个基于Hook技术的隐私保护系统.该系统包括应用分类模块、隐私信息管理模块和共谋攻击管理模块.应用分类模块利用权限特征向量集构建分类模型,对手机上的应用进行分类;隐私信息管理模块利用Hook技术对所有涉及隐私信息的API进行挂钩,通过返回虚假值或者空值,拦截恶意应用获取隐私信息;共谋攻击管理模块同样使用Hook技术,对提供应用间通信的API进行挂钩,当通信双方满足共谋攻击的权限规则,通过返回空值实现拦截双方的通信内容.最后,通过实验验证了该系统的可行性和有效性,并且该系统不需要对Android系统和应用进行修改,占用的内存较小,能够实时拦截窃取隐私的行为.【总页数】10页(P38-47)【作者】朱晓妍;章辉;马建峰【作者单位】西安电子科技大学通信工程学院,陕西西安710071;西安电子科技大学通信工程学院,陕西西安710071;2西安电子科技大学网络与信息安全学院,陕西西安710071【正文语种】中文【中图分类】TN91【相关文献】1.基于Android平台的防盗托管隐私保护与智能家居防火远程视频监控系统 [J], 徐津文;李旖轩2.基于人脸识别技术的Android平台隐私保护系统设计 [J], 蔡芷铃;林柏钢;姜青山3.基于HOOK 技术的进程管理系统研究 [J], 赵广强;凌捷4.基于Hook技术的Android平台隐私保护系统 [J], 朱晓妍;章辉;马建峰;;;5.基于APIHOOK技术的代码行为诊断系统的设计和开发 [J], 陈雅铭;关心;刘铮因版权原因,仅展示原文概要,查看原文内容请购买。
基于HOOK技术的网络流透明加密系统的研究与实现
为 了实现透明加密的 目的 , 透明加密技术必须在程序读写文件时改 变程序 的读写方式。使密文在读 入内存 时程序能够识别 , 而在保存时又
标 志符 S I , A SD M C地址过滤 、 有线等效保密机 制 WE 、 口访 问控制技 P端 术 8 2I 和 WP 0. x A技术 。 在实际 的应用中, 各个用户应根据 自身的安全需 求, 选用适合的无线局域 网安全技术 , 提供足够 的安 全防护 , 让用 户放心 地使用无线局域网带来 的方便快捷。
的。
目前 , 已成为企业 与企业 、 网络 人与人沟通 的重要工具之一 。 企业 内 部不论是透过 It t n me对外通信与 内部通信 ,已经离不 开使用 网络相关 e
通信工具。但在 网络通信方便 、 效率高的背后 , 则隐藏着情况下 , 企业便无法有效控 制员 工将数据
20 年 第 1 卷 07 7
第 2 期 5
收稿 日期:0 7 0 — 0 2 0 - 5 1
基于 H O O K技术的 网络流透 明 加密 系统的研究与实现
杨 帆 , 一王 锋
(. 1 昆明理工大学云南省计算机技术应用重点实验室 , 云南昆明 ,5 0 12 6 05 ;. 福贡县人民武装部 , 云南福贡 ,7 40 63 0 ) 摘 要 :透 明加 密技术是近年 来针对 企业文件保 密需求应运而生的一种文件加 密技
参 考 文 献
的安全特性。 M C发生错误 的时候 , 当 I 数据很可能 已经被篡改 , 系统很可 能正在受到攻击。此时 , P W A还会采取一系列 的对 策, 比如立 刻更换组
基于API_HOOK的数据文件透明加解密系统设计和实现
清华大学综合论文训练题目:基于API HOOK的数据文件透明加解密系统设计与实现系别:软件学院专业:计算机软件姓名:王前指导教师:顾明研究员辅导教师:郭陟助理研究员2008 年 6 月 5 日中文摘要数据文件的安全对国家机构、企业和个人都有至关重要的作用。
现存的对数据文件有效的保护方法有利用硬件技术的硬盘加密技术;在驱动层的透明加解密;过滤驱动层的加解密技术;基于API HOOK的透明加解密技术。
这些技术都能控制在硬盘上存储的数据文件以加密的形式存储,既不影响用户使用,也能在一定程度上保证了数据文件的安全。
在各种技术中,本文主要研究基于API HOOK的透明加解密技术,一方面是因为它是最靠近应用程序读写文件的接口,使明文数据使数据文件在内存中以明文形式出现的时间最短,只要做好进程保护,就能绝对控制数据文件的安全;另一方面,市场上此类产品因为设计实现难度较大而缺乏通用产品,具有很好的实用意义。
本文主要分析几种常用的数据文件的类型,分析软件行为,研究WindowsNT 平台下kernel32.dll和ntdll.dll的部分API,通过设计实现一个独立的处理系统,HOOK部分API函数,实现数据文件的透明加解密。
本论文不仅提出了一套在用户API层实现的透明加解密的设计方法,还实现了一个能满足几种特定软件的原型系统。
关键词:数据文件 API HOOK 透明加解密系统设计与实现ABSTRACTThe security of data files is important. There are four main methods now that can efficiently protect data files: encrypt and decrypt data in hardware level, in file drivers, in filter driver and in user space. All of these methods can promise data files in disks are stored with encrypted format, and be transparent to customers.Of all these methods, the objective here is aimed at transparent encryption and decryption using API HOOK. The reason can be explained in two aspects. Firstly, this method keeps the original data(plain text) nearest to the user memory. Therefore, the time plain text exists is the shortest. Secondly, the product designed and realized by this method is not easy and rare. It is of great use if it was developed.This analyses the actions of some generally used software applications, and also studies some API functions of kernel32.dll and ntdll.dll of Windows NT platform. We achieve the objective of implementing a system that can encrypt and decrypt data file transparently by hooking some significant API function.It does not only put forward the design methods and principles, but also develops a model of our theory which can be applied to some certain software applications. Keywords:Data files API HOOK transparent encryption and decryption system design and implement主要符号对照表本文中使用的符号对照表如下:API 应用程序编程接口(Application Programming Interface)OS 操作系统(Operation System)NTFS NT文件系统(新式技术文件系统)EFS 加密文件系统(Encrypting File System)FAT 文件分区表,管理文件系统(File Allocation Table)DLL 动态链接库(Dynamic Linkable Library)IPC 进程间通信(Inter Process Communication)目录第1章引言 (1)1.1 研究背景 (1)1.1.1 数据文件泄漏的案例 (1)1.1.2 数据文件受到威胁的分类 (2)1.1.3 本文的目标和意义 (3)1.2 研究现状 (4)1.2.1 Windows NT系统与文件存取相关机制简介 (4)1.2.2 硬件加解密 (4)1.2.3 驱动层透明加解密 (6)1.2.4 过滤驱动层透明加解密 (7)1.2.5 用户层API HOOK透明加解密 (9)1.2.6 几种技术的比较 (9)1.3 系统概览与论文结构 (10)第2章研究的相关理论和工具介绍 (11)2.1 用于API注入的MadCollection开发包 (11)2.1.1 MadCollection简介 (11)2.1.2 MadCollection在本论文的中的应用 (12)2.2 涉及的API函数的研究 (13)2.2.1 Shell32.dll中相关的API函数 (13)2.2.2 Kernel32.dll中相关的API函数 (14)2.2.3 Ntdll.dll中相关的API函数 (17)2.3 分组密码和序列密码 (20)2.3.1 分组密码及AES算法 (20)2.3.2 序列密码及RC4算法 (22)第3章系统的分析与设计 (24)3.1 系统设计的目标 (24)3.1.1 系统设计的前提假设 (24)3.1.2 数据文件保护的解决方案 (25)3.2 软件及系统行为分析 (27)3.2.1 系统的范围 (27)3.2.2 分析的结果 (27)3.3 系统的设计模型 (32)3.3.1 系统的设计模型 (32)3.3.2 钩子注入卸载模块 (33)3.3.3 进程间通信模块 (33)3.3.4 文件复制模块 (33)3.3.5 注入的DLL模块 (34)第4章系统的实现 (35)4.1 设计系统实现和运行的环境 (35)4.2 DLL文件的注入卸载模块 (35)4.3 进程间通信模块 (36)4.4 文件复制模块 (37)4.4.1 数据结构的介绍 (37)4.4.2 多线程处理多个复制的操作的实现 (38)4.4.3 异步模式读写文件加解密的实现 (38)4.5 注入的DLL模块 (41)4.5.1 模块的内部结构 (41)4.5.2 文件名和句柄的对应 (44)4.5.3 进程和后缀的控制 (45)4.5.4 文件加头的处理 (45)4.5.5 加密算法的选择 (46)4.6 日志系统 (47)第5章结论 (49)5.1 取得的成果 (49)5.2 未来的展望 (50)插图索引 (51)表格索引 (52)参考文献 (53)致谢 (55)声明 (56)附录A 外文资料的书面翻译 (1)第1章引言1.1 研究背景1.1.1 数据文件泄漏的案例2007年10月底,美国新英格兰地区300多家银行在对全球折扣零售业巨头TJX公司提出起诉的文件中称,由于没有采取必要的安全措施,该公司在黑客的攻击下发生了严重的数据泄露事件,导致9400多万用户的账户受到影响,并由此引发了至少13个国家发生大量信用卡和借记卡诈骗案件,仅Visa卡用户的损失就超过6800万美元。
具有hook机制的过滤驱动加解密模型
具有hook机制的过滤驱动加解密模型蔡强;薛子育;毛典辉;李海生;曹健【摘要】The encryption and decryption for file protection were studied. To solve the problems of un-unified file identifi-cation and increasement of memory’s file leakage risk in information security caused by the file’ s use of a filter driver model to perform encryption and decryption, a new encryption and decryption model combining the hook mechanism and the filtering driver model was designed. The model uses the filter driver model to encrypt the file, and at the same time, the hook mechanism is introduced to capture the file operation behavior in memory to make the file has the same identity around the encryption and decryption. Thus under the circum stances of keeping the original operating habits of the file, a reduc tion on the risk of the file’ s recovery is achieved. The theoretical analy-sis and experiments demonstrate that the model proposed in the study can be used to fast encrypt and decrypt differ-ent files under three encryption modes, and its disintegration rate can be decreased over 3 per cent compared with the filter driver model.%研究了文件保护的加解密技术。
android encryptedfile原理
android encryptedfile原理Android EncryptedFile是Android Jetpack库中的一个组件,旨在提供对文件进行透明加密和解密的功能。
本文将详细介绍Android EncryptedFile的工作原理,包括使用示例和内部实现机制。
一、加密文件的需求随着移动设备和网络的普及,越来越多的用户在移动设备上创建和存储敏感信息和文件。
这些敏感信息需要保护,以防被未经授权的访问者获取。
因此,加密文件的需求变得越来越重要。
二、EncryptedFile的基本概念EncryptedFile是Android Jetpack库中Encrypted系列组件的一部分,它提供了一种方便的方式来对文件进行透明加密和解密操作。
对于开发者来说,使用EncryptedFile可以将加密和解密的逻辑抽象化,并且不需要直接处理底层的加密和解密算法。
三、使用EncryptedFile加密和解密文件1. 添加依赖要使用EncryptedFile,首先需要在项目的build.gradle文件中添加以下依赖:implementation "androidx.security:security-crypto:1.0.0-rc03"2. 创建EncryptedFile创建一个EncryptedFile对象需要传入一个File对象和EncryptedFileOptions对象。
EncryptedFileOptions对象允许你指定加密算法和加密密钥。
kotlinval file = File("path_to_file")val encryptedFile = EncryptedFile.Builder(file,context,masterKeyAlias,EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB ).build()其中,masterKeyAlias是一个字符串,用于标识加密密钥。
Android Hook技术防范漫谈 - 技术团队
2. Cydia Substrate使用的是Java虚拟机(JVM),因此它的实现方式与 Xposed Installer不同。
3. Cydia Substrate通过对应用的函数进行Hook和Replace,实现对应用的修改 和控制。
4. Cydia Substrate框架提供了一套简洁的API,方便开发者进行开发和使用。
原理对比
1. Xposed Installer和Cydia Substrate都实现对方法的Hook和Replace,但工作 原理不同。
2. Xposed Installer使用Java虚拟机实现Hook,需要将所有方法转换为Native 方法;
2. 面向对象编程:Java支持类和对象的概念,能够实现封装、继承和多态等特 性。
3. 异常处理:Java提供了丰富的异常处理机制,可以优雅地处理程序运行过程 中可能出现的错误。
Native层检测
1. Native层是应用程序的基本构成部分,用于实现特定功能。 2. 检测Native层可以帮助开发人员发现代码中的错误和潜在问题。 3. 一些常见的Native层检测工具包括静态代码分析工具和动态代码分析工具。 4. Native层检测可以提高软件质量,减少维护成本和时间。 5. 对Native层的正确检测可以避免在部署应用程序时出现性能问题和安全性风
2. Xposed Installer的工作原理是在系统启动时,将所有需要替换的Method通 过JNI方法'hookMethodNative'指向Native方法'xposedCallHandler',然后通 过调用'handleHookedMethod'Java方法来调用被劫持的方法转入Hook逻辑 。
android hook技术原理
android hook技术原理Android Hook技术原理Android Hook技术是指通过修改Android系统或应用程序代码,以便在运行时拦截和修改程序的功能或行为。
通过Hook技术,可以实现对Android应用程序的各种操作,如修改应用程序的界面、修改应用程序的行为、监控应用程序的运行状态等。
本文将对Android Hook技术的原理进行详细介绍。
一、Hook技术的原理1. 什么是HookHook是一种技术手段,可以在程序运行的过程中,拦截并修改程序的行为。
在Android系统中,Hook技术可以通过修改系统的API调用,来改变应用程序的行为,实现对应用程序的控制。
2. Hook的实现方式在Android系统中,Hook技术可以通过两种主要的方式来实现:静态Hook和动态Hook。
静态Hook是通过修改应用程序的代码来实现的,需要对应用程序的源代码进行修改,并重新编译成新的应用程序。
这种方式需要对应用程序的代码结构和运行机制有较深的了解,并且需要有相应的开发工具和环境。
动态Hook是通过在应用程序运行时修改应用程序的行为来实现的,不需要对应用程序的源代码进行修改。
这种方式不需要对应用程序的代码结构和运行机制有深入的了解,只需要在运行时注入一些代码即可。
3. 动态Hook的原理动态Hook的实现主要依赖于Android系统的底层机制和技术,主要包括以下几个步骤:(1)定位目标方法:首先需要确定要Hook的目标方法,即需要拦截和修改的方法。
(2)获取目标方法的地址:通过反射等方式,获取目标方法在内存中的地址。
(3)修改目标方法的地址:通过修改目标方法在内存中的地址,将其指向Hook方法。
(4)实现Hook方法:Hook方法是指在目标方法执行前或执行后需要执行的代码。
可以通过编写一个Hook回调函数,来实现Hook方法的功能。
(5)完成Hook操作:将Hook方法的地址写入目标方法的地址中,完成Hook操作。
android java hook 原理
android java hook 原理下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by the editor. I hope that after you download them, they can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!In addition, our shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!在Android应用开发中,利用Java编程语言进行Hook是一种常见的技术手段。
android hook原理
android hook原理
AndroidHook原理指的是在Android系统中对应用程序进行修改或调用的一种技术。
通过Hook技术,可以在应用程序运行时修改其
行为,实现一些特定的功能或者调试。
Android Hook技术主要有Java 层Hook和Native层Hook两种实现方式。
Java层Hook主要通过动态代理机制实现,即在Java层拦截目
标方法,修改传入参数或返回值,从而实现自定义的逻辑。
Java层Hook不需要修改应用程序的字节码,但需要对应用程序的实现机制
有一定了解,以便进行正确的Hook。
Native层Hook主要是通过修改应用程序的字节码实现,具有更高的灵活性和精细度。
Native层Hook需要具备一定的汇编语言和调试技能,可以实现对应用程序的直接操作。
Android Hook技术在应用程序开发、安全测试、反编译以及逆
向破解等方面都有广泛的应用。
为了保证应用程序的安全性和完整性,开发人员需要对Android Hook技术有一定的了解和应对策略。
- 1 -。
解密Android应用的数据加密与解密测试
解密Android应用的数据加密与解密测试概述:数据加密是当今信息安全领域的重要研究方向之一。
为了保障用户数据的安全,开发人员在Android应用中通常会使用加密算法对敏感数据进行加密存储,防止数据被恶意攻击者窃取或篡改。
本文将介绍Android应用数据加密的常见方式以及相应的解密测试方法,帮助开发人员更好地保护用户数据。
一、Android应用数据加密方式1. 对称加密对称加密是指使用同一把密钥进行加密和解密的方式。
在Android 应用中,常用的对称加密算法包括AES(高级加密标准)和DES(数据加密标准)等。
开发人员使用这些算法,将用户数据与密钥一起进行加密存储,确保数据在存储过程中的安全性。
2. 非对称加密非对称加密是指使用一对密钥(公钥和私钥)进行加密和解密的方式。
在Android应用中,非对称加密常用的算法包括RSA(Rivest-Shamir-Adleman)和ECDSA(椭圆曲线数字签名算法)等。
开发人员使用公钥加密用户数据,私钥用于解密,确保只有持有私钥的人能够解密数据。
3. 哈希函数哈希函数是一种将任意长度的数据映射为固定长度数据的算法。
在Android应用中,常用的哈希函数包括MD5(消息摘要算法)和SHA (安全哈希算法)等。
开发人员使用这些算法对密码、文件等进行哈希处理,将其加密存储或进行数据完整性校验,保护数据的安全性和完整性。
二、Android应用数据解密测试方法1. 反编译APK文件通过工具将Android应用的APK文件反编译为源代码,获取关键代码段,包括加密和解密的部分。
分析代码逻辑和算法,了解加密密钥的生成和使用方式。
2. 动态分析使用动态分析工具,如frida、Xposed等,在Android设备或模拟器上运行应用,并进行数据加密过程的监测。
通过hook函数等技术手段,捕获加密过程中的关键数据和密钥,进一步分析解密过程。
3. 逆向分析使用逆向工程技术,对应用进行逆向分析,获取应用的关键信息和算法实现。
hook 加密函数
hook 加密函数Hook加密函数是一种在计算机科学中常用的技术,用于保护数据的安全性。
通过对数据进行加密,可以防止未经授权的人员访问、修改或窃取数据。
本文将介绍Hook加密函数的原理、应用场景以及常见的加密算法。
一、Hook加密函数的原理在计算机科学中,Hook是一种用于拦截和修改函数调用的技术。
在加密函数中,Hook技术可以用于拦截数据的加密过程,从而实现对加密算法的修改或增强。
通过Hook加密函数,可以在数据加密的过程中插入额外的处理逻辑,以提高数据的安全性。
二、Hook加密函数的应用场景1. 数据库加密:Hook加密函数可以用于对数据库中的敏感数据进行加密,如用户密码、信用卡号等。
通过Hook技术,可以在数据存储或读取过程中对数据进行加密和解密。
2. 网络通信加密:Hook加密函数可以用于对网络通信中的数据进行加密,以保护数据的安全性。
通过拦截网络库中的加密函数,可以实现对数据的加密和解密,从而防止数据在传输过程中被窃取或篡改。
3. 文件加密:Hook加密函数可以用于对文件进行加密,以保护文件的机密性。
通过Hook技术,可以在文件读写过程中对数据进行加密和解密,从而防止文件被未经授权的人员访问或篡改。
三、常见的加密算法1. 对称加密算法:对称加密算法使用相同的密钥进行数据的加密和解密。
常见的对称加密算法有DES、AES等。
通过Hook加密函数,可以对对称加密算法进行增强,如增加密钥长度、增加加密轮数等,以提高数据的安全性。
2. 非对称加密算法:非对称加密算法使用一对密钥,即公钥和私钥,进行数据的加密和解密。
常见的非对称加密算法有RSA、DSA等。
通过Hook加密函数,可以对非对称加密算法进行修改,如增加密钥长度、增加加密算法复杂度等,以提高数据的安全性。
3. 哈希算法:哈希算法将任意长度的数据映射为固定长度的哈希值,常用于数据的完整性校验和数字签名。
常见的哈希算法有MD5、SHA1等。
通过Hook加密函数,可以对哈希算法进行增强,如增加哈希值的位数、增加哈希算法的复杂度等,以提高数据的安全性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android下通过hook技术实现透明加解密保障数据安全2013-11-15 13:06 浪淘狂沙网络攻防实验室字号:T | T对于用户在Android移动设备商保存重要的隐私文件,通常采用一些加密保存的软件。
但在手机上实现隐私空间的软件鳞次栉比,但是问题在于打开文件都需要使用该隐私空间,将加密文件解密到临时文件,然后再选择应用程序打开文件。
AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!一、前言对于用户在Android移动设备商保存重要的隐私文件,通常采用一些加密保存的软件。
但在手机上实现隐私空间的软件鳞次栉比,但是问题在于打开文件都需要使用该隐私空间,将加密文件解密到临时文件,然后再选择应用程序打开文件。
这将导致用户重要文件在设备上明文的存在,存在泄漏的风险。
而且根据笔者的调研,对于360隐私空间,应用程序对临时文件修改后不能再逆向加密回密文,导致加密操作只能一次进行。
LBE隐私空间,相对较好,但其临时文件存在生命周期过长。
因此笔者通过现有知识讨论一种采用hook技术实现的透明加解密方法,不需要在设备上生成临时文件,从而保护用户重要隐私。
二、技术要点由于Android是基于linux内核的开源系统,根据语言环境不同可以分为Java层、Native C层、Linux Kernel层。
Java层的安全是使用Java语言开发,基于SDK,能实现的功能相对简单。
Linux Kernel层安全,需要从源码做起,编译自己的系统,通用性不强。
因此在Native C层,通过JNI开发,可以使用linux提供的函数实现更多的功能。
在hook API方面与linux的hook类似使用ptrace 函数与plt表实现,还可以采用Inline hook的方式实现,但是不是很稳定,操作难度大。
其本质都是劫持函数调用。
但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要hook的进程空间,修改其内存中的进程代码,替换其中过程表的符号地址,因此其生存空间是所注入的进程,只能对某一进程进行HOOK。
Ptrace函数是调试程序所用,功能强大,不仅可以附加某一进程(PTRACE_ATTACH),而且可以任意修改目标进程的内存空间(PTRACE_PEEKDATA,读内存。
PTRACE_POKEDATA,写内存),甚至是寄存器(PTRACE_SETREGS,PTRACE_GETREGS)基本流程是利用寄存器指令中断:① PTRACE_ATTACH,绑定目标进程。
② PTRACE_GETREGS,获取目标进程寄存器状态,并保存。
③ PTRACE_PEEKDATA与PTRACE_POKEDATA配合,保存原代码,写入要注入的代码到当前运行位置。
④ PTRACE_SETREGS,恢复寄存器状态,并继续执行,这是注入的代码开始在目标进程内执行,注入代码完成HOOK,过程与Windows下相似。
⑤在HOOK完成后,注入的代码执行int3被ptrace捕获,目标进程再次暂停执行。
⑥ PTRACE_GETREGS,再次保存寄存器。
⑦ PTRACE_PEEKDATA与PTRACE_POKEDATA配合还原代码。
⑧ PTRACE_SETREGS,恢复寄存器,目标进程继续执行。
⑨ PTRACE_DETACH,撤销绑定目标进程。
参考LBE实现原理和看雪上关于Hook Ioctl的文章都基本上按照这种流程实现HOOK。
在明白hook工作机制后,对于实现Android上的透明加解密需要找到open和close函数的符号存在哪个动态链接库中,hook该应用程序的这个动态链接库,在open操作进行的时候,将密文文件分块解密到内存中,并将该内存中的文件标识符返回。
在close操作进行的时候将内存中的明文加密到本地密文存储。
三、关键流程1、阅读Android代码查找打开文件和关闭文件过程。
这是我们实现透明加解密的关键。
参考/uid-26926660-id-3326678.html的方式可以发现读取文件流的函数最终通过JNI方式的read函数实现,同样打开文件的操作最终都归结于open函数。
而实现Java代码的JNI支持的动态库是nativehelper.so因此我们需要hook的动态库即nativehelper.so。
注:在Android早期版本即android2.3、Android4.0上open和close符号在nativehelper.so中,该文件有140k大小。
而在android4.1版本以上,谷歌重写了android 原生库的实现,nativehelper.so被拆分,笔者在4.0平台进行的开发并没有阅读寻找4.1版本之上的。
2、进行进程注入和ELF节替换进程注入就是将一段代码拷贝到目标进程,然后让目标进程执行这段代码的技术。
由于这样的代码构造起来比较复杂,所以实际情况下,只将很少的代码注入到目标进程,而将真正做事的代码放到一个共享库中,即.so文件。
被注入的那段代码只负责加载这个.so,并执行里面的函数。
由于.so中的函数是在目标进程中执行的,所以在.so中的函数可以修改目标进程空间的任何内存,当然也可以加钩子,从而达到改变目标进程工作机制的目的。
当然不是任何进程都有权限执行注入操作的。
Android平台上的进程注入是基于ptrace()的,要调用ptrace()需要有root权限。
目前市面上的主流安全软件也都是基于进程注入来管理和控制其他应用进程的。
这也就是为什么这些安全软件需要获得root权限的原因。
关于如何.so注入的实现,可以参考看雪论坛的上的一个注入库LibInject 和洗大师的一个开源项目Android Injector Library。
笔者对这种两种方式都有实验,对于Libinject,就是向目标进程中注入libhook.so,首先调用ptrace()函数,挂起该进程。
然后遍历进程加载的libc.so,通过dlopen和dlsym 函数修改arm寄存器的值,然后压入参数,so路径,并将之前找到的dlopen地址压入寄存器,直接操作blx,就可以让目标进程调用dlopen加载我们的so,同理dlsym调用我们的so里的函数。
注入完成后,会调用libhook.so库中的hook_entry()函数,该函数实现加载hook函数实现的动态库,并对libnativehelper.so的got表和plt表的遍历和修改。
修改为自己编写的实现open函数和close函数的动态库中的符号地址。
因此需要注入两个库,因为libhook.so在执行完后需要detach目标进程,从而释放,而具体操作的动态库需要常驻内存。
实现常驻内存需要在hook_entry()函数中显式加载动态库。
以上注入以后的过程都由自己编程实现,能够加深对ELF格式理解。
而采用Android Injector Library则相对简单,在调用可执行程序的主函数中实现即可:这个文件编译生成注入入口和符号表替换逻辑。
* 1、在该函数中加载libhook.so通过其中的do_hook函数返回原来的open和close 地址以及要替换的新的open和close函数地址* 2、然后静态打开libnativehelper动态库,读取其结构遍历节表,找到全局符号表(GOT表),该表存储了外部依赖符号的地址* 3、遍历GOT表找到原先的open函数和close函数地址,分别替换为新的open函数和新的close函数即可3、在学习这一过程中,需要了解linux的ELF格式,以下是学习ELF的笔记:参见《程序员的自我修养》如果熟悉则可跳过。
ehdr->e_shstrndx索引指向shstrtab的节,可以用来索引节头的字符串名称描述。
shstrtab表(Section Header String Table)保存段表中用到的字符串,最常见的就是段名、常用的段名说明.rodata1Read Only Data,这种段里存放的是只读数据,比如字符串常量、全局const变量。
跟”.rodata”一样.comment存放的是编译器版本信息.debug 调试信息.dynamic动态链接信息.hash 符号哈希表.line 调试时的行号表.note 额外的编译器信息。
比如程序的公司名、发布版本号等.strtab String Table.字符串表.symtab Symbol Table.符号表.shstrtabSection String Table.段名表.plt .got动态链接的跳转表和全局入口表.init .fini程序初始化与终结代码段符号节,遍历节头时候。
判断每一个节的类型是不是SHT_SYMTAB或SHT_DYNSYM,那么对应的节就是符号节。
符号节存放的是一张符号表,符号表也是一个连续存储的结构数组.编程过程中用到的变量和函数都可以称之为符号,一个ELF文件中并不只有一个符号节,通常是两个,一个为”.dynsym”的动态节类型为SHT_DYNSYM,所有引入的外部符号在这里有所体现,另一个为SHT_SYMTAB,名字为“.symtab”保存了所有有用符号信息。
Symbol Table 符号表保存了一个程序在定位和重定位时需要的定义和引用的信息。
一个符号表索引是相应的下标。
符号表的存在意义是体现在多个目标文件进行链接的时候,在链接中,目标文件之间相互拼合实际上是目标文件之间对地址的引用,即对函数和变量的地址的引用,而函数和变量可以统称为符号(Symbol),函数名或变量名就是符号名(Symbol Name)。
我们可以将符号看作是是链接中的粘合剂,整个链接过程就是基于符号才能够正确完成。
在符号表”.symtab“中,其也是像段表的结构一样,是一个数组,每个数组元素是一个固定的结构来保存符号的相关信息,比如符号名(不是字符串,而是该符号名在字符串表的下标)、符号对应的值(可能是段中的偏移,也可能是符号的虚拟地址)、符号大小(数据类型的大小)等等。
符号表中记录的一般是全局符号,比如全局变量、全局函数等等。
目标文件的符号表包含定位或重定位程序符号定义和引用时所需要的信息。
符号表入口结构定义如下:typedef struct{Elf32_Word st_name;Elf32_Addr st_value;Elf32_Word st_size;Unsigned char st_info;Unsigned char st_other;Elf32_Half st_shndx;}Elf32_Sym;其中st_name包含指向符号表字符串表(strtab)中的索引,从而可以获得符号名。
St_value指出符号的值,可能是一个绝对值、地址等。