前言

俗话说得好, 万事开头难. 仅仅是上图一个如此简单地不能再简单的小app, 其实都不算是app, 只是注入了一段代码进系统中, 等到特定的函数方法调用的时候就会被我们hook掉, 执行我们写的代码, 仅此而已.

哈哈, 就是这样一个小功能, 搞得我焦头烂额了一个晚上, 所以大家不用害怕, 连我这样的菜鸟都能实现, 大家只要认真看我的总结, 就一定可以自己也动手在自己越狱iPhone, iPad上嗨起来!

ps : 为了纪念这神圣的一刻, 就算是这么简单的程序我也把它放到了我的Github上, 也算是一个里程碑吧. 还有就是万一哪天我自己忘了的时候能回头看看就能把这些知识捡回来. GitHub入口 -> 第一个越狱程序代码

https://github.com/Jerry4me/JRFirstJailBreakApp

废话不多说, 我们直入正题!


准备动作

你需要准备的是 :

  • 一台Mac

  • 一部已经越狱的iPhone or iPad

  • Theos

  • Xcode

  • Xcode Command Line Tools

  • dpkg

Mac

这个..就不说了吧. 再不行虚拟机也可以顶着上啊

越狱iPhone

越狱的方法网上已经有很多成熟的方法了, 我的4s用PP助手真的就接近一键越狱了. 当然这台越狱iPhone还需要配置.

安装OpenSSH

由于接着要在电脑上用命令行直接连接到手机给手机安装, 所以这里必须配置好. 方法也很简单, Cydia的主界面拉下去就有OpenSSH的配置方法了, 这里不再赘述.

ps : 友情提示以下, 配置好之后是有一个原始的root密码的, 必须修改掉, 否则容易让不安好心的人连接到你的手机.

方法如下 :

进入命令行工具

ssh root@你的手机的IP地址

passwd

修改好之后输入logout就能断开连接了

由于每次用ssh链接手机都需要输入密码比较麻烦, 有一种一劳永逸的方法, 大家可以自行Google~

安装apt与ldid

直接在Cydia搜索apt和ldid, 安装即可.

Xcode

相信做iOS开发的都有吧..这里就不再说了, 只是如果你Mac上有多个Xcode的话, 需要用以下指令指定一个Theos默认使用的Xcode

sudo xcode-select -s /Application/Xcode.app/Contents/Developer 大家根据自己实际Xcode的位置来定.

Xcode Command Line Tools

在命令行下执行xcode-select --install即可

dpkg

首先安装MacPort, 在官网下载安装就行了. 安装好之后可以通过在命令行中输入port version来查看是否安装成功.

然后输入sudo port install dpkg就能安装dpkg了, dpkg是用来把我们写的Tweak代码打包成deb的工具

ps : 越狱app安装包后缀为.deb, 而没越狱的为.ipa.

Theos

我们的主角终于上场了. 我们的代码就是用这个软件来编写.

下载Theos

export THEOS=/opt/theos 配置环境变量, 以后THEOS就相当于theos的绝对路径, 即/opt/theos

sudo git clone git://github.com/DHowett/theos.git $THEOS 从GitHub上下载Theos

配置ldid

从这里下载ldid, 把他放到/opt/theos/bin/下, 并用以下命令赋予它可执行权限

http://joedj.net/ldid

sudo chmod 777 /opt/theos/bin/ldid

解决Theos的bug

首先在Cydia中搜索安装CydiaSubstrate, 然后用iFunBox或scp等方式, 将iOS上的/Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate拷贝到Mac上, 重命名为libsubstrate.dylib之后放到/opt/theos/lib/下, 替换掉无效的文件即可. (我这部Mac上lib文件夹是空文件夹).

ok, 大功告成, 我们终于可以用Theos大展拳脚啦!!!

创建Theos工程

依然是使用命令行进行创建Theos项目

/opt/theos/bin/nic.pl : 自动NIC(New Instance Creator).

然后这里会有许多个模板, 就跟Xcode我们创建项目的时候也有许多模板给我们选择, 是Command Line Tool or Single View Application …. 这里也是. 我们选择iphone/tweak这个.

Project Name : 项目名称

Package Name : 打包成deb包的名称(类似于bundle identifier)

Author/Maintainer Name : 作者名

MobileSubstrate Bundle filter : 该工程作用的对象的bundle identifier, 想hook哪个app, 就输入哪个app的bundle identifier. 例如微信有可能是com.tencent.wechat

List of application to terminate upon installation : 该tweak安装完成后需要重启的应用, 一般重启SpringBoard. (相当于重启桌面). 不用的话就输入 -

ok, 工程创建完成啦

Theos基本知识

创建完后一般会有4个文件

Makefile

Tweak.xm

control

xxx.plist

Makefile

该文件指定工程用到的文件, 框架,库等信息. 例如你的Tweak.xm文件用到了UIKit, Foundation等其他什么框架, 都在这里描述. 里面具体可以写些什么大家可以自行Google啦.

这里需要注意的是, 如果要把程序通过ssh的方式安装在手机上, 就必须在里面加一段

THEOS_DEVICE_IP = 手机的IP地址

Tweak.xm

我们写代码的文件, 后缀中的x代表这个文件支持Logos语法. m代表支持C++. 如果只有一个单独的x代表支持Logos和C, xm则支持Logos和C/C++. 跟我们的.m和.mm一个意思.

这个文件默认内容就是一个注释, 简易的指导书. 这里介绍一些我们用到的概念

%hook

%hook ClassName : 代表要hook这个类.

%hook SpringBoard

/* 这里则为你要hook的函数, 方法 */

%end

%orig

用在钩住(hook)的函数内部, 代表调用被钩住的函数的原始代码

%log

用在钩住(hook)的函数内部, 用来打印函数的类名, 参数等信息, 还可自己追加想要打印的信息.

%new

用在%hook的内部, 用于给一个现有的类添加新函数.

ps : 还有一些例如%group, %ctor, %init, %c等大家可自行Google其用法, 这里不再赘述

control

该文件记录了deb包管理系统所需的基本信息, 会被打包进deb包中.

xxx.plist

跟我们应用中的info.plist作用类似.

开始编码

由于我们的app非常小, 只是在iPhone启动SpringBoard.app完成的时候显示一个alertView而已, 所以我们的代码非常精简

%hook SpringBoard

- (void)applicationDidFinishLaunching:(id)application

{

%orig; // 调用原来的代码

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Welcome to iPhone 4s!" message:nil delegate:self cancelButtonTitle:@"Goddamn!" otherButtonTitles:nil];

[alert show]; // 显示弹窗

}

%end

编译 + 打包 + 安装

在项目文件夹下使用make命令, 就可以编译Theos工程了. 编译完成当前目录下会多一个obj文件夹

make package命令, 打包程序. 打包成功后当前目录下会多一个package文件夹, 你的deb文件就在里边

make package install : 编译+打包+安装一条龙服务, 直接将程序编译打包后通过ssh连接的方式安装在你的手机上. 当然你也可以把deb文件先放到手机上再利用iFile或其他应用安装.

done! enjoyourself!


ps : 配置文件和代码都能在我的GitHub上找到, 有什么不懂的可以Google或者在这里留个言, 我都会尽可能快地回复, 相互学习, 共同进步! Good luck!

教你动手做一个 iOS 越狱 app相关推荐

  1. 手把手教你制作一款iOS越狱App,伪装微信位置

    说明 缘由 严重声明 概念 越狱的原理 iOS 目录层级结构 iOS 程序类型 准备工作 硬件设备 辅助软件 Mac 需要的工具 iOS 需要使用的辅助开发工具 逆向过程 静态分析 给App砸壳 使用 ...

  2. 手把手教你从零开始做一个好看的 APP

    前言 从零开始,手把手带你实现一个「专注睡前的 APP」.睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子.瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完 ...

  3. iOS动手做一个直播app开发(代码篇)

    iOS动手做一个直播app开发(代码篇) ###开篇 好久没写简书,因为好奇的我跑去学习直播了,今天就分享一下我的感慨. 目前为止直播还是比较热点的技术的,简书,git上有几篇阅读量和含金量都不错的文 ...

  4. 直播网站源码直播平台软件开发iOS动手做一个直播(原理篇)

    直播网站源码直播平台软件开发iOS动手做一个直播(原理篇) 上篇文章主要给出了代码,但是并没有详细说明直播相关的知识,这篇文章就说一下直播的相关理论知识.附上直播代码篇地址. ###推流 腾讯直播平台 ...

  5. 吕文翰 php,自己动手写一个 iOS 网络请求库(三)——降低耦合

    自己动手写一个 iOS 网络请求库(三)--降低耦合 2015-5-22 / 阅读数:16112 / 分类: iOS & Swift 本文中,我们将一起降低之前代码的耦合度,并使用适配器模式实 ...

  6. 自己动手做一个小爱同学温湿度传感器(成本八块左右)

    自己动手做一个小爱同学温湿度传感器 1.开发环境简介 2.开发思路 3.程序编写 (1)将点灯科技库文件和DHT11模块库文件导入Arduino的libraries文件夹. (2)下载点灯科技APP, ...

  7. 开关面板如何自己印字_如何自己动手做一个智能开关

    现在的智能家居这么火,对于想自己动手的小伙伴们来说,都想自己去做一些家里使用 的智设备.现在的中国不缺卖唱卖惨的,缺的是能动手创造一些能实际使用的而不是哗众取宠的人,天天喊着要反击外国技术封锁.那么我 ...

  8. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  9. 如何做一个简单的APP

    应研究生毕业论文章节所需,以及找工作方面所面临的技术需求,在学习了部分JAVA技术的基础下,决定自己动手做一个有应用背景的Application.写点博客记录下"所作所为",比手写 ...

最新文章

  1. 外贸网站制作 网页的宽度多少为合适
  2. 第十六届全国大学生智能车竞赛全部比赛胜利结束了
  3. CentOS下MongoDB的升级
  4. nginx_upsteam
  5. ifix虚拟服务器,ifix的客户端和服务器
  6. 信息学奥赛一本通(2041:【例5.9】新矩阵)
  7. 智能文档分析:NLP和OCR的融合技术
  8. Ubuntu12.04 安装(无法将 grub-efi 软件包安装到/target/中,如果没有 GRUB 启动引导期,所安装的系统无法启动)...
  9. SQL Server中的bcp实用工具(批量复制程序)简介
  10. VUE使用lodop实现前端打印页面指定内容
  11. 恒温箱温度计算机控制系统仿真,实验用恒温箱控制系统设计及其模型建立
  12. vant-ui 有赞ui官网打不开?
  13. SheetJS xlsx js库入门使用
  14. [敛火成丹]Win11Dev-25236.1010专业工作站版-微调
  15. Android代号、版本、API版本号
  16. sudo,,sudo-i ,,su的区别
  17. anna 跨域_认识anna morgiel的Android初级软件工程师和热情的社区组织者
  18. 第07篇 部署区块链浏览器(2)
  19. Linux文件压缩/解压缩命令7za(处理.7z等文件)使用攻略
  20. windows7图形界面远程centos6.5

热门文章

  1. python立体匹配误匹配率_立体匹配算法(Stereo Matching)及其在OpenCV中的应用
  2. linux 文件乱码_RedHatlinux系统虚机启动后/etc/fstab中的文件系统未能挂载上
  3. python基于经纬度距离汇聚点_python实现两个经纬度点之间的距离和方位角
  4. 7个有用的JavaScript技巧
  5. 服务器查看文件共享记录,服务器共享文件记录
  6. java的oracle事务回滚_Oracle事务处理
  7. python控件随窗口变化而适配_python pyqt5 设置控件随窗体拉伸
  8. Proxy 简答实现 ViewModel 和 View
  9. linux根目录数量限制,windows,linux文件夹下文件上限最大个数
  10. 重庆市南川隆化职业学校计算机,重庆市第十三届中等职业学校职业技能大赛“web前端开发”赛项在南川隆化职中举行...