IT行业资讯

当前位置: 首页/新闻•资讯/IT行业资讯/正文

hook技术实现Android透明加解密

发布时间:2013-11-18 来源:小编

  由于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操作进行的时候将内存中的明文加密到本地密文存储。

  更多内容尽在:www.commernet.cn

公司简介 - 案例展示 - 联系我们

我们为您提供:软件定制、软件开发、网站建设、IT 外包、系统集成、品牌策划、合肥软件开发等服务
地址:合肥市 高新区 天智路5号 同创科技园5号楼4层   电话:0551-65355812   传真:0551-65355811
版权所有:安徽凯美耐信息技术有限公司    皖ICP备09017498号-1     皖公网安备 34019202000960号