android下通过hook技术实现透明加解密保障数据安全

android下通过hook技术实现透明加解密保障数据安全

ID:8165133

大小:93.43 KB

页数:10页

时间:2018-03-08

android下通过hook技术实现透明加解密保障数据安全_第1页
android下通过hook技术实现透明加解密保障数据安全_第2页
android下通过hook技术实现透明加解密保障数据安全_第3页
android下通过hook技术实现透明加解密保障数据安全_第4页
android下通过hook技术实现透明加解密保障数据安全_第5页
资源描述:

《android下通过hook技术实现透明加解密保障数据安全》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Android下通过hook技术实现透明加解密保障数据安全2013-11-1513:06浪淘狂沙网络攻防实验室 字号:T 

2、 T对于用户在Android移动设备商保存重要的隐私文件,通常采用一些加密保存的软件。但在手机上实现隐私空间的软件鳞次栉比,但是问题在于打开文件都需要使用该隐私空间,将加密文件解密到临时文件,然后再选择应用程序打开文件。AD:干货来了,不要等!WOT2015北京站演讲PPT开放下载! 一、前言对于用户在Android移动设备商保存重要的隐私文件,通常采用一些加密保存的软件。但在手机上实现隐私空间的软件鳞次栉比

3、,但是问题在于打开文件都需要使用该隐私空间,将加密文件解密到临时文件,然后再选择应用程序打开文件。这将导致用户重要文件在设备上明文的存在,存在泄漏的风险。而且根据笔者的调研,对于360隐私空间,应用程序对临时文件修改后不能再逆向加密回密文,导致加密操作只能一次进行。LBE隐私空间,相对较好,但其临时文件存在生命周期过长。因此笔者通过现有知识讨论一种采用hook技术实现的透明加解密方法,不需要在设备上生成临时文件,从而保护用户重要隐私。二、技术要点由于Android是基于linux内核的开源系统,根据语言环境不同可以分为Java层、

4、NativeC层、LinuxKernel层。Java层的安全是使用Java语言开发,基于SDK,能实现的功能相对简单。LinuxKernel层安全,需要从源码做起,编译自己的系统,通用性不强。因此在NativeC层,通过JNI开发,可以使用linux提供的函数实现更多的功能。在hookAPI方面与linux的hook类似使用ptrace函数与plt表实现,还可以采用Inlinehook的方式实现,但是不是很稳定,操作难度大。其本质都是劫持函数调用。但是由于处于Linux用户态,每个进程都有自己独立的进程空间,所以必须先注入到所要h

5、ook的进程空间,修改其内存中的进程代码,替换其中过程表的符号地址,因此其生存空间是所注入的进程,只能对某一进程进行HOOK。Ptrace函数是调试程序所用,功能强大,不仅可以附加某一进程(PTRACE_ATTACH),而且可以任意修改目标进程的内存空间(PTRACE_PEEKDATA,读内存。PTRACE_POKEDATA,写内存),甚至是寄存器(PTRACE_SETREGS,PTRACE_GETREGS)基本流程是利用寄存器指令中断:①PTRACE_ATTACH,绑定目标进程。②PTRACE_GETREGS,获取目标进程寄存器

6、状态,并保存。③PTRACE_PEEKDATA与PTRACE_POKEDATA配合,保存原代码,写入要注入的代码到当前运行位置。④PTRACE_SETREGS,恢复寄存器状态,并继续执行,这是注入的代码开始在目标进程内执行,注入代码完成HOOK,过程与Windows下相似。⑤在HOOK完成后,注入的代码执行int3被ptrace捕获,目标进程再次暂停执行。⑥PTRACE_GETREGS,再次保存寄存器。⑦PTRACE_PEEKDATA与PTRACE_POKEDATA配合还原代码。⑧PTRACE_SETREGS,恢复寄存器,目标进程

7、继续执行。⑨PTRACE_DETACH,撤销绑定目标进程。参考LBE实现原理和看雪上关于HookIoctl的文章都基本上按照这种流程实现HOOK。在明白hook工作机制后,对于实现Android上的透明加解密需要找到open和close函数的符号存在哪个动态链接库中,hook该应用程序的这个动态链接库,在open操作进行的时候,将密文文件分块解密到内存中,并将该内存中的文件标识符返回。在close操作进行的时候将内存中的明文加密到本地密文存储。三、关键流程1、阅读Android代码查找打开文件和关闭文件过程。这是我们实现透明加解密

8、的关键。参考http://blog.chinaunix.net/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大小。而在androi

9、d4.1版本以上,谷歌重写了android原生库的实现,nativehelper.so被拆分,笔者在4.0平台进行的开发并没有阅读寻找4.1版本之上的。2、进行进程注入和ELF节替换进程注入就是将一段代码拷贝到目标进程,然后让目标进程执行这段代码的

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。