《Android安全技术揭秘与防范》—第8章8.2节常用的Hook工具

简介:

本节书摘来自异步社区《Android安全技术揭秘与防范》一书中的第8章8.2节常用的Hook工具,作者周圣韬,更多章节内容可以访问云栖社区“异步社区”公众号查看。

8.2 常用的Hook工具
在日常工作学习中,我们希望使用Hook技术来完成某功能其实是相当烦琐的,但也并不是不可能的。我们这里没有手动地重新书写一个Hook工具,而是使用到了第三方提供的框架来做演示。Android的Hook技术虽然发展不久,但是也出现了很多的Hook框架工具。本节我们就具体介绍一下目前常用到的Hook框架。

8.2.1 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替换图标等应用或功能均基于此框架。

官网地址:http://repo.xposed.info/

源码地址:https://github.com/rovo89

Xposed框架是基于一个Android的本地服务应用XposedInstaller与一个提供API的jar文件来完成的。所以,安装使用Xposed框架我们需要完成以下几个步骤。

● 安装本地服务XposedInstaller
需要安装XposedInstall.apk本地服务应用,我们能够在其官网的framework栏目中找到,下载并安装。地址为:

http://repo.xposed.info/module/de.robv.android.xposed.installer

安装好后进入XposedInstaller应用程序,会出现需要激活框架的界面,如图8-5所示。这里我们点击“安装/更新”就能完成框架的激活了。部分设备如果不支持直接写入的话,可以选择“安装方式”,修改为在Recovery模式下自动安装即可。


8292252b2aa5fba289b9e572777fca4bea665961


44ea5d596f1de3ebbb2bd502afe920c61ef09494

因为安装时会需要Root权限,安装后会启动Xposed的app_process,所以安装过程中会存在设备多次重新启动。

TIPS
 由于国内的部分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 中,效果如图8-6所示。


68a6889679e75cee19dc2b9d764b06c851000c0b

如果直接将jar包放置到了libs目录下,很可能会产生错误“IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation”。估计Xposed作者在其框架内部也引用了BridgeApi,这样操作可以避免重复引用。

8.2.2 CydiaSubstrate框架
如果使用过苹果手机的用户应该对Cydiasubstrate框架一点都不会陌生,因为Cydiasubstrate框架为苹果用户提供了越狱相关的服务框架。Cydiasubstrate原名MobileSubstrate(类库中都是以MS开头的),作者为大名鼎鼎的Jay Freeman(saurik)。当然Cydiasubstrate 也推出了Android版。Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOK app_process中的 Java 函数,因此 Cydiasubstrate 是一款强大而实用的 HOOK工具。


8008e1a2852c49728f599f512542978e472e92dd

与使用Xposed框架类似,使用Cydiasubstrate框架之前我们需要配置它的使用环境,对于强大的Cydiasubstrate框架使用其实只需要配置两个地方。安装Cydiastrate框架Android本地服务,下载使用Cydiastrate提供的API。

● 安装Cydiastrate框架Android本地服务
一个就是在Android设备中安装Cydiasubstrate框架的本地服务应用substrate.apk,我们可以在其官网下载到。

当然,我们安装substrate后,需要“Link Substrate Files”(连接本地的Substrate服务文件),这一步是需要Root权限的,连接后还需要重启设备才能够生效。Substrate服务设置应用如图8-8所示。


bfcf231cf08c1550f784c1be68b13c8f37d63261

● 下载使用Cydiasubstrate库
Cydiasubstrate官方建议以在Android SDK Manager中添加它们插件地址的方式进行更新下载,如图8-9所示,在用户自定义网址中添加http://asdk.cydiasubstrate.com/addon.xml


df7b729a7a57aa6ed5a7377c83d8bf9867c6a666

通过使用Android SDK Manager工具下载完Cydiasubstrate框架后,其存储于目录${ANDROID_ HOME}sdkextrassaurikitcydia_substrate下。但是,由于Android SDK Manager在国内使用起来存在很多的限制,下载的时候也不是非常稳定,所以还是建议大家直接去官网下载开发库。

官方下载地址为:http://asdk.cydiasubstrate.com/zips/cydia_substrate-r2.zip

下载完成后,将得到的所有文件(很多的jar包与so库),都复制到Android项目下的libs文件夹中,就可以直接使用了。效果如图8-10所示。


6e679ae3e668da2c5e3c3254f629cdb7ba627cad

其中的substrate.h头文件与lib文件夹下的so文件是提供在使用NDK进行原生Hook程序开发中的函数支持库。

TIPS
 CydiaSubstrate框架对于inline Hook的操作目前还存在一些bug,使用的时候可能会出现崩溃的现象,部分使用了国内定制的ROM的设备在使用CydiaSubstrate框架时会出现设备无法重新启动或无法Hook的现象。
8.2.3 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

相关文章
|
2天前
|
安全 Java Linux
Android反编译——jadx工具
Android反编译——jadx工具
46 1
|
2天前
|
Android开发 芯片 开发者
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
Android MediaTek bootloader 的序列号长度 & 移除非字母和数字限制 SN-Writer工具支持写入
21 0
|
2天前
|
XML Java Android开发
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
59 0
|
2天前
|
Java Android开发
Android 反编译工具的使用
Android 反编译工具的使用
23 0
|
2天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
23 1
Android开发之OpenGL的画笔工具GL10
|
2天前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
23 1
|
2天前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
81 0
|
2天前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
63 0
|
7月前
|
算法 安全 Android开发
安卓逆向 -- Frida Hook某车_sign算法分析
安卓逆向 -- Frida Hook某车_sign算法分析
38 0
|
7月前
|
Shell Android开发 数据安全/隐私保护
安卓逆向 -- Frida环境搭建(HOOK实例)
安卓逆向 -- Frida环境搭建(HOOK实例)
110 0