首页
社区
课程
招聘
[原创]越狱开发工具JBDev1.0发布(Theos下一代)
发表于: 2025-3-26 17:08 4332

[原创]越狱开发工具JBDev1.0发布(Theos下一代)

2025-3-26 17:08
4332

  从越狱诞生以来,越狱开发都是用Theos和手动lldb调试,有了JBDev就可以和Xcode开发普通App一样体验的去开发越狱/巨魔App:编译——安装——调试。因为个人身体原因加各种琐事,导致本项目延迟了1年才面世,但这并不妨碍他成为自Theos以来最强的越狱开发工具。项目地址d9cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6D9K9h3y4Z5y4q4)9J5c8V1A6n7c8r3g2$3


简介

JBDev用于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编译

1
2
3
4
cd JBDev
make clean; make package
make clean; make package THEOS_PACKAGE_SCHEME=rootless
make clean; make package THEOS_PACKAGE_SCHEME=roothide

问题排查

在使用JBDev遇到问题时,可以

  • 查看系统日志(前缀JBDev)
  • 查看文件日志/tmp/jbdev.log

其他注意事项

  • 对于iOS>=15,首次连接Mac必须使用XCode>=13,否则会因生成的符号缓存有误导致lldb初始化时间巨长,若已生成错误的符号缓存可以在此目录手动删除~/Library/Developer/Xcode/iOS DeviceSupport/[设备]

1
A system application with the given bundle identifier is already installed on the device and cannot be replaced.
  • 原因:安装成功但获取App信息失败(如extrainst_未执行uicache)
  • 解决:直接dpkg卸载报错,需要先手动安装deb,再卸载deb;或者手动删App目录再uicache
  • 注意:uicache根据越狱工具不同参数不同

1
Failed to start remote service "com.apple.debugserver" on device.
  • 解决:插拔usb重试

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2025-3-29 14:09 被lichaolich编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (7)
雪    币: 258
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
2025-3-26 17:59
0
雪    币: 376
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
2025-3-26 18:30
0
雪    币: 2191
活跃值: (3007)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
4
厉害????
2025-3-26 20:14
0
雪    币: 781
活跃值: (718)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2025-3-26 23:16
0
雪    币: 449
活跃值: (2632)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
现在iOS还有稳定的越狱漏洞吗
2025-3-28 18:51
0
雪    币: 244
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2025-4-4 13:24
0
雪    币: 24
活跃值: (1674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
轻装前行 现在iOS还有稳定的越狱漏洞吗
少,越狱快消失了,这是大现状,不以人的意志为转移
2025-4-4 17:20
0
游客
登录 | 注册 方可回帖
返回