【摘录】之前在进行iOS测试过程中由于要获取一定数据信息,因此需要对原本的安装包进行代码注入并且重新打包安装,因此就需要使用重签名策略,在此进行分享,希望大家可以使用其中的方法来运用到自身的项目中。

 工具:

  MachOview 查看 进制 Mach-O 文件

  yololib Mach-O 文件注入

 步骤:

  首先,对所需砸壳 ipa 利用Clutch 利用越狱设备砸壳

  下载后拷贝到越狱设备 /usr/bin/ 内

  通过 ssh 或者 mobileterminal 等进入命令行模式

  直接调用 Clutch命令

  Usage: Clutch-2.0.4[OPTIONS]

  -b --binary-dump <value> Only dump binary files from specified     bundleID

  -d --dump <value> Dump specified bundleID into .ipa file

  -i --print-installed Print installed applications

  --clean Clean /var/tmp/clutch directory

  --version Display version and exit

  -? --help Display this help and exit

  -n --no-color Print with colors disabled

  其次,我们将制作好的framework注入到输入法的二进制文件,方法如下:

  yololib XXXXXXXXXX XXXXX.framework/XXXXX

  注入这串代码后我们可以通过MachOView查看该二进制文件,如果在Load Commands中查看到存在刚刚注入的framework,则证明该注入成功,如下图所示:

 
IPA的动态库注入+企业重签名过程-LMLPHP

  最后,我们就需要对二进制文件以及framework进行重签名,具体方法如下:

  重签名打包

  // 查看是否加密

  otool -l XXX | grep crypt

  // 查看可签名证书

  security find-identity -p codesigning -v

  // 导出 entitlements

  security cms -D -i AwesomeRepackaging.mobileprovision > profile.plist

  /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' profile.plist > entitlem

  ents.plist

  // 对注入的 framework和原?进制文件签名

  codesign --entitlements entitlements.plist -f -s #your identity#TYActions.f

  ramework/TYActions

  codesign --entitlements entitlements.plist -f -s #your identity# SogouInput

  // 打包

  xcrun -sdk iphoneos PackageApplication -v ~/Desktop/tySogou/SogouInput.app-

  o ~/Desktop/SogouInput.ipa

  // 安装

  ideviceinstaller -i ~/Desktop/SogouInput.ipa

  // 查看签名信息

  codesign -vv -d Example.app

  // 查看完整性

  codesign --verify Example.app

 注意:

  1. 通过 mobileprovision 文件导出对应的 entitlements.plist,并将二者拷贝到对应的目录下

  2. 目录下的每个文件需要用对应的证书单独签名,包含的 Framework 也用其证书签名

  3. 用主文件的证书对主文件及Frameworks目录下的所有文件进行重签名

  4. 我们需要确保在 Info.plist 中的 BundleID 是否跟我们的描述文件里面指定的一致。因为在重签的过程中, codesign会检查我们的Info.plist 文件里面的 Bundle ID,如果不匹配则会返回一个错误值。

  5. 除了需要对app中的info.plist更改Bundle ID, 还需要对重签名的插件中的info.plist 也更改符合的Bundle ID

  6. embedded.mobileprovision 还要从中导出entitlements.plist

  codesign 签名时 需要用 --entitlements entitlements.plist 附加参数进行签名

  7. 重新签名整个 app下的所有二进制文件

 总结:

  重签名整个过程非常的繁琐,不仅包含上述的步骤,还需要我们进行证书的申请,证书安装等过程,这些在这里都没有进行介绍,如果大家感兴趣可以去查找相关资料。注入+重签名往往可以让我们在获得更多的权限同时也不再完全依赖于越狱环境。这也使得该方法变得更加稳定和长久。

附录:几个工具顺便发下:

class-dump : https://pan.baidu.com/s/1bJI-p9QOFTKlOzB1Hx_L4A 提取码: e3cj

yololib : https://pan.baidu.com/s/1v3EzmZwJ4MI0dg2i9l1zXg 提取码: 8198

IPA注入动态库 + 企业签包工具 : https://pan.baidu.com/s/1CY79tX58jYVooWiD0LcgSw 提取码: w7tq

MachOView : https://pan.baidu.com/s/1Xfei2zaB-yuVlK73bQhdvg 提取码: 6dt9

05-26 08:15