前言
在nPlayer Lite去广告中,我们聊到可以在越狱手机上,使用插件开发的形式,清除app中的广告。那么,怎么样才能将编写的插件提取,和项目一起打包,然后在非越狱手机上运行呢?
准备工作
1.对nPlayer程序进行脱壳
脱壳后的cryptid之前已经写过一篇脱壳文章,这里就不阐述了。
2.获取授权文件
当我们改动项目后,我们需要对项目重新签名并打包。因此,我们需要获取苹果官方提供的授权文件(免费的是没法重签名的)。我们可以在apple developer中下载用来重签名的. mobileprovision
文件。或者,使用xcode编写一个项目,然后在生成的生成的.app中,获取embedded.mobileprovision
文件。
可以使用Debug或者Release配置描述证书,我这边为了方便测试,使用的是Debug环境 获取描述文件
3.下载insert_dylib
使用tweak创建的插件(动态库),都是独立于nPlayer程序。插件是通过Cydia中的Cydia Substrate
程序,将动态库和nPlayer绑定到一起。但是我们知道,真机是没有Cydia软件的,因此,我们需要将生成的插件,注入到项目中。
下载后,将insert_dylib
编译后的mach-o文件,拖拽到/usr/local/bin/
目录下,目的是方便在终端中直接敲出
insert_dylib
命令
4.下载ios-app-signer
在我们破坏原来的文件内容后,如果需要打包到真机设备上的,都是需要重新签名。ios-app-signer
是一款开源的图形化签名工具,非常使用方便。
下载源码后,使用xcode打开。然后在编译之前选择编译的环境为Release
,之后就可以生成一个用于签名打包的app。
当然,也可以不使用
Release
,这就像iOS开发的时候做选择.
开始编译
1.获取.app
文件
- 在脱壳的时候如果使用的是
Clutch
,直接解压就可以获得.app
文件。 - 如果使用
dumpdecrypted
工具进行脱壳,首先需要将iPhone上的app
安装目录拖拽到Mac本地,并且使用脱壳后的mach-o文件,替换未脱壳的mach-o文件。
获取nPlayer安装目录
保存.app文件到本地
将上面获得的embedded.mobileprovision
文件放入到.app文件夹中,方便签名工具的打包。
2.找到使用tweak编写的动态库
获取动态库将
tweakplayer.dylib
文件拖拽到需要打包的.app
中
3.在nPlayer中插入动态库
如果需要nPlayer mach-o文件,在执行的时候,执行tweak编写的动态库,就需要将tweakplayer.dylib
插入到nPlayer mach-o文件中。
- @executable_path:代表当前可执行文件所在的目录
- --weak:表示如果当前动态库不存在,程序运行的时候也不崩溃
- --all-yes:表示需要输入是否确定的时候一直输入yes
使用otool -L nPlayer
或者MachOView中,我们可以查看是否插入成功
在MachOView下的Load Commonds下查看:
MachOView查看
4.修改tweakplayer所需要依赖库的路径
我们在上面插入了tweakplayer.dylib
后,需要确认,tweakplayer.dylib
是否需要除了系统之外的mach-o文件
可以发现,tweakplayer动态库需要使用Cydia提供的CydiaSubstrate
。这也是我前面提到在越狱手机上,用来联系动态库和应用程序之前的桥梁。所以,我们需要将CydiaSubstrate拖拽到应用程序(.app)中,并将tweakplayer动态库所需要的mach-o文件修改为当前动态库所在的路径。
5.修改tweakplayer依赖库路径
使用install_name_tool -change 原始路径 修改路径 mach-o文件
打包并运行ipa
在上面步骤中,我们已经将embedded.mobileprovision
文件放入到.app
文件夹中。因此,我们可以使用ios-app-signer
将程序重新签名打包,这样就会生成一个ipa
文件
使用pp助手,或者iFunBox将
ipa
文件安装到本地
备注
因为我是使用DEBUG开发测试环境,所以在动态库签名这里省略了,如果是正式环境,请使用如下步骤:
签名打包
// 查看可用证书
security find-identity -v -p codesigning
// 进行签名
codesign -fs 证书ID xxx.dylib
网友评论