iOS逆向-重签名

请注意,本文编写于 369 天前,最后修改于 191 天前,其中某些信息可能已经过时。

基本操作

前提

我们进行重签名的app必须是已经脱壳的。

codesign签名

使用codesign命令对app进行重签名。

codesign
codesign

使用codesign -fs 证书id --entitlements entitlements.plist app包

获取证书id:

security find-identity -v -p codesigning

证书id
证书id

找到需要的证书id

mobileprovision文件

通常我们的app包中包含下面内容:

app包
app包

所以我们需要准备一个embedded.mobileprovision 文件,这个文件要求必须由付费证书产生,并且appid和device必须匹配。 这个证书可以通过Xcode生成,然后在编译后的app包中找到,也可以到apple开发者证书网站下载。放到.app包中。

entitlements文件

通过iOS签名机制可以知道entitlements文件存在于mobileprivision文件中,所以entitlements.plist就可以从mobileprovision中提取。
security cms -D -i embedded.mobileprovision > temp.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' temp.plist > entitlements.plist

权限文件
权限文件

temp.plist是中间生成可以直接删掉,将entitlements.plist放到.app同级目录中。执行codesigin命令进行签名

codesign命令
codesign命令

对动态库进行签名

我们tweak开发的插件就是一个dylib动态库,他存在于手机的/Device/Library/MobileSubstrate/DynamicLibraries目录中。动态库是通过dyld进行加载的,当我们需要打包将开发的插件一起安装到其他未越狱的手机中的时候,则需要将它放入.app包中。主要就是要插入到Mach-O文件中。

Mach-O文件中加载的动态库
Mach-O文件中加载的动态库

需要使用insert_dylib将动态库插入到Mach-O文件的Load command中。但是并不能直接插入到LC_LOAD_DYLIB后面,因为它后面还有其他的东西,如果直接插入到它后面就会使后面东西的内存移动,所以要在Load Command后面插入我们的动态库。

Load Command
Load Command

insert_dylib的本质就是往Mach-O文件的Load Commands中添加一个LC_LOAD_DYLIB或者LC_LOAD_WEAK_DYLIB。使用—weak 参数可以保证即使找不到动态库也不会报错,会生成LC_LOAD_WEAK_DYLIB。 —all-yes参数能保证insert_dylib命令后面的所有选项都是yes。

insert_dylib命令
insert_dylib命令

执行insert_dylib命令
执行insert_dylib命令

注入动态库之后的Mach-O文件
注入动态库之后的Mach-O文件

注:@executable_path 代表可执行文件所在的目录

动态库的依赖库

通常情况下动态库还有其他的依赖库,尤其是逆向开发的插件通常依赖于其他的非系统动态库。例如开发tweak插件中就有CydiaSubstrate动态库,这个动态库也需要进行重签名。我们可以使用otool命令查看动态库的依赖库otool -L Mach-O文件。因为主流的设备都是arm64位的了,通常主要关注arm64的即可。

动态库的依赖库
动态库的依赖库

也需要将这个动态库放到.app子目录下,让需要依赖它的动态库在这个目录下找到它。当然,为了实现这一效果,还要将需要依赖它动态库中的目录更改成现在的目录。使用install_name_tool -change 旧地址 新地址 Mach-O文件

更换动态库加载地址
更换动态库加载地址

使用otool查看动态库中的依赖库
使用otool查看动态库中的依赖库

注:环境变量@loader_path 代表动态库所在的地址

依然使用codesign命令对动态库进行重签名,不需要在添加entitlements文件。

对动态库签名
对动态库签名

使用GUI工具

App-signer进行重签名。下载编译成.app,打开选择.app和证书即可。

注:.app中需要添加.mobileprovison文件,动态库 和 其依赖库都需要各自使用codesign进行重签名 不能使用GUI工具

App signer工具
App signer工具

点击start 选择保存目录就会在目录中生成一个.ipa包。

选择保存目录
选择保存目录

笔记来自 www.520it.com 小码哥iOS逆向

Comments

添加新评论