-
注入方面 调用了Riru来对Zygote进行注入
Zygote
安卓下进程都是从Zygote fork的.
当注入so到Zygote后,之后启动的进程就都会带有这个so.
可以自己注入Zygote进程或者使用Riru这个模块. -
Hook方面
-
首先,引用Android官方的一些资料
Android官方的一些资料
- 使用原生代码时,硬件很重要.NDK 提供各种 ABI 供您选择,可让您确保针对正确的架构和 CPU 进行编译.
- 不同的 Android 设备使用不同的 CPU,而不同的 CPU 支持不同的指令集.CPU 与指令集的每种组合都有专属的应用二进制接口 (ABI).
您可以通过多种方式检查代码中的 CPU 功能,但每种方式都需要做出不同的取舍.
支持的 ABI
ABI 支持的指令集 备注 armeabi-v7a armeabi
Thumb-2
Thumb-2
VFPv3-D16与 ARMv5/v6 设备不兼容 arm64-v8a AArch64 x86 x86 (IA-32)
MMX
SSE/2/3
SSSE3不支持 MOVBE 或 SSE4 x86_64 x86-64
MMX
SSE/2/3
SSSE3
SSE4.1、4.2
POPCNT
有兴趣的请参考Android官方资料
ABI:使用预处理器的预定义宏
通常,在构建时使用 #if defined 及以下各项确定 ABI 最为方便:- 对于 32 位 ARM,使用 arm
- 对于 64 位 ARM,使用 aarch64
- 对于 32 位 X86,使用 i386
- 对于 64 位 X86,使用 x86_64
请注意:32 位 X86 称为 i386,而不是 x86,这可能与您预想的有所不同!
- 使用原生代码时,硬件很重要.NDK 提供各种 ABI 供您选择,可让您确保针对正确的架构和 CPU 进行编译.
-
而 inlinehook 显然和汇编指令集有不可分割的关联
因此 对于 hook 我们需要根据 abi 的不同
再根据 汇编指令集的区别 分别使用不同的hook手法 -
对于32位进程 也就是 abi 为 armeabi-v7a 的
- 常见的汇编指令集合为 armeabi 的 arm 模式
- 以及 Thumb-2 的 Thumb 模式
-
对于64位进程 也就是 abi 为 arm64-v8a 的
- 唯一的汇编指令集合为 AArch64 的 arm64 模式
-
在本项目中
- 采用一个跨平台 inlinehook 框架 Dobby
- 使用 KittyMemory 作为内存补充工具
-
Made By SsageParuders