本文是whale的基本介绍,下一篇将介绍实战demo
项目地址:https://github.com/asLody/whale
以下内容来自whale项目README的介绍
一、概述
Whale是一个跨平台的Hook Framework,同时支持Android、IOS、Linux、MacOS。 Whale 支持ARM/THUMB、ARM64、X86、X86_64 (AMD64),这几乎覆盖了目前所有主流的设备。
二、特性
Android
-
Xposed-Style Method Hook
-
运行时修改类之间的继承关系
-
修改对象所属的类
-
绕过Hidden API Policy
Darwin/Linux Platforms
-
Internal symbol resolver
-
Native Hook
IOS的限制
IOS的InlineHook在非越狱设备上只限在debug编译模式下开启, release编译模式下将无法正常工作。
为了解决这个问题,Whale将提供Binary Static Inline Hook。
IOS下的Binary Static Inline Hook将在近期开源。
你可以用它做什么?
-
开启App的上帝模式
-
监控或篡改软件的行为
-
即时生效的热修复
-
SandBox
-
注入到系统代替Xposed
Whale的兼容性
-
Android 5.0.0
-
Android 5.1.1
-
Android 6.0
-
Android 6.0.1
-
Android 7.1.2
-
Android 8.1.0
-
Android 9.0.0
-
IOS 11.3
-
IOS 12.0
-
MacOS mojave (10.14)
-
(不在清单内表示 未测试 )
InlineHook
对于pcrel指令, Whale会将其转换为pc 无关指令, 如果在Hook过程有遇到未转换的指令,请提issue。
关于Jit
Whale内置了 Jit Engine, 当你有更高级的Hook需求时可以通过Jit直接在内存中生成可执行的指令。 不再需要像从前那样通过工具来生成丑陋的hard code。
编译
我们已提前编译了Android & IOS的二进制版本,您可以在built目录找到它们。
Whale使用了CMake来构建项目,所以你需要在你的系统上安装CMake。
Android
-
如果需要使用Java Hook, 请把java文件夹的代码复制到你的项目。
-
直接使用二进制,你只需要复制 built/Android 下你所需的abi到你的项目的src/main/jniLibs下。
-
如果需要编译源码,请在build.gradle中指定CMakelists.txt:
externalNativeBuild {
cmake {
path "your/whale/path/CMakeLists.txt"
}
}
IOS
cd toolchain
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=ios.toolchain.cmake \
-DIOS_PLATFORM=OS64 \
-DPLATFORM=IOS \
-DIOS_ARCH=arm64 \
-DENABLE_ARC=0 \
-DENABLE_BITCODE=0 \
-DENABLE_VISIBILITY=0 \
-DIOS_DEPLOYMENT_TARGET=9.3 \
-DSHARED=ON \
-DCMAKE_BUILD_TYPE=Release
make -j4
Ohter platforms
cmake .
make -j8