前言
对于应用程序来说,Hook技术被广泛使用。 比如朋友圈微信步数的修改,实际上就是通过Hook数据传输的方法来实现步数的修改。 再比如 SSL的处理,也是通过Hook技术修改SSL证书的验证结果,从而绕过验证。 Hook方式是直接打包并激活插件,在某些情况下比Frida使用起来更方便。
介绍
是一个运行在操作系统上的钩子框架。 通过替换系统的关键文件,它可以拦截几乎所有的Java函数调用,并允许模块中的自定义代码改变这些函数被调用时的行为。 因此,它经常被用来修改系统和应用程序的功能。
是框架的官方安装程序,可以在具有root权限的设备上安装框架。 还提供模块下载、管理、日志显示等功能。
项目地址为:
https://repo.xposed.info/module/de.robv.android.xposed.installer
由于新版本的受欢迎,新推出的手机大多是8.0以上。 所以这个框架已经不适用了。 更新停止后,该团队将成为正式继承者。
衍生品
、太极、ratel(平头哥)、VA(2B)
准备环境
欧版Pixel 3XL手机
11
苹果
特鲁普
TWRP
首先,电脑准备好新版本的adb和命令工具。
可以通过adb命令验证是否允许adb调试:
➜ adb devices
List of devices attached
FA6XXXXXXX53 device
使用命令验证是否成功:
➜ fastboot devices
FA6AB0311758 fastboot
在命令提示符窗口中输入并按Enter键,手机进入解锁界面。
fastboot flashing unlock
...
OKAY [ 0.049s]
finished. total time: 0.049s
由于我的测试机是11,所以需要刷机。 总体思路很简单,也是最容易成功的一步:先刷三方Rec(这里是TWRP),然后安装,最后安装通过。
由于Pixel和Pixel XL均采用A/B升级系统,因此可以理解为手机中有两个系统。 如果您按照传统方法刷写Twrp,那么您将不会获得永久的Twrp。 所以需要先刷一个临时Twrp,然后通过临时Twrp刷永久Twrp来获取Root权限。
首先,到TWRP官网下载最新版本的TWRP临时镜像文件.img。
对于我的 Pixel 3XL,我选择了从此页面 TWRP 下载的版本 3.6.0-11:
下载新版本并将其放入手机中
https://github.com/topjohnwu/Magisk/releases
然后将手机连接电脑并重启手机即可进入模式
adb reboot bootloader
# 然后把刚才下载并重命名好的img刷入
fastboot flash recovery bbbbt.img
# 执行完此就会自动进入Recovery模式
fastboot boot bbbbt.img
由于 Pixel 无法闪入永久 twrp,因此请使用 boot bbbbt.img 进入临时 twrp。
通过进入 twrp 然后找到 .zip 文件进行安装
验证后,只要点击顶部twrp界面的Zip,以及蓝条左侧的图标,就会回到Team Win界面。 按照上述安装步骤安装 .zip 文件。
重启发现已经安装成功( Logo图标)。
这时,为了检查手机是否root成功,我们安装wifi adb并运行,找到软件请求的超级用户权限。 下图为软件的root权限:
安装时使用官网给出的方法
https://github.com/ElderDrivers/EdXposed
发现由于更新原因,Riru无法像旧版本一样在高级下载模块中搜索并安装,需要在该模块中手动下载并安装Riru。
首先你需要去安装Riru
测试发现新版本Riru无法成功安装Riru-,但老版本Riru可以成功安装。
https://github.com/RikkaApps/Riru
https://github.com/ElderDrivers/EdXposed/releases
然后去下载的Apk进行安装。
打开后发现提示框架已激活,证明成就已安装
接下来我们尝试安装一个别人写的模块来改变系统的电池显示。 首先,下载并选择对应的版本。
安装后重启运行,发现手机设置可以任意修改。
接下来我们要做的就是通过自己编写的模块来影响程序运行的框架服务,从而在不修改APK源码的情况下实现类似的功能。
插件开发
模块介绍
该框架的原理是将其部署在已root的手机上。 通过替换//bin/程序来控制进程,在启动过程中就会加载.jar,从而完成对进程及其创建的虚拟机的劫持。 它可以让我们在不修改APK源码的情况下,通过自己编写的模块影响程序的框架服务,实现自动抢红包、自动回复微信消息等功能。
据官方介绍,典型的插件开发流程分为:
加入Xposed framework API
修改AndroidManifest.xml
编写hook代码
将类注册到assets/xposed_init文件中去
模块编写
首先使用创建一个新的空项目。
然后设置项目查看方式,在“项目名/app/src/main/”目录下找到.xml,在指定位置插入以下三段代码:
输入代码后,连接测试手机,点击“运行”,手机就会启动刚刚编写的程序。 该模块也会显示在手机的框架中:
接下来,您需要导入.jar。 找到构建。 在“项目名称/app/src/main/”目录下。 添加以下代码后,会自动配置.jar。 完成后,进行构建。 会提示文件已修改,点击“sync now”进行同步:
repositories {
jcenter()
}
compileOnly 'de.robv.android.xposed:api:82'
compileonly 'de.robv.android.xposed:api:82:sources'
实现hook操作的具体代码
首先,在界面上添加一个按钮功能,并将其拖至界面中。
然后简单写一下逻辑。 界面中有一个按钮。 点击按钮后,会弹出一个toast提示。 提示内容由()方法提供,()的返回值为“我没有被劫持”:
我们需要做的是hook并修改该类的()方法,使其返回值为“你已被劫持”。
首先,在同级路径下新建一个类“.java”,代码如下:
public class HookTest implements IXposedHookLoadPackage {
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.droider.xposed1")) {
XposedBridge.log(" has Hooked!");
Class clazz = loadPackageParam.classLoader.loadClass(
"com.droider.xposed1.MainActivity");
XposedHelpers.findAndHookMethod(clazz, "toastMessage", new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
//XposedBridge.log(" has Hooked!");
}
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult("你已被劫持");
}
});
}
}
}
编译、安装、运行
编写完hook代码后,添加入口点,如下:
右键单击“main”文件夹,选择new --> --> 创建一个新文件夹:
然后右键文件夹,新建-->文件,文件名(文件类型选择文本),在里面写上入口类的全路径Hook自己写的类,这样框架就可以读取信息了由此找到模块入口,然后执行Hook操作。
最后在框架中找到我写的模块,打开重启,发现toast提示变成了hook加载后的结果,提示“你已被劫持”。
还可以通过添加过滤子流程的API来实现相关操作,例如.
如果使用的话可以看到日志中打印了电话的进程
系统定制
市面上大部分app或多或少都会在框架上进行基于特征的检测,而绕过检测的基本思路就是找到检测到的特征,无论是在Java层还是在层,然后进行修改返回结果通过hooks,或者硬、直接归零等方式通过验证。
特征修改
先编译出官方原版,然后在此基础上对源代码进行一些神奇的修改。 修改完毕后,编译并烧录到手机中。 最后,您可以基于新源代码编译的API开发插件,以达到从源代码检测框架的目的。
1.修改整体包名
在包名路径中,将其改为 ,这样包名的长度就相同了,该功能就消失了。 选择→
然后将所有 de.robv... 更改为 de.robv..xpsed。
2.修改.prop
只需将 .prop 更改为 .prop
修改后编译。
1.修改整体包名
将被重构为
2.生成文件
复制编译好的文件并命名为.jar
修改.h、.h、.cpp、.h、ART.mk、.cpp
#define XPOSED_PROP_FILE "/system/xppsed.prop"
#define XPOSED_LIB_ART XPOSED_LIB_DIR "libxppsed_art.so"
#define XPOSED_JAR "/system/framework/XppsedBridge.jar“
#define XPOSED_CLASS_DOTS_ZYGOTE "de.robv.android.xppsed.XposedBridge"
#define XPOSED_CLASS_DOTS_TOOLS "de.robv.android.xppsed.XposedBridge$ToolEntryPoint"
IMPLEMENT_meta_INTERFACE(XposedService, "de.robv.android.xppsed.IXposedService");
#define XPOSED_DIR "/data/user_de/0/de.robv.android.xppsed.installer/"
#define XPOSED_DIR "/data/data/de.robv.android.xppsed.installer/"
libxppsed_art.cpp
LOCAL_MODULE := libxppsed_art
替换build.pl和/_all/meta-INF/com///flash-.sh中的字符
xposed.prop--->xppsed.prop
XposedBridge.jar--->XppsedBridge.jar
libxposed_art--->libxppsed_art
源码编译
编译完成后,将镜像刷入手机:
fastboot flash system system.img
然后使用进行特征检测
对源代码进行魔改后,编译并烧录到手机中,实现了从源代码进行维度框架检测的目的。
当然,一般情况下,只需要简单修改字符串即可,根据字符串特征进行简单检测是没有问题的。
总结
本文介绍了Hook App的基本概念、安装使用、模块编写、系统定制和功能去除,并通过案例实现了Hook App的流程。
参考
https://cloud.tencent.com/developer/article/1738371
https://www.jianshu.com/p/fdece2fbff1c
https://github.com/rovo89/XposedBridge/wiki/Development-tutorial
http://www.itfanr.cc/2018/10/16/google-pixel-unlock-bl-and-root/
https://blog.csdn.net/ysy950803/article/details/107118656
关闭
在
我
他们
潮汐安全团队于2019年1月正式成立,是新潮信息旗下专注于互联网攻防技术研究的安全团队。 团队致力于分享优质原创文章、开源安全工具、交流安全技术。 研究方向涵盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等众多领域。
作为“省级保险关键技术实验室”,团队先后与哈尔滨工业大学、齐鲁银行、聊城大学、交通学院等著名高校建立联合技术实验室。 团队公众号成立以来,已发表原创文章370余篇,开发自研平台26个,开源平台15个。 此外,他还积极参加各种线上线下CTF比赛并取得了优异的成绩。 凡是对安全行业感兴趣的人都可以积极加入或关注我们。