MonkeyDev + Xcode 14.x 使用过程中各种过错处理
文章布景
在五月底,博主应机友们希望开发一款自适应/锁定 120Hz 的越狱插件,但为难的是手中无可越狱的高刷设备如 iPhone 13 Pro。
手中常用设备是 14 Pro 16.1.2 / XR 15.1,其间 XR 可多巴胺越狱,用于日常越狱插件开发;
而要实现的 iOS 高刷原理逆向剖析,只有 13 Pro/14 Pro 具备,而手持的 14 Pro 不行越狱,那么怎样完结此次逆向剖析 + 插件开发呢?终究博主选用了如下开发路线:
- 14 Pro 使用 Monkey Dev 进行非越狱逆向剖析
- XR 在 14 Pro 剖析出来高刷逻辑后,用 XR 进行插件开发,终究 13 Pro 机友机型测验验证。
终究插件诞生了。
此处插入公众号文章链接
今天特将 Monkey Dev + Xcode 14.x 系列踩过的各种坑及处理方法,整理出来,共享给大家。
MonkeyDev 介绍
Monke Dev 套件是刘培庆**,**圈内大家叫庆哥 AloneMonkey,在 iOSOpenDev 的基础上开发,于六年前 2017 年发布,其时首要支撑 Xcode 8 以上,用于在 iOS 非越狱手机中能够进行第三方 App 逆向剖析。
但在四年前庆哥已经停止维护更新了,所以最新版别 Xcode 14 可能会遇到各种过错,顺次讲解如下。
理论上,本文章遇到的各类过错适用于所有 Xcode12 及其以上。
各类过错
装置报错
过错在于 Xcode 新版别中模板的途径发生改变,然后导致报错。可依照如下操作处理:
- git clone github.com/AloneMonkey…
- 翻开 MonkeyDev/bin/md-install 文件中,删去如下
- 更新后的 md-install 文件如下
- 履行sudo bash md-install
- 终究翻开 Xcode,下滑新工程选择浮层,能够看到 Xcode 中 Monkey dev 模板,即代表装置成功。
报错 libstdc++
在新建 MonkeyDev 项目后,运转 MonkeyDev 项目时,会报错 libstdc++ 过错,如下图所示
- 依照如下过程处理
git clone https://github.com/devdawei/libstdc-.git
cd <u>libstdc-
</u><u>sudo</u> bash <u>./install-xcode_11+.sh</u>
报错履行文件途径为文件夹
- 在 Taget-Build Settings 中设置
Generate Info.plst File
为 NO,Info.plist File
设置为项目文件夹名/Info.plist
报错 EXC_BAD_ACCESS
能够观察到这个报错是在 perform_rebinding_with
也即 fishhook 导致的
依照如下途径进行处理:
- 项目地址:github.com/facebook/fi…
- 下载项目文件,复制 fishhook.h 、fishhook.c 文件到如下途径,覆盖替换历史的 fishhook 文件
- /opt/MonkeyDev/templates/MonkeyAppMac.xctemplate/fishhook/
- /opt/MonkeyDev/templates/MonkeyAppLibrary.xctemplate/fishhook/
- 再次查看确认下是否替换完结,最新的 fishhook.c 文件是包括 iOS 15 支撑的,如下图
- 此刻即可成功运转,不再报错 EXC_BAD_ACCESS。
报错 Unable to install xxx
这个是最难处理的,报错的现象是,初次装置成功,注入 Dylib 也成功,可是再次编译就无法装置运转了。
点进 Detail 进去的过错信息,查找网上的各种方法,都试过了,都没用。
- 博主够研讨了一周多,既然是 install 过错,那么看看 installd 的报错日志,发现是因为找不到 Plugins 的 info.plist 报错,可是 MonkeyDev 重签名的脚本会删去掉 Plugins/Watchs 文件,一定是有地方还带有 Plugins 相关的信息。
- 通过查找关键词,发现在两个文件夹仍然残留带有相关签名信息。
- 在重签名脚本中,添加此两个文件夹的删去即可。(或许手动把 monkeytest/monkeytest/TargetApp 中的 xxx.app 包中的_CodeSignature、SC_Info 删去)
rm -rf "${TARGET_APP_PATH}/_CodeSignature" || true
rm -rf "${TARGET_APP_PATH}/SC_Info" || true
- 然后就能够恣意编译装置运转啦,不会再报错Unable to install xxx过错了~
报错 Dylib 签名过错
这个是因为 monkeytestdylib 的Build Settings中的签名和主项目文档不一致导致。依照如下图处理:
编译后,Hook 代码未收效
在编译成功后,可能会发现 Hook 代码没有收效,MonkeyDev 的作业原理是,在使用 Logos 语法时,会将 xm 文件转换为 m 文件。
所以编写后,要 command+s 保存 xm 文件。
如果发现 Hook 代码没有收效,就观察下.m 文件是否已有相应 Hook 代码
文章结束
MonkeyDev 在 iOS 逆向剖析剖析中供给了便当功用,包括了代码注入、反反调试、Cycript、Reveal 等,最让开发者舒服的是原生 Xcode 编译 + 调试体会,感谢庆哥在越狱圈子的奉献。
关于 MonkeyDev 的系列教程,有想交流讨论的,能够去张小龙那里【蜗牛iOS】给我留言。