本文是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