安装brew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

使用brew安装 ldid

brew install ldid

添加环境变量

 open ~/.zshrc

注意,mac新版系统环境变量不再是~/.bash_profile

在文件里添加一行,新建环境变量THEOS,让这个变量等于你硬盘下存储theos的文件路径,例如我存到下面的路径里,PATH是把theos安装文件夹下的bin当做默认可执行目录,在任意位置都能执行theos文件夹下bin下的文件,
因为这个bin目录下的nic.pl会创建文件到bin目录下,并且bin目录下不允许用nic.pl创建文件,所以要把bin目录添加的PATH环境变量,这样就可以在其他文件夹下执行bin下的文件nic.pl了

export THEOS=/Volumes/SN7501T/越狱相关代码/theos
export PATH=$THEOS/bin:$PATH
冒号:$PATH是引用以前的PATH值,冒号是添加
把冒号左边的添加到PATH里面,如果不加:$PATH,就会把$PATH覆盖

让文件~/.zshrc生效

source ~/.zshrc

安装 theos

使用递归下载 git clone --recursive加github地址 加刚才的环境变量$THEOS,把theos 下载到你的硬盘上

 git clone --recursive  git@github.com:theos/theos.git $THEOS

如果递归安装报错 443 没有权限下载,请查看我写的这篇文章,可以帮你分开下载子模块

git clone --recursive递归下载github出现443子模块无权限下载的解决方法
安装完以后,因为上面设置了环境变量$PATH,所以现在在任何目录下,都可以执行nic.pl指令,注意这个指令不要再theos文件夹下执行

新建theos项目

安装好以后执行在任意目录下执行.theos/bin目录下不能执行这条命令,会提示在你其他目录新建项目

nic.pl

出现下面界面代表已经安装成功
在这里插入图片描述

usb ssh登录手机root账户

运行要hook的app ,例如下面这个app neteasemusic

cycript -p neteasemusic

获取app的bundleID

[NSBundle mainBundle].bundleIdentifier

获得id :com.netease.cloudmusic

执行theos指令nic.pl

在mac端新建一个文件夹,在里面输入命令

nic.pl

会列出一个列表

tdw@tdwdeMini-m1 hook % 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):

hook功能选择tweek

选择 iphone/tweak的位置 输入16

Project Name (required): 是自己起的项目名: music
Package Name 是你自己起的bundle名字
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: 这个输入上面用cycript获取的要破解的app的bundleID
下面的都输入回车就行了,显示如下,出现Done.代表新建项目完成

Project Name (required): music //自己起的项目名
Package Name [com.yourcompany.music]: com.tdw.music //自己起的包名
Author/Maintainer Name [谭迪文]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.netease.cloudmusic //app原来的bundle ID
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:
Instantiating iphone/tweak in music/...
Done.

建立好以后这个文件夹是这样出来4个文件,如下图:
在这里插入图片描述

设置hook文件

设置makefile文件

用Sublime Text打开Makefile文件,添加2个环境变量,因为用usb链接的,所以就填写localhost的本机ip:127.0.0.1 ,端口是usb映射的端口,我映射的是20000

export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=20000

在这里插入图片描述
也可以把这两行添加到环境变量里,这样就不需要每次makefile都添加这2行了

open ~/.zshrc

然后再里面添加这2行,再让文件生效

source ~/.zshrc

修改
打开Tweak.x文件,把里面开头结尾的注释符号手动去掉,然后选择objective-C查看文件,如下图
在这里插入图片描述
在这里插入图片描述

使用frida脱壳app

我写的这篇文章内容详细写了如何脱壳
ios脱壳工具frida使用教程和各种踩坑总结(app store可用脱壳)
是否需要脱壳,请直接查看上面这篇文章最下面,使用otool macho-文件名 -l | grep crypt 指令查看app是否加密
使用frida之后会在frida-ios-dump-master文件夹下获得.ipa文件如下图:
把.ipa文件重命名为.zip文件,然后解压缩,如下图
在这里插入图片描述
在解压缩之后的文件夹下会找到脱壳后的包.
用终端进入这个包的目录,执行命令

class-dump -H 包名 -o 导出目录名

例如:
class-dump -H neteasemusic -o headers

使用frida脱壳成功以后获得脱壳后使用class-dump导出.h头文件

我在下面这篇文章中写了如何使用class-dump导出.h文件
ios逆向工具Class-dump的安装和导出.h文件的教程
执行class-dump后,会在包的目录下找到,我们导出的目录headers,里面有这个app的.h头文件,如下图:
在这里插入图片描述

使用Reveal 定位要改的视图class名字

reveal的使用教程请查看我写的下面这篇文章
ios逆向视图查看器Reveal安装和使用教程
例如,我要改的视图是这个class: NMHomeBannerEntityCell
在这里插入图片描述
我把上面用class-dump导出的.h文件中找到这个.h文件,把所有.h文件的文件夹拖拽进Sublime Text中,然后command+p,搜索:NMHomeBannerEntityCell.
查找到NMHomeBannerEntityCell.h文件
在里面,找到,我要改的方法,例如我修改init方法

- (id)initWithFrame:(struct CGRect)arg1;

我把,类名NMDiscoveryBannerView,复制进theos创建的Tweak.x文件中的%hook 后面,代表要hook的class名,删掉文件中的其他方法,再复制刚才.h文件中要改的方法名,在这个方法名,写入你自己要修改的方法.我在下面方法里面添加一个红色的view,在里面加了一个label文字

%hook NMDiscoveryBannerView
- (id)initWithFrame:(struct CGRect)arg1{
	return nil;
}
%end

把hook代码写入带app中

确保此时 usb连接越狱手机的root账户没有断开,如果断开重新连接
.在mac上theos创建的Makefile文件所在的项目文件夹下,终端执行 make编译文件

make

执行生成deb包的指令make package包含了 make的编译操作,所以第一步make可以省略

 make package

安装到手机中

make install

会提示是否安装输入yes
安装完以后会在手机目录下出现两个文件,文件名字就是你起的项目名,例如下图用ifunbox查看多了2个文件:
Device/Library/MobileSubstrate/DynamicLibraries
music.dylib
music.plist
在这里插入图片描述
每次启动app都会加载这2个文件,执行自己hook代码代替原来app的方法

把上面的编译安装操作编写成sh脚本

make clean是清除之前编译结果,要不然如果代码没改变,就不会重新编译.
把下面的代码存入到 .sh文件中,例如保存成:theos.sh
debug 版本

make clean && make package && make install

release 版本

make clean && make package debug=0 && make install

然后把这个theos.sh的文件所在路径添加到环境变量中,就可以在任何地方执行这个theos.sh文件

添加环境变量的方法:

open ~/.zshrc

然后在里面添加一行,例如theos.sh文件的所在位置是JailBreak

export PATH="JailBreak:$PATH"

然后让.zshrc文件生效

source ~/.zshrc

删除掉hook代码

删掉 手机目录 Device/Library/MobileSubstrate/DynamicLibraries 下面的上面2个文件,启动app的时候就不会加载hook代码,而是变成默认的app

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐