应用重签名

在了解iOS的签名机制的基础上,尝试对iOS砸壳应用进行重签名.

准备

  • 使用PP助手下载一个砸过壳的应用,这里用QQ做说明;
  • 了解codesign, security等命令的使用.

开始

  • 使用unzip命令将得到的ipa包进行解压(也可以将后缀名改为.zip直接解压)
#解压到当前的QQ路径中
unzip QQ-8.1.5\(越狱应用\).zip -d QQ
  • 查看可执行文件是否加密
#首先进入QQ/Payload/QQ.app
otool -l QQ | grep "cryptid"

输出

#之所以会输出两个是因为该elf可执行文件包含了两个架构指令集(可以使用lipo -info查看)
cryptid 0
cryptid 0

只有cryptid为0,说明可执行文件没有加密才可以重签名.

  • 删除文件中不能签名的自定义插件
#首先进入QQ/Payload/QQ.app目录
#1. 删除Plugins目录
rm -rf plugIns
#2. 删除Watch目录,包含有插件
rm -rf Watch
  • 对应用中的frameworks进行重签名

#1.查找本机上的可使用开发证书

在Xcode中,查看应用签名所使用的证书teamID(圈圈中的部分)

 

security find-identity -v -p codesigning | grep "D2J66XK43R"


#在可用列表中选择一个,例如:

certificate="Apple Development: xxxx@yyyy.com.cn (D2J66XK43R)"

#2. 使用该证书对QQ/Payload/QQ.app/Frameworks中的.framework逐个进行签名

codesign -fs $certificate xxxxxxx.framework

 

  • 添加.mobileprovision文件,并创建ent.plist文件.

#1. 创建一个新的项目,例如myQQDemo,工程的bundle identifier为com.recodesign.myQQDemo;

#2. 将新创建的项目进行编译,生成myQQDemo.app,通过"显示包内容"打开myQQDemo.app,找到embedded.mobileprovision文件,将该文件拷贝到在QQ.app中;

 

#3. 使用以下命令查看描述文件信息;

# 使用以下命令查看描述文件信息;
security cmd -Di embedded.mobileprovision

#4. 将embedded.mobileprovision文件中Entitlements对应的属性字典拷贝出来,并保存为一个新的ent.plist文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<!--
   ent.plist
   myQQDemo

   Created by Ericydong on 2019/10/17.
   Copyright (c) 2019 Ericydong. All rights reserved.
-->
<plist version="1.0">
    <dict>
        <key>application-identifier</key>
        <string>6JR32T9222.*</string>
        <key>keychain-access-groups</key>
        <array>
            <string>6JR32T9222.*</string>
        </array>
        <key>get-task-allow</key>
        <true/>
        <key>com.apple.developer.team-identifier</key>
        <string>6JR32T9222</string>
        
    </dict>
</plist>
  • 修改QQ.app/Info.plist中bundle identifier为新建项目的bundle identifier;

#在QQ.app/Info.plist中修改CFBundleIdentifier为新创建项目的bundleid:com.recodesign.myQQDemo.

 

  • 使用权限属性字典给.app包签名

codesign -fs $certificate QQ.app --entitlements=ent.plist 

 

  • 将Payload文件夹压缩打包,生成QQ.ipa文件;
zip -ry QQ.ipa Payload
  • 使用Xcode安装签名后的应用.

打开Xcode,选择Window-->Devices and Simulators,在 INSTALLED APPS 底部选择+,然后选择新生成的QQ.ipa.不出意外的话,就可以看到手机上新安装的QQ.

登陆报错

完成以上步骤,忍不住激动的心情想要想要登陆一下,然后就:

这是由于QQ开启了bundle id的校验,导致新生的bundle id不能通过验证.只要通过注入代码修改应用内获取bundle identifier的方法,让应用内部获取到QQ原始的应用bundle identifier就可以了.具体的实现下一篇文章 代码注入 里中再具体讨论,敬请关注.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值