引言
通过tweak的原理的研究的出来的结论是:
- tweak是根据dyld中的
DYLD_INSTER_LIBRARIES
这个宏环境变量临时插入自己的动态库 - 在App的MachO文件中存在segmentname、sectionname 分别为__RESTRICT、 __restrict就能够使dyld中的DYLD_INSTER_LIBRARIES这个宏插入动态库失败,也就是tweak失败
- 在IPhone一起玩越狱 -(十五)- 禁止tweak插入App进程介绍了反tweak插入,也就是防护你的App被tweak篡改
反tweak插入,是一个防护问题,我怎么去攻破这层防护呐?这个防护是完美无缺的吗?
对反tweak插入分析
- 在dyld源码会直接循环遍历
DYLD_INSTER_LIBRARIES
中的lib动态库,然后加载到当前目标App进程 - 当然dyld源码中有加载
DYLD_INSTER_LIBRARIES
的临时动态库有个先觉条件就是,必须issetugid() == false hasRestrictedSegment(mainExecutableMH) == false
- 因为没有找到issetugid()相关解释,或者也是apple的私有API,上架的App是无用的
- hasRestrictedSegment(mainExecutableMH) 分析这个实现得到反tweak的方法就是在你项目生成*.app文件的时候,插入segmentname、sectionname 分别为__RESTRICT、 __restrict的一个Section 详情->戳我
- 如果想反反tweak目前的方式就是将MachO文件中的__RESTRICT的Section干掉或者修改segmentname、sectionname任意一个,让判断失效
入手操作
通过分析,当前我能做的只能是通过修改MachO二进制文件,难点出现了我怎么修改MachO二进制文件,因为学过一点汇编知识,二进制文件都是0、1组成的机器语言,项目通过通过上层语言、汇编语言,最后生成的二进制的计算机语言,如果在一堆二进制文件中找到这个Section
,好比是海底涝针,没法入手,这就靠我们去寻找一些工具,古人云:"工欲善其事,必先利其器。"如果有工具可以使用为什么不用呐? 牛顿:"站在巨人的肩膀上"!
然后我找到了这个神器
Synalyze It! Pro
这个可以修改二进制文件
只要修改以后的内容不等于
__RESTRICT、 __restrict
最后要做的是将MachO文件放回*.app中
注意
修改过后的MachO文件需要重新签名才能够安装到手机里面
无越狱iphone安装多个同样应用的方法(一)
无越狱IPhone安装多个同样应用的方法(二)Xcode签名
无越狱IPhone安装多个同样应用的方法(三)自动化重签名
安装成功以后就可以直接用tweak插入动态库的方式去Hook你的App的代码
码运昌盛