soLoader — 自定义 Linker 加载 Android SO 文件
工具简介
soLoader(GitHub)是由 SoyBeanMilkx 开发的开源项目,使用 C++ 编写,当前拥有 237 颗星。它实现了一个自定义的动态链接器(linker),能够独立加载 Android 平台的共享库(.so 文件),绕过系统默认的 linker。
核心特性
- 自定义 ELF 加载:完全自主实现的 ELF 文件加载器
- SO 文件支持:支持 Android 平台 SO 文件加载
- 重定位处理:实现完整的重定位功能(R_ARM_JUMP_SLOT、R_ARM_GLOB_DAT 等)
- 符号查找:支持符号查找和解析
- 依赖递归加载:自动递归加载依赖的 SO 文件
使用示例
ElfLoader loader;
if (loader.LoadLibrary(argv[1])) {
void* test_func = loader.GetSymbol("yuuki_test");
if (test_func) {
printf("Testing: 1 + 1 = %d\n",
((int(*)(int,int))test_func)(1, 1));
}
}
技术原理
- ELF 文件解析:解析 ELF 头、程序头、节区头等结构
- 内存映射:将 SO 文件按需映射到内存
- 重定位处理:处理各种重定位类型
- 符号解析:实现符号查找和解析逻辑
- 依赖加载:递归加载依赖的 SO 文件
应用场景
- 插件化架构实现
- 热修复技术研究
- SO 文件保护与加固
- 动态加载技术研究
- Android 安全研究
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/sec/soloader.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)