JBDev - Theos下一代越狱开发工具

自越狱诞生以来,Theos一直是越狱开发的主流工具,大多数开发者使用Theos编译代码,再用lldb手动调试。JBDev简化了这个过程,项目地址github.com/lich4/JBDev

简介

JBDev用于Xcode越狱开发及巨魔开发,提供和普通App一样的开发体验,使用Xcode进行编译------安装------调试,已测试环境:

  • Xcode12-15

  • iOS12-16

  • arm64/arm64e

  • Checkra1n/Unc0ver/Taurine/Palera1n/Dopamine

  • 有根/无根/隐根

主要功能

  • 支持越狱(有根/无根/隐根)App开发&源码级调试

  • 支持巨魔App开发&源码级调试

  • 支持Xcode调试任意进程

注意事项

  • JBDev只能用于越狱设备上调试

  • 使用JBDev越狱开发时,打包功能依赖于Theos

  • 使用JBDev巨魔开发时,确保已安装TrollStore

常见项目类型调试方式一览

|项目类型 |Xcode调试 |调试类型 |

|--------------|------------------|----------------------|

|越狱App |JBDev |启动调试/附加调试/等待调试|

|越狱Tweak/Tool |JBDev |附加调试/等待调试 |

|巨魔App |JBDev |启动调试/附加调试/等待调试|

|非越狱App |MonkeyDev |启动调试/附加调试/等待调试|

注:

  • 启动调试,使用Xcode启动App并使其等待调试器附加

  • 附加调试,进程已启动情况下附加调试,lldb使用方式debugserver --attach=[pid|name],Xcode同理

  • 等待调试,等待进程启动并自动附加调试,lldb使用方式debugserver -waitfor=[name],Xcode同理

JBDev核心

JBDev核心文件

  • jbdev.plist,控制JBDev在iOS端行为配置文件,开发阶段需随App一起打包,字段如下

    • type: 指定JBDev以何种方式打包安装,可指定app/jailbreak/trollstore
  • jbdev.build.sh,控制JBDev打包的脚本

JBDev核心设置(环境变量)

  • THEOS,用于JBDev定位Theos以便打包

  • JBDEV_PACKAGE,应用于App类型Target,用于控制最终打包&安装&调试

JBDev开发越狱项目

详细实例见JBDevJBTest

建立项目

以下配置不依赖于iOSOpenDev/MonkeyDev

使用Xcode建立等同于theos/application的项目

  • File - New - Target - iOS - App

  • 此为主Target,用于JBDev交互打包/安装/调试

使用Xcode建立等同于theos/tweak的项目

  • File - New - Target - macOS - Library

  • Build Settings - Base SDK设置为iOS,同时部署Device设置为iOS设备

使用Xcode建立等同于theos/tool的项目

  • File - New - Target - macOS - CommandLineTool

  • Build Settings - Base SDK设置为iOS,同时部署Device设置为iOS设备

配置文件

  • 所有需要ldid签名的Target在自身目录下添加plist文件

  • jbdev.build.sh放在.xcodeproj同级目录

  • jbdev.plist放在.xcodeproj同级目录,设置typejailbreak

配置Build Settings

  • 所有Target调整Installation Directory

  • Project新增CODE_SIGNING_ALLOWED,设置为NO

  • Project新增THEOS,设置为theos路径

  • 主Target新增JBDEV_PACKAGE,设置为YES(此变量控制是否打包)

配置Build Phase

  • 所有Target添加Run Script最后执行,设置为bash jbdev.build.sh

  • 主Target将其他项目设置为依赖项

无根/隐根配置

Theos支持为有根/无根/隐根提供layout扩展

  • layout_root目录,存放有根与无根/隐根文件diff

  • layout_rootless目录,存放无根与有根/隐根文件diff

  • layout_roothide目录,存放隐根与有根/无根文件diff

常用diff文件如下

  • layout*/DEBIAN/control

    • 有根Architectureiphoneos-arm
    • 无根Architectureiphoneos-arm64
    • 隐根Architectureiphoneos-arm64e
  • layout*/DEBIAN/{preinst,postinst,extrainst_,prerm,postrm}

  • layout*/Library/LaunchDaemons/*.plist

注意事项

  • layout/DEBIAN/controlArchitectureXcode Build SettingsArchitecture没有关系,有根包的实际arch可以为armv7/arm64/arm64e,无根包/隐根包的实际arch可以为arm64/arm64e

  • 必须在layout/DEBIANpostinstextrainst_中执行uicache否则因系统App未注册而安装失败

有根/无根/隐根编译切换

此方式每次可编译有根/无根/隐根中的一种,操作方式如下

通用

  • Tweak设置Runpath Search Paths Header Search Paths Framework Search Paths

  • Tweak链接libsubstrate.tbd

有根

  • 所有Target的Build SettingsTHEOS_PACKAGE_SCHEME删除

无根

  • 所有Target的Build SettingsTHEOS_PACKAGE_SCHEME设置为rootless

  • Preprocessor Macros中设置THEOS_PACKAGE_SCHEME_ROOTLESS

隐根

  • 所有Target的Build SettingsTHEOS_PACKAGE_SCHEME设置为roothide

  • Preprocessor Macros中设置THEOS_PACKAGE_SCHEME_ROOTHIDE

  • Tweak链接libroothide.tbd

单独启动调试Tweak

详细实例见JBDevTweakTest。由于JBDev可以调试任意App,因此可以源码级调试注入App的Tweak。原理如下:

  • 建立一个和目标App的BundleID相同的空App(FakeApp)

  • Xcode执行打包安装调试,JBDev跳过安装

  • 目标App启动,开始调试Tweak

使用Xcode建立FakeApp

  • File - New - Target - iOS - App

配置文件

  • jbdev.build.sh放在.xcodeproj同级目录

  • jbdev.plist放在.xcodeproj同级目录,设置typejailbreak

配置Build Settings

  • 所有Target新增CODE_SIGNING_ALLOWED,设置为NO

  • FakeApp新增JBDEV_PACKAGE,设置为YES(此变量控制是否打包)

  • FakeApp新增JBDEV_NO_COPY,防止安装FakeApp本身

配置Build Phase

  • 所有Target添加Run Script最后执行,设置为bash jbdev.build.sh

  • FakeApp将Tweak设置为依赖项

注意

  • SpringBoard不属于App类型,不可调试

  • 由于Xcode不支持非源码下断点,因此不支持调试logos语法的Tweak,如果谁有黑科技可以实现强制下断点请在issue里提交

JBDev开发巨魔项目

详细实例见JBDevTSTest。前置条件:iOS系统需要能越狱且能使用巨魔

使用Xcode建立普通iOS-App的项目

  • File - New - Target - iOS - App

配置文件

  • 在自身Target目录下添加需要签名的plist文件

  • jbdev.build.sh放在.xcodeproj同级目录

  • jbdev.plist放在.xcodeproj同级目录,设置typetrollstore

配置Build Settings

  • Target新增CODE_SIGNING_ALLOWED,设置为NO

  • Target新增JBDEV_PACKAGE,设置为YES(此变量控制是否打包)

配置Build Phase

  • 所有Target添加Run Script最后执行,设置为bash jbdev.build.sh

注意事项

  • 巨魔App开发,由于纯巨魔环境与越狱环境有较大差异,因此后续需要在纯巨魔环境进一步测试

JBDev编译

bash 复制代码
cd JBDev

make clean; make package

make clean; make package THEOS_PACKAGE_SCHEME=rootless

make clean; make package THEOS_PACKAGE_SCHEME=roothide
相关推荐
QuantumLeap丶16 小时前
《Flutter全栈开发实战指南:从零到高级》- 09 -常用UI组件库实战
flutter·ios·dart
2501_9159184117 小时前
App 上架苹果商店全流程详解 从开发者账号申请到开心上架(Appuploader)跨平台免 Mac 上传实战指南
macos·ios·小程序·uni-app·objective-c·cocoa·iphone
2501_9160074718 小时前
从零开始学习iOS App开发:Xcode、Swift和发布到App Store完整教程
android·学习·ios·小程序·uni-app·iphone·xcode
Pluto5381 天前
第一个app产品的迭代
ios·github
2501_915921431 天前
iOS 26 CPU 使用率监控策略 多工具协同构建性能探索体系
android·ios·小程序·https·uni-app·iphone·webview
狂团商城小师妹1 天前
JAVA国际版同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5
android·java·ios·小程序·交友
游戏开发爱好者81 天前
iOS 应用逆向对抗手段,多工具组合实战(iOS 逆向防护/IPA 混淆/无源码加固/Ipa Guard CLI 实操)
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张1 天前
iOS 文件管理与导出实战,多工具协同打造高效数据访问与调试体系
android·macos·ios·小程序·uni-app·cocoa·iphone
AirDroid_cn1 天前
在 iOS 18 中,如何将锁屏底部的 “手电筒” 替换为其他应用?
ios
芝麻开门-新起点2 天前
Android 和 iOS 系统版本及开发适配
android·ios·cocoa