🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### **常用的Hook 工具** * **Xposed 框架** * 官网地址:http://repo.xposed.info * GitHub源码:[Xposed](https://github.com/rovo89/Xposed) * **CydiaSubstrate 框架** * **ADBl/DDI 框架** #### **Xposed 框架** Xposed框架是一款可以**在不修改APK的情况下影响程序运行(修改系统)的框架服务**,**通过替换/system/bin/app_process 程序控制 zygote 进程,使 app_process 在启动过程中加载XposedBridge.jar 这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持**。基于Xposed框架可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。此外,Xposed框架中的每一个库还可以单独下载使用,如Per App Setting(为每个应用设置单独的dpi或修改权限)、Cydia、XPrivacy(防止隐私泄露)、BootManager(开启自启动程序管理应用),对原生Launcher替换图标等应用或功能均基于此框架。 Xposed框架是基于一个Android的本地服务应用XposedInstaller与一个提供API的jar文件来完成的。所以,安装使用Xposed框架我们需要完成以下几个步骤。 * **安装本地服务XposedInstaller** 需要安装XposedInstall.apk本地服务应用,我们能够在其官网的framework栏目中找到,下载并安装。地址为: http://repo.xposed.info/module/de.robv.android.xposed.installer 安装好后进入XposedInstaller应用程序,会出现需要激活框架的界面,如图8-5所示。这里我们点击“安装/更新”就能完成框架的激活了。部分设备如果不支持直接写入的话,可以选择“安装方式”,修改为在Recovery模式下自动安装即可。 ![](https://box.kancloud.cn/9c72942088b73b693f2f2ca176bf90d0_345x272.jpeg) ![](https://box.kancloud.cn/5a541453f0172cf50b49bb3751378f29_334x453.png) 因为安装时会需要Root权限,安装后会启动Xposed的app_process,所以安装过程中会存在设备多次重新启动。 >[info] **注意**:由于国内的部分ROM对Xposed不兼容,如果安装Xposed不成功的话,强制使用Recovery写入可能会造成设备反复重启而无法正常启动。 * **下载使用API库** 其 API 库XposedBridgeApi-.jar(version 是 XposedAPI 的版本号,如我们这里是XposedBridgeApi-54.jar)文件,我们能够在Xposed的官方支持xda论坛找到,其地址为: http://forum.xda-developers.com/xposed/xposed-api-changelog-developer-news-t2714067 下载完毕后我们需要将 Xposed Library 复制到 lib目录(注意是 lib 目录,不是Android提供的 libs 目录),然后将这个 jar 包添加到 Build PATH 中,效果如图所示。 ![](https://box.kancloud.cn/3b8ede12ae9a230423b3663919735055_308x126.png) 如果直接将jar包放置到了libs目录下,很可能会产生错误`IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation`。估计Xposed作者在其框架内部也引用了BridgeApi,这样操作可以避免重复引用。 #### **CydiaSubstrate框架** Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOK app_process中的 Java 函数,因此 Cydiasubstrate 是一款强大而实用的 HOOK工具。 与使用Xposed框架类似,使用Cydiasubstrate框架之前我们需要配置它的使用环境,对于强大的Cydiasubstrate框架使用其实只需要配置两个地方。安装Cydiastrate框架Android本地服务,下载使用Cydiastrate提供的API。 * **安装Cydiastrate框架Android本地服务** 一个就是在Android设备中安装Cydiasubstrate框架的本地服务应用substrate.apk,我们可以在其官网下载到。 当然,我们安装substrate后,需要“Link Substrate Files”(连接本地的Substrate服务文件),这一步是需要Root权限的,连接后还需要重启设备才能够生效。Substrate服务设置应用如图所示。 ![](https://box.kancloud.cn/c8a7f5815ea55310ccdf123193d8b8ee_319x453.png) * **下载使用Cydiasubstrate库** Cydiasubstrate官方建议以在Android SDK Manager中添加它们插件地址的方式进行更新下载,如图所示,在用户自定义网址中添加 http://asdk.cydiasubstrate.com/addon.xml。 ![](https://box.kancloud.cn/67064a2d794f71eb6021f1536a0b57d1_574x402.png) 通过使用Android SDK Manager工具下载完Cydiasubstrate框架后,其存储于目录`${ANDROID_HOME}sdkextrassaurikitcydia_substrate`下。但是,由于Android SDK Manager在国内使用起来存在很多的限制,下载的时候也不是非常稳定,所以还是建议大家直接去官网下载开发库。 官方下载地址为:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip。 下载完成后,将得到的所有文件(很多的jar包与so库),都复制到Android项目下的libs文件夹中,就可以直接使用了。效果如图所示。 ![](https://box.kancloud.cn/a90ab25a86906fad36f1b84e5c8b3475_354x243.png) 其中的substrate.h头文件与lib文件夹下的so文件是提供在使用NDK进行原生Hook程序开发中的函数支持库。 >[info] **注意**:CydiaSubstrate框架对于inline Hook的操作目前还存在一些bug,使用的时候可能会出现崩溃的现象,部分使用了国内定制的ROM的设备在使用CydiaSubstrate框架时会出现设备无法重新启动或无法Hook的现象。 #### **ADBI/DDI框架** ADBI(全称为:Android Dynamic Binary Instrumentation Toolkit)即Android的动态二进制指令工具包,兼容Android中的ARM与Thmub指令,提供动态库注入与函数Hook(包括inline Hook)。当然,其也提供了Java层的类似功能,即DDI(Dynamic Dalvik Instrumentation Toolkit)框架。 ADBI/DDI框架与Xposed和CydiaSubstrate框架最大的区别是,它是一个命令行工具,使用起来更加的简单方便。我们可以在Github上找到其源码,地址为: ADBI:https://github.com/crmulliner/adbi。 DDI:https://github.com/crmulliner/ddi #### **参考文章**: [《Android安全技术揭秘与防范》—第8章8.2节常用的Hook工具](https://yq.aliyun.com/articles/99823?spm=5176.100239.blogcont99909.19.6c23be47do2f4T#) * **赵四的文章** [Android中Xposed框架篇---利用Xposed框架实现拦截系统方法](http://blog.csdn.net/jiangwei0910410003/article/details/52822081) [Android中Xposed框架篇---修改系统位置信息实现自身隐藏功能 ](http://blog.csdn.net/jiangwei0910410003/article/details/52836241) [Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解 ](http://blog.csdn.net/jiangwei0910410003/article/details/73699649)