美文网首页iOS实践
Tweak打包dylib注入ipa重签名安装到未越狱手机上

Tweak打包dylib注入ipa重签名安装到未越狱手机上

作者: YxYYxY | 来源:发表于2017-04-14 14:15 被阅读554次

Tweak打包dylib注入ipa重签名安装到未越狱手机上

在我上一篇文章第一次写Tweak,走进iOS逆向的世界中,我写了个很简单的Tweak,当然,越狱手机直接安装deb就行了,就可以使用了,但是,最终的目的是需要让未越狱的手机也能装上,这就涉及到了注入dylib和重签名的东西,我也是踩了无数的坑,总算爬出来了,然后写了这篇教程!

找到dylib

当我们成功make package后,在tweak目录下,packages文件夹里是我们打包出来的deb文件,可以直接安装到越狱手机上.而要注入到ipa里是需要用到dylib文件的,而这个文件就在我们创建的Tweak的目录下的隐藏文件夹里,路径如下图


最后有2个文件夹,arm64armv7,下面那个dylib其实已经包含了上面那2种架构了,所以直接用下面那个dylib即可

处理我们需要的文件

libsubstrate.dylib文件,由于Tweak开发都是依赖CydiaSubstrate来注入的,但是这个只有在越狱手机上有,未越狱的手机上是没有这个的,所以我们需要处理一下,这个文件在越狱手机上有,github上也有,其实theos安装的时候电脑上就自带了一个这个文件

  • 证书配置文件


    将其命名为embedded.mobileprovision
  • entitlements.plist文件,不处理这个会导致你签名后也无法安装到未越狱手机上(越狱手机可以安装,所以这是个大坑)
    这个文件是根据配置文件来生成的
    分别运行以下2条命令

security cms -D -i "extracted/Payload/$APPLICATION/embedded.mobileprovision" > t_entitlements_full.plist
/usr/libexec/PlistBuddy -x -c 'Print:Entitlements' t_entitlements_full.plist > t_entitlements.plist

将第一条命令中""的部分改成你配置文件的路径,然后会在当然目录下出现2个文件,一个是t_entitlements_full.plist,另一个是t_entitlements.plist,将t_entitlements.plist改名为entitlements.plist

  • 解压后的.app文件,这个就是没有签名的ipa解压后的.app文件

好了,我们需要处理的文件就大致是上面这些,当然还要安装一些注入工具之类的,例如optool或者yololib这些之类的,因为我之前就安装了,也没办法再截图了,大家直接github上搜索一下就能找到了

开始处理dylib

  • 首先查看一下我们的dylib的依赖项
    otool -L xxx.dylib

    可以清楚的看到,除了我红框中的CydiaSubstrate,其余都是系统的库,上面说到了,因为未越狱的手机上是没有CydiaSubstrate库的,我们要将其依赖路径修改为libsubstrate.dylib
    命令如下
install_name_tool -change /Library/Frameworks/CydiaSubstrate.framework/CydiaSubstrate @loader_path/libsubstrate.dylib xxx.dylib

这里需要注意一点,-change后面跟的路径就是我上图红框中的路径,因为有的人用otool查看的路径可能是/usr/lib/libsubstrate.dylib,那就把-change后的路径改为/usr/lib/libsubstrate.dylib即可,最后的xxx.dylib是绝对路径,我直接省略了,可以直接看图


第一个框中是命令,运行后是没有任何输出的
然后使用otool -L看一下我们的依赖项路径是否已经修改了,上图的第二个和第三个框中就可以看到我们的依赖项路径已经修改掉了

使用 optool 把 xxx.dylib 注入到二进制文件中:

install -c load -p "@executable_path/xxx.dylib" -t xxx/Payload/xxx.app/xxx

准备所有的文件

经过上面的步骤,我们把所有文件都放到一个文件夹中,文件应该有5个,如图


Payload/xxx.app右键显示包内容,将xxx.dyliblibsubstrate.dylib放进去

开始签名

这里也有坑,网上很多教程说直接签名就行了,很少有说到要对dylib也签名的,导致我装在手机上打开也是闪退,都是通过系统日志才找到的原因(稍后说到)

网上有很多神马一键签名啥的,我也基本上都用过了,感觉还是用codesign好一些!首先cd到我们放5个文件的那个文件夹里开始进行签名

1、对entitlement签名

codesign -f -s "iPhone Developer: xxx (xxx)" --entitlements entitlements.plist  Payload/xxx.app

将iPhone Developer: xxx (xxx)换成你自己的,这里我带了个-f参数,codesign会自动用你选择的签名替换掉已存在的那个签名(我这里的其实是去除签名的),反正带上没坏处吧!出现replacing existing signature就签名成功了.

2、对2个dylib进行签名

  • 命令和上面一样,直接后面换成dylib的路径(注意是2个dylib,下面这个命令要运行2次,2个dylib分别运行一次)
codesign -f -s 'iPhone Developer: xxx (xxx)' /Users/jj/Desktop/deb/33/Payload/xxx.app/xxx.dylib

3、打包ipa

  • zip -qr app-resigned.ipa Payload/运行后会在当前目录下出现打包好的ipa,名为app-resigned.ipa

介绍一下自动打包工具吧iReSign,用这个也可以.

安装

经过上面的步骤,我们已经得到了重签名后的ipa了,接下来就可以用pp助手、iTunes等工具安装到手机上了(前提是你的证书中有加入你要安装的手机的UDID才能安装),也可以直接上传到蒲公英等分发平台给别人下载了!

虽然看起来步骤不多,但是其中的坑真的很多,希望大家能在这条路上少踩点坑,以上只是我自己的做法,别人可能会有更简单或者更好用的方法,我的方法仅供参考,文中如有错误还忘大家指正!

相关文章

  • Tweak打包dylib注入ipa重签名安装到未越狱手机上

    Tweak打包dylib注入ipa重签名安装到未越狱手机上 在我上一篇文章第一次写Tweak,走进iOS逆向的世界...

  • iOS 逆向工程 [三]

    dylib动态库注入和重签名打包 make package 先找到之前的tweak文件,进行make packag...

  • iOS App重签名

    一、手动重签名: 我们将通过手动打包、手动安装的方式,把一个越狱的App安装到手机上。前提:下载一个越狱的ipa包...

  • iOS逆向实操笔记9-注入插件&重签名

    当我们在越狱手机上hook了别的app后,自然也想装到自己未越狱的手机上用,那么这时候就需要注入插件以及重签名ap...

  • iOS重签名

    重组 IPA (打包再签名) - 窥打包签名流程 iOS数字签名及ipa重签名 ipa重签名的四种方式 ios 企...

  • iOS逆向-ipa包重签名及非越狱手机安装多个微信

    iOS逆向-ipa包重签名及非越狱手机安装多个微信 iOS逆向-ipa包重签名及非越狱手机安装多个微信

  • 四 代码注入

    在上一篇文章中,在上一篇文章中,我们讲了iOS应用重签名技术,同时我们也把微信的越狱ipa包安装到了我们的手机上了...

  • ipa稳定签名企业证书,不需越狱就可安装

    ipa稳定签名企业证书,不需越狱就可安装 如果你想把一个ipa文件安装到自己的手机上(别人发你的或者从第三方商店下...

  • iOS - 重签名

    重签名 如果希望将破坏了签名的安装包,安装到非越狱的手机上,需要对安装包进行重签名的操作.注意: 安装包中的可执行...

  • iOS 重签名

    重签名 如果希望将破坏了签名的安装包,安装到非越狱的手机上,需要对安装包进行重签名操作 安装包中的可执行文件必须是...

网友评论

  • 天下林子:我的debug里面什么都没有,请问下大神,是什么情况
  • bbf4b3b9fd7c:大神,安装的时候出现 A signed resource has been added, modified, or deleted
    bbf4b3b9fd7c:@YxYYxY 搞定了,帖子里面少了东西了insert_dylib注入啊
    YxYYxY:@Swtzz 你好,上班我抽空看一下,希望能帮你解决!

本文标题:Tweak打包dylib注入ipa重签名安装到未越狱手机上

本文链接:https://www.haomeiwen.com/subject/envwattx.html