KernInfra远程struct读写包装

大类
iOS
技术标签
原理研究-iOS
开发-HookPatch-iOS
优先级
Low
开始日期
May 10, 2021
状态
Finalized
Public
Public
最后更新
May 10, 2021

动机

这个项目主要还是给我的其他一大堆操作iOS内核的工具用的
我在写内核相关工具的时候经常会碰到这些问题:
  • 读着读着就读越界了,每个指针都得错误处理,否则直接设备就panic了,非常痛苦
  • 不同的系统上偏移不一样,一动就得全改一遍
  • TFP0在iOS14之后又不好弄了,libkrw之类的接口有不一样
  • patchfinder每次都得找好久
  • 每层指针都得写一大条指令,多层指针很痛苦

需求

  • 集成patchfinder、tfp0/libkrw等读写方式
  • 能够处理不同iOS版本之间的偏移问题
  • 自动检查防止读取越界
  • 像直接使用内存用”→”一样来使用内核结构体,且支持多层结构体

方案

  • 使用Cpp Template重载→运算符,返回对一个Pointer的封装,里面包含有父对象的信息和偏移的信息,形成一个多层指针
  • 懒加载,在取值时才做具体内核读写,减少内核读写次数
  • 内核读写时检查读写的范围,如果超出范围则直接返回,避免出现panic
  • 抄了dimento的patchfinder,最高支持iOS 14