越狱开发初级之Theos环境搭建

原帖发布于2021-7-21

基本常识

  • 为什么进行越狱开发,以及越狱开发能做什么?
      实现一些AppStore上的app无法实现的功能,在越狱机器上,可以精细化控制iOS系统和App做批量自动化操作,增删改系统功能等

  • 什么是Theos以及Theos用来干什么?
      是目前最流行的跨平台iOS越狱开发工具包,包含越狱开发所有需要的sdk和工具链

  • 我该怎样选择开发环境?
      为了达到最快的开发速度和生产速度,建议PC使用环境MacOS + XCode + Theos + VSCode,手机端使用openssh + debugsever + frida进行相关开发,逆向,调试,跟踪,测试。本系列教程均基于该环境开发。为此你需要准备的编程技能至少包括objective-c + c + python + javascript + logos

  • 推荐学习资源?
      论坛: iOSRE, 看雪, 52pojie, ....

常见的越狱软件/插件都有哪些文件类型?

  • 资源文件
  • Daemon, 可执行程序,为常驻于系统的守护进程,用于执行一些需要系统权限的操作或者实现底层服务
  • Tool, 可执行程序,用于实现简单功能,比如lsof,wget
  • Tweak, 动态库,随App启动自动注入,用作控制进程
  • App, 这里开发的是Root权限执行的App,在桌面存在图标

准备工作

  • 确保系统安装homebrew, xcode

  • 安装Theos依赖

 brew install ldid xz
  • 下载TheOS
mkdir /opt # theos将下载到/opt/theos
git clone --recursive [url]https://github.com/theos/theos.git[/url] /opt/theos

*** 小技巧: 如果git下载比较慢又不想用vpn,可以用gitee的'导入Github仓库'功能,借助gitee下载***

  • 增加iOS私有函数库
curl -LO [url]https://github.com/theos/sdks/archive/master.zip[/url]
TMP=$(mktemp -d)
unzip master.zip -d $TMP
mv $TMP/sdks-master/*.sdk /opt/theos/sdks
rm -r master.zip $TMP

简单实例

创建工程

执行/opt/theos/bin/nic.pl得到如下结果

NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/activator_listener
  [3.] iphone/application_modern
  [4.] iphone/application_swift
  [5.] iphone/control_center_module-11up
  [6.] iphone/cydget
  [7.] iphone/flipswitch_switch
  [8.] iphone/framework
  [9.] iphone/library
  [10.] iphone/notification_center_widget
  [11.] iphone/notification_center_widget-7up
  [12.] iphone/preference_bundle_modern
  [13.] iphone/theme
  [14.] iphone/tool
  [15.] iphone/tool_swift
  [16.] iphone/tweak
  [17.] iphone/tweak_with_simple_preferences
  [18.] iphone/xpc_service
  [19.] iphone/xpc_service_modern
Choose a Template (required):

  这里每行都是一种工程类型,其中[14]用于生成iOS无界面的可执行程序,[16]用于生成注入App的动态库。这两个是最常用的项目。如果打算开发完整越狱App,仍然要借助XCode。这里按如下操作,会产生helloworld目录:

Choose a Template (required): 16
Project Name (required): helloworld
Package Name [com.yourcompany.helloworld]: helloworld
Author/Maintainer Name [apple]: helloworld
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.springboard
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: SpringBoard

配置手机环境

安装tcprelay

  tcprelay将usb连接的手机端口映射到本地端口,这样登录手机将非常方便,同时传文件速度非常快。远程ssh登陆到手机,将会面临网络不稳定的问题,操作比较痛苦

  • iPhone Cydia商店中安装openssh
  • brew install libusbmuxd
  • [url]https://gitee.com/lich0/jailbroken_programming_lesson/tree/master/tools[/url]获取tcprelay.py和usbmux.py
  • 执行sudo python3 tcprelay.py -t 22:22 (注意因为端口号小于1024所以必须root权限执行)

期间可能遇到的问题:

  • 如果首次连接手机,会如下提示,按yes即可
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is SHA256:z5N37rPCpeTKcIcm1tx3x3DnkTfeaESagZWuTYnmD3E.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
  • 如果对多台iPhone采用上述操作,那么会产生knownhost冲突,如下所示
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:z5N37rPCpeTKcIcm1tx3x3DnkTfeaESagZWuTYnmD3E.
Please contact your system administrator.
Add correct host key in /Users/apple/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/apple/.ssh/known_hosts:2
RSA host key for 127.0.0.1 has changed and you have requested strict checking.
Host key verification failed.

此时需要将设备公钥加入到本机,按如下方式操作:

ssh-keyscan 127.0.0.1 >> ~/.ssh/known_hosts
  • 为避免每次登陆手机输入密码,按如下操作
ssh-copy-id [email]root@127.0.0.1[/email] # 密码默认为alpine

部署日志查看工具

git clone [url]https://github.com/rpetrich/deviceconsole.git[/url]

使用XCode编译出deviceconsole并放到$PATH下,这样每次USB连接iPhone后执行deviceconsole就能看到日志(支持iOS12及以下系统)

开发hellowolrd

  我们的helloworld是在SpringBoard启动时做个弹窗。SpringBoard可以理解为桌面进程。效果为每次杀死SpringBoard进程时会在桌面弹窗。使用VSCode打开helloworld目录,可以看到存在4个文件:

  • control 指定生成的deb的基本信息,包括包名,版本,安装依赖及作者信息
  • helloworld.plist 用于指定自动注入的进程,这里可以看到指定为springboard
  • Makefile
  • Tweak.x 代码

工程在[url]https://gitee.com/lich0/jailbroken_programming_lesson/tree/master/junior1_helloworld[/url]

执行make package install到手机后,得到最终效果如图

11.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容