教你动手做一个 iOS 越狱 app

前言

俗话说得好, 万事开头难. 仅仅是上图一个如此简单地不能再简单的小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 [email protected]你的手机的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!

时间: 2024-08-10 02:10:45

教你动手做一个 iOS 越狱 app的相关文章

如何做一个iOS分形App

如何做一个iOS分形App 原文链接 : 如何做一个iOS分形App 原文作者 : Silviu Pop 译文出自 : 开发技术前线 www.devtf.cn 译者 : alier1226 校对者: MrLoong 状态 : 完成 介绍 在这个教程中,我们会做一个可以渲染Mandelbrot Set的应用程序,我们可以缩放和平铺它来看分形那令人惊叹的复杂之美.最终的结果如下: 着色程序的代码 void main() { #define iterations 128 vec2 position =

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

前言 从零开始,手把手带你实现一个「专注睡前的 APP」.睡觉之前如果能有一个 APP,能让我们写一写这一天的见闻或者心得,同时又能看一会段子.瞄一会好看的妹子,放松一下疲惫的身心那该多好,这也是我完成这个 APP 的原因.APP 的全部代码我已经分享到?Github?上了,需要的直接 点击这里,如果喜欢的话,麻烦给个 star,谢谢啦. 本文为这一系列文章的总述,如果觉得篇幅过长,请点击下面的连接 手把手教你从零开始做一个好看的 APP - Day one 手把手教你从零开始做一个好看的 AP

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

说明 缘由 严重声明 概念 越狱的原理 iOS 目录层级结构 iOS 程序类型 准备工作 硬件设备 辅助软件 Mac 需要的工具 iOS 需要使用的辅助开发工具 逆向过程 静态分析 给App砸壳 使用IDA静态分析 动态调试 iOS 工程目录 制作Tweak Tweak 是什么 了解 Theos 安装iOSOpenDev 制作App App和Tweak通信交换数据 App如何加载Tweak App如何和Tweak 交互传输数据 打包安装 整理目录结构 执行打包命令 安装验证 发布App 总结 常

自己动手做一个小型“资源管理器”吧

自己动手做一个小型“资源管理器”吧 注:tvDirectory是treeView控件,lvDirectory是listView控件 首先搭建一下界面: 左边是treeView控件,右边是listView控件.(listView的网格线只需把GridLins设置成True就可以了.) 由于要用到IO流,所以别忘了导入命名空间:using System.IO; 我们只要创建一个文件类就可以了: 1 public class MyFile 2 { 3 //文件长度 4 public float Fil

从零开始学会做一个简单的APP

本人是矿大学信息安全的大三狗,混了两年日子之后幡然醒悟决定做些自己早就想做的事情,学校的联通宽带是按时长收费的,但是每次查询已用时长和所扣费用步骤都十分的繁琐,大二的时候都想着要自己做一个APP来帮助大家减少这些繁琐的步骤,终于拖了半年多才开始做.从只有一点Java基础到最后做出来可用的APP只用了一个星期的时间,以下是干货内容.(其实我就是想来求红包的!如果能拿到红包那就是我学计算机挣来的第一桶金了!) 我们最先要上的是成果图,还有在学校发的帖子:http://tieba.baidu.com/

怎样做一个iOS App的启动分层引导动画?

一. 为什么要写这篇文章? 这是一个很古老的话题,从两年前新浪微博开始使用多层动画制作iOS App的启动引导页让人眼前一亮(当然,微博是不是历史第一个这个问题值得商榷)之后,各种类型的引导页层出不穷,到如今,github上也有了各种的成型的library存在供选择,同时不少app也已经慢慢的开始返璞归真回归单一静态引导页.虽然时尚的潮流不停的在变化,但是我一直在思索,这种多图层的启动引导动画到底是什么个结构?实现起来究竟有多难?本文,将试图探寻这个话题. 二. 我们要做成什么样子的? 首先定下

自己动手做一个adb的wifi连接apk

前言 估计搞安卓开发的小伙伴们都放弃了eclipse的开发转战android studio了吧,现在gradle都3.0 buiild都24.0.2了以后 都不再支持2.2及以下的版本了.eclipse的同学快上车. 上面的都不是重点,每当你大清早起来去公司上班,然后打开电脑发现你的usb线没有带,作为一个安卓程序员的你有点尴尬了. 然后你果断的给android studio装上ADB WIFI插件,哈哈,事实证明你还是相当的机智,然后你会面临另外一个尴尬(蛋疼).你使用时会出现如图: 你会蛋微

自己动手写一个iOS 网络请求库的三部曲[转]

代码示例:https://github.com/johnlui/Swift-On-iOS/blob/master/BuildYourHTTPRequestLibrary 开源项目:Pitaya,适合大文件上传的 HTTP 请求库:https://github.com/johnlui/Pitaya 本系列文章中,我们将尝试使用 NSURLSession 技术构建一个自己的网络请求库. NSURLSession 简介 NSURLSession 是 iOS7 引入的新网络请求接口,在 WWDC2013

自己动手做一个数据库-英文版

Readings in Databases A list of papers essential to understanding databases and building new data systems. The list is curated and maintained by Reynold Xin (@rxin). If you think a paper should be part of this list, please submit a pull request. It m