前言:最近在学习Xposed框架,越来越感觉这是一个神器可以利用这个框架做到微信自动抢红包,定位,加固脱壳,所以现在开始记录xpose学习过程。
一、什么是Hook技术
Hook英文翻译是“钩子”的意思,“钩子”顾名思义就是可以勾起东西的工具,那么程序中这个“钩子”又是怎么用的呢?在Android操作系统中系统维护着自己的一套事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而“钩子”的意思,就是在事件传送到终点前截获并监控事件的传输,像个钩子钩上事件一样,并且能够在钩上事件时,处理一些自己特定的事件。较为形象的流程如图所示。
Hook的这个本领,使它能够将自身的代码“融入”被勾住(Hook)的程序的进程中,成为目标进程的一个部分。我们也知道,在Android系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行彼此间都不受干扰。这就使我们希望通过一个程序改变其他程序的某些行为的想法不能直接实现,但是Hook的出现给我们开拓了解决此类问题的道路。当然,根据Hook对象与Hook后处理的事件方式不同,Hook还分为不同的种类,如消息Hook、API Hook等。
二、Xposed框架介绍
在日常工作学习中,我们希望使用Hook技术来完成某功能其实是相当烦琐的,我们很难手动地自己编写一个Hook工具,大多数情况下都是使用第三方提供的框架来做演示。常用的Hook框架有Xposed、CydiaSubstrate和ADBI/DDI,它们各自都有自己的特点,这里我们专门选择Xposed框架来进行介绍。
Github开源地址: https://github.com/rovo89/Xposed
1、Xposed框架原理
Xposed框架是由rovo89开发的一款针对Android平台的动态劫持项目,是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process 程序控制 zygote 进程,从而使 app_process 在启动过程中加载XposedBridge.jar 这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。
Zygote进程在启动过程中,除了创建一个Dalvik虚拟机实例之外,还会将Java运行时库加载到进程中来,同时还会注册一些Android核心类的JNI方法到前面创建的Dalvik虚拟机实例中去。
一个应用程序被孵化出来的时候,其不仅会获得Zygote进程中的Dalvik虚拟机实例,还会与Zygote一起共享Java运行时库,这也是可以将XposedBridge.jar这个jar包加载到每一个Android应用中的原因。
XposedBridge有一个私有的Native方法:hookMethodNative,这个方法也在app_process中使用。该函数提供一个方法对象利用Java的反射机制来对内置的方法覆写。
2、Xposed框架的使用步骤
Xposed框架是基于一个Android的本地服务应用XposedInstaller与一个提供API的jar文件来完成的。所以,安装使用Xposed框架我们需要完成以下几个步骤。
1)安装Xposed准备
手机必须root,没有root是无法使用的!!!我的手机是红米手机,所以我去小米官网刷了一个开发版系统,一些第三方Root软件虽然能成功刷入Root ,但是经常手机开机重启之后就失效了,为了稳定最好去刷个小米开发版的,Root权限就可以随心控制管理。
http://www.miui.com/zt/miui8/dev.html 小米开发版系统下载
2)安装Xposed的本地服务
点击下载最新版本 https://xposed-installer.cn.uptodown.com/android
如图所示,这个是我自己手机已经成功激活的,安装apk点进去之后点击版本号启动本地服务
下面是我手机安装xposed的工具模块,点击旁边的选择框确定是否开启
这里有一个需要提醒的是,安装了xposed模块开启本地服务的时候,必须重启设备才能生效,所以如果装了新的xposed模块的时候,必须重启设备才能开始使用