Android NDK
Android NDK环境
D:\Android SDK\ndk\25.2.9519653
使用clang而不用gcc
D:\Android SDK\ndk\25.1.8937393\toolchains\llvm\prebuilt\windows-x86_64\bin\clang --version
查看是否安装成功clang
ptrace
在 C 语言中,ptrace
已经被 Linux 内核实现,你可以在 sys/ptrace.h
头文件中找到它。
ptrace
常用功能
功能 | 调用方式 | 作用 |
---|---|---|
调试自身 | ptrace(PTRACE_TRACEME, 0, 0, 0) | 检测调试器(反调试) |
附加到进程 | ptrace(PTRACE_ATTACH, pid, 0, 0) | 控制另一个进程(外挂/Hook) |
读取进程内存 | ptrace(PTRACE_PEEKDATA, pid, addr, 0) | 读目标进程的内存 |
写入进程内存 | ptrace(PTRACE_POKEDATA, pid, addr, data) | 修改目标进程的数据(外挂/破解) |
修改寄存器 | ptrace(PTRACE_SETREGS, pid, 0, ®s) | 修改 CPU 寄存器(绕过检测) |
恢复进程执行 | ptrace(PTRACE_CONT, pid, 0, 0) | 继续运行被调试的进程 |
- 用 Frida 绕过
ptrace
- 用 IDA Patch 二进制,让
ptrace
失效 - 用
LD_PRELOAD
Hookptrace()
层级 | DEX 层(Java) | Native 层(so) |
---|---|---|
代码语言 | Java / Smali | C / C++ |
运行环境 | ART / Dalvik VM | 直接运行在 CPU 上 |
存储文件 | classes.dex | libnative-lib.so |
修改方法 | jadx 、Frida 、smali | IDA 、Frida 、Inline Hook |
层级 | 代码类型 | 运行环境 | 作用 |
---|---|---|---|
1️⃣ Java 层 | .java → classes.dex | ART/Dalvik VM | 应用逻辑 |
2️⃣ Smali 层 | .smali | ART/Dalvik VM | Java 层的低级字节码 |
3️⃣ Native 层 | JNI 调用 C/C++ | 通过 JNI 调用 so | 桥接 Java 和 C/C++ |
4️⃣ SO 层 | .so (C/C++ 代码) | 直接运行在 CPU | 底层优化(加密、计算) |
📌 CMake 在 Android NDK 中的作用
在 Android 开发中:
- CMake 编译
C/C++
代码,生成libnative-lib.so
- Java 通过 JNI 调用
so
库 - CMake 让
so
库支持不同的 CPU 架构(arm64、x86 等)