利用kpm模块实现kernel中动态切换内存分页,实现应用对内存的读和执行分离,读和执行发生在不同的物理页,使应用读到的是原始物理页,执行的是被hook过的物理页,从而隐藏hook产生的内存修改
缺陷:无法对自读代码区域设置断点,同一页无法同时读取和执行
- wxshadow_client实现了基本的wxshadow接口调用,可以用来测试bp断点和patch能力
- bp接口能够直接对某个地址设置断点,可以用来进行简单的测试无痕效果,设置断点后通过dmesg查看日志
- patch接口可以配合用户态hook框架写入inline hook代码(跳板代码不能存在读取同一页内存的指令),需要用户态工具联调wxshadow提供的接口实现无痕(无法直接对frida等hook框架产生隐藏效果)
- 目前用户态实现hook工具为rustFrida项目,已基本的Java hook和native hook
git config submodule.recurse true 自动更新submodule
- 使用KernelPatch或者Apatch加载kpm模块,wxshadow_client -p pid -a address -r x0=9 -r可选的修改寄存器值,dmesg查看日志
- 打开测试app,复制value函数的地址,设置断点测试,观察crc校验结果保持不变,修改寄存器改变value函数返回值
- 复制crc32函数地址设置断点,app卡死,无法同时读取和执行
- 配合rustfrida实现java、native hook
- https://bbs.kanxue.com/thread-290304.htm#msg_header_h2_5
This project is licensed under the GPL v3. Any derivative work that uses, modifies, or distributes this project's code must be open-sourced under the same license.
本项目仅供安全研究与学习交流使用,严禁用于任何非法用途。使用者应遵守所在地区的法律法规,因使用本项目产生的一切后果由使用者自行承担,与项目作者无关。
