Android 5.0/5.1 HOOK技术探究

来源:互联网 发布:php 检验日期格式 编辑:程序博客网 时间:2024/05/29 19:43
    因为项目要求,需要实现兼容Android 4.X到5.X平台的HOOK技术。主要兼容的ROM厂商为华为、三星、小米等。

    之前已经实现过基于Android 4.X的HOOK技术,共有以下三种方案(都调试成功):
                      (1)方案1:使用Xposed框架(Dalvik虚拟机层HOOK),但是弊端是需要安装版本兼容的Xposed(部分国产机ROM很挑Xposed版本,如小米和nubia),且修改系统文件存在一定风险;
                      (2)方案2:使用与Xposed框架实现HOOK原理基本相同的开源框架ddi,但每次使用时需要进行注入操作;
                      (3)方案3:使用got HOOK技术(Native层HOOK),每次使用时需要进行注入操作;

    Android 5.X版本遇到的问题是:(1)问题1:Dalvik虚拟机被完全替换为ART,所以上面的方案2不可行;
                                                       (2)问题2:Xposed作者在XDA发布了Xposed 3.0版本,通过替换libart.so来实现对Android 5.X版本的HOOK。但是,安装Xposed 3.0版本需要刷入首先刷入customed recovery,然后再卡刷Xposed包来实现替换libart.so。这种刷机的方式不适合项目要求,同时对于三星的机型还具有bootloop的可能性,需要安装非官方的定制版Xposed。所以我也放弃了方案1。
                                                       (3)问题3:很多Android 5.X机型的SELinux级别默认为Enforcing,会默认拦截注入行为;

    对于问题1,可以选择使用ART HOOK技术,但是这种通用的技术还未成熟(如可能导致虚拟机崩溃[1][2]),因此我选择了方案3。虽然Dalvik层被替换掉了,但是底层的Linux系统没有较大变化,仍然可以使用Linux中通用的got/plt elf HOOK技术。该方法较为简单和稳定,但是同样需要ptrace注入操作。
    我的测试机包括一台HUAWEI 荣耀7(Android 5.0.2)、一台HUAWEI 荣耀4A(Android 5.1.1)、一台Samsung Galaxy on7(Android 5.1.1)。三台手机都只经过解锁和root,是原厂ROM。荣耀7的SELinux状态为Permissive,不拦截注入;另两台为Enforcing,会拦截注入。具体来说,就是会拦截被HOOK进程调用dlopen()函数打开被注入的so操作,导致注入失败。
    对于HUAWEI的测试机,其SELinux状态可以简单通过"setenforce 0"更改为Permissive。LBE也曾采取关闭SELinux的方式来实现注入[3]。
    对于Samsung测试机,其SELinux状态无法简单修改。但是通过使用logcat查看avc信息,可以找到被禁止的SELinux规则。再通过[4]的方法添加缺失的规则,即可顺利注入目标进程。
     
    


参考链接:
    [1]http://bbs.pediy.com/showthread.php?t=204183    《Android5.1 Art Hook 技术分享》luciya
    [2]http://blog.csdn.net/l173864930/article/details/45035521     《Android Art Hook 技术方案》低端码农
    [3]http://bbs.pediy.com/showthread.php?t=182495      《LBE安全大师支持Android 4.4注入分析》 ImaxAndroi
    [4]http://forum.xda-developers.com/android/software/setools-android-sepolicy-inject-t2977563   《Announcement from Mikos: Sepolicy-inject - opensource tool for changing SELinux policy at runtime (alternative to supolicy)》 XDA
                                                      
0 0
原创粉丝点击