本文要达成如图效果,在一台iPhone上安装第二个微信:

准备:

  1. Xcode
  2. 微信ipa(可通过iTool进行下载)
  3. 重签名脚本

步骤

  1. 打开Xcode,新建Single View App项目,名字可以随意,这里就用Wechat吧。
  2. 工程根目录下新建文件夹,命名为APP,把ipa文件放入。
  3. 点击TARGETS-Wechat-Build Phases-New RunScript phasa
  4. 把以下脚本粘贴进上一步新建的Run Script
# ${SRCROOT} 它是工程文件所在的目录
TEMP_PATH="${SRCROOT}/Temp"
#资源文件夹
ASSETS_PATH="${SRCROOT}/APP"
#ipa包路径
TARGET_IPA_PATH="${ASSETS_PATH}/*.ipa"#新建Temp文件夹
rm -rf "${SRCROOT}/Temp"
mkdir -p "${SRCROOT}/Temp"#----------------------------------------
# 1. 解压IPA到Temp下
unzip -oqq "$TARGET_IPA_PATH" -d "$TEMP_PATH"
# 拿到解压的临时的APP的路径
TEMP_APP_PATH=$(set -- "$TEMP_PATH/Payload/"*.app;echo "$1")
# echo "路径是:$TEMP_APP_PATH"#----------------------------------------
# 2. 将解压出来的.app拷贝进入工程下
# BUILT_PRODUCTS_DIR 工程生成的APP包的路径
# TARGET_NAME target名称
TARGET_APP_PATH="$BUILT_PRODUCTS_DIR/$TARGET_NAME.app"
echo "app路径:$TARGET_APP_PATH"rm -rf "$TARGET_APP_PATH"
mkdir -p "$TARGET_APP_PATH"
cp -rf "$TEMP_APP_PATH/" "$TARGET_APP_PATH"#----------------------------------------
# 3. 删除extension和WatchAPP.个人证书没法签名Extention
rm -rf "$TARGET_APP_PATH/PlugIns"
rm -rf "$TARGET_APP_PATH/Watch"#----------------------------------------
# 4. 更新info.plist文件 CFBundleIdentifier
#  设置:"Set : KEY Value" "目标文件路径"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $PRODUCT_BUNDLE_IDENTIFIER" "$TARGET_APP_PATH/Info.plist"#----------------------------------------
# 5. 给MachO文件上执行权限
# 拿到MachO文件的路径
APP_BINARY=`plutil -convert xml1 -o - $TARGET_APP_PATH/Info.plist|grep -A1 Exec|tail -n1|cut -f2 -d\>|cut -f1 -d\<`
#上可执行权限
chmod +x "$TARGET_APP_PATH/$APP_BINARY"#----------------------------------------
# 6. 重签名第三方 FrameWorks
TARGET_APP_FRAMEWORKS_PATH="$TARGET_APP_PATH/Frameworks"
if [ -d "$TARGET_APP_FRAMEWORKS_PATH" ];
then
for FRAMEWORK in "$TARGET_APP_FRAMEWORKS_PATH/"*
do#签名
/usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" "$FRAMEWORK"
done
fi
  1. command+R运行项目到真机,即可把ipa安装到iPhone上,并且不会与iPhone原有的“正版”冲突。

至此,我们只花费几分钟,就实现了我们一开始说的效果。下面我们看下原理。

原理

在iOS逆向开发时需要把下载的ipa文件安装到iOS设备上,才能进行动态分析,才能更好的玩别人的App。但是有经验的同学是知道的,下载的ipa(AppStore 和自己发布的除外) 文件是不能直接安装到自己的iPhone (未越狱)上的。为什么?因为苹果作了一个比较复杂的加密—签名。那又有同学问了什么是签名呢?为什么要签名呢?来看看这里https://www.jianshu.com/p/6fa292eaabce。
为了把下载的ipa 安装到我们自己的iPhone 上要先对ipa 进行重签名。

常见的 ipa 重签名方式

  • 完全重签名
    证书,mobileprovision、Bundle ID 三者信息对应一致,这种重签名方式基本上与直接对代码进行签名的效果是一样的;
    优点:有效期长、稳定性高;
    缺点:维护成本较高,每一个重签名的ipa都必须修改Bundle ID 并且独享一套证书和mobileprovision文件;
    适用范围:对签名效果稳定性有要求的公司和团队;
  • 不完全重签名
    只保证证书和mobileprovision对应一致,至于这两者与原ipa的Bundle ID 等信息是否一致则不考虑;
    优点:看起来较方便维护;
    缺点:实际上并没有对原ipa的签名进行完全替换,很容易重签名失败,稳定性不高,多则一两个月,少则三五天就可能发生签名失效,需要重新签名,慎用!!
    适用范围:市面上出售企业证书进行重签名的个人卖家;

常见的 ipa 重签名工具

  • 终端 使用命令行
    需要记忆的命令比较多,步骤比较繁琐,效率比较低。但是显得逼格够高,装 X 利器。
  • MonkeyDev
    大牛写的工具插件,配置好就能直接用。效率比较高,跟自己创建新的Xcode 项目差不多。但是比较依赖工具,万一哪一天大牛不开心,不维护或者是需要收费了就比较尴尬
  • Xcode 自动化重签
    Xcode 简单易操作( 我就不信苹果爸爸会把Xcode 放弃或收费),可以达到类似MonKeyDev 的效果(想想自己可以写一个自动化重签的插件是不是也很牛X)。 前期需要写一些脚本可能会比较繁琐,但要是你脚本写的够好几乎是一劳永益的。以后直接拿来用就好了。

分析下脚本

从前面的步骤来看,我们的操作及其简单,因为很多工作我们已经用上面提供的脚本自动化完成了,我们不能仅满足于知其然,还需要知其所以然,下面我们分析下脚本到底做了什么事情(第2-8步)。

  1. 在Xcode 工程文件夹里边 创建一个APP 文件夹(用来存放需要重签的ipa 文件),
  2. 将ipa 文件解压到本地的Temp 文件夹里边
  3. 将解压出来的.app拷贝进入工程下工程生成的APP包的路径下并将名称命名为当前工程的名字(覆盖掉之前的.app文件)。
  4. 删除extension和WatchAPP文件。
  5. 更新info.plist文件 CFBundleIdentifier
  6. 给MachO文件上执行权限
  7. 重签名第三方 FrameWorks
  8. 执行签名命令

之所以第4步要将ipa 包中的 Extension 文件,是因为个人证书不能重签 Extension 文件,包括 Watch 里边的 Extension。因此我们需要直接把 Watch 文件删除。
以微信为例:

Watch

PlugIns

ipa 文件中的第三方 framework 需要我们手动重签。

Frameworks

第5步更新了 info.plist,是为了修改 CFBundleIdentifier
第6步要给MackO 文件更改了执行权限。

运行app后,我们利用Xcode查看微信的布局,也是一个不错的学习方法呢。

参考:
https://www.jianshu.com/p/1b5592ff285d
https://www.bilibili.com/video/av34261047/?spm_id_from=333.788.videocard.0

iOS逆向(1)——利用ipa重签名,3分钟iPhone安装多个微信相关推荐

  1. IOS苹果ipa重签名工具(苹果签名工具,ios签名工具,支持Windows系统和Macos系统)

    此款ios苹果ipa重签名工具支持windows系统和Macos系统,是一款完全免费的IPA签名工具,签名时需要用到p12证书文件和provision描述文件,可以使用ios企业证书.个人证书对IPA ...

  2. iOS ipa重签名 、resign

    iOS ipa重签名 (个人版.企业版APP均可) 下面是个人之前使用过的方式,介绍比较详细 注意: 在开始重签之前你先要有一个企业证书或者个人开发者证书(个人或者公司均可)(苹果开发证书) 重签名: ...

  3. 解决iOS版抖音破解重签名后无法安装

    解决iOS版抖音破解重签名后无法安装 回顾 上篇文章讲到 抖音9.8.1无法安装报错 DuplicateIdentifier 这个里更正下:版本为10.4.0 错误详细信息怎么查看 这里可以通过移动设 ...

  4. ipa重签名的四种方式

    个人分类: iOS逆向篇 文章转载至:https://blog.csdn.net/u012453582/article/details/80318143 一 开发者调试安装app到手机的签名过程 1. ...

  5. 6月最新兼容15.0系统ipa重签名工具(win+mac)免费

    766signer是一款IPA/iOS/苹果重签名工具,支持windows电脑和Mac版苹果电脑. 下载地址: https://wwa.lanzoui.com/b010l6c2d 或者: window ...

  6. ios app 开发中ipa重新签名步骤介绍

    http://blog.csdn.net/a351945755/article/details/46472523 作为一个app应用程序开发者,在app应用程序在苹果商店上架前总需要将安装包安装到io ...

  7. iOS逆向之深入解析App签名的双向验证机制和原理

    一.非对称加密 通常说的签名就是数字签名,它是基于非对称加密算法实现的. 对称加密是通过同一份密钥加密和解密数据,而非对称加密则有两份密钥,分别是公钥和私钥,用公钥加密的数据,要用私钥才能解密,用私钥 ...

  8. 四、iOS逆向:破壳 ipa 安装

    设备环境: 硬件环境:iPhone6.0.Mac电脑Big Sur(M1 芯片). 软件环境:cydia. 2. 操作步骤: (1)cydia 安装Filza File Manager (源为apt. ...

  9. ios 程序发布成ipa 文件 通过 web 下载和安装。install App via OTA

    转自: http://blog.csdn.net/totogogo/article/details/7391531 iOS 7.1正式版发布了,之前使用itms-services://URL方式在线安 ...

最新文章

  1. 谁的python入门教程好_怎样学习Python?Python入门必看
  2. 修复使用codeXmlDocument/code加载含有DOCTYPE的Xml时,加载后增加“[]”字符的错误...
  3. 服务拆分-案例Demo
  4. mysql 命令行怎么格式化_dbForge Data Compare for MySQL入门教程:通过命令行格式化代码...
  5. Windows备份服务器运行失败,用Windows Server Backup搞定服务器备份
  6. 2018年1月问答系统综述
  7. java中文文档官方下载
  8. 【引用】将整数转化为十进制字符串的函数Convert integer to Decimal string
  9. [Python] 创建一个整数列表:range()
  10. Ceph分布式存储学习指南1.12 Lustre
  11. php给数据库添加记录,数据表操作之添加数据表记录
  12. eclipse安装中文补丁包
  13. Java中对象的逃逸分析
  14. 二值化网络的发展——从原始BNN到MeliusNet
  15. 工业级氯化锂2022年全球行业分析报告
  16. 8305天距离梦想还有8,352 千米 2012-03-31 23:18:53 柏林勃兰登堡门 再过两天就是我22周岁生日了,我在生命网站上摁下自己的出生年月,上面显示我已经度过了8305天,走
  17. JAVA计算机毕业设计智能停车场管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  18. 打字游戏之输入框功能的实现
  19. Win10开启黑色护眼暗黑主题
  20. 对 BFC 规范(块级格式化上下文:block formatting context)的理解?

热门文章

  1. BZOJ 4595 SHOI2015 激光发生器 射线,线段,偏转
  2. 是时候开始使用JavaScript严格模式了怎样启用javascri
  3. [总结]博客聚合-cnblogs,wordpress,live writer,word2010
  4. int、bigint、smallint 和 tinyint
  5. C语言的一个关键字——static
  6. GridView自定义分页导航
  7. 在HTML网页中巧用URL
  8. bug诞生记——不定长参数隐藏的类型问题
  9. Ubuntu 14.04上使用CMake编译MXNet源码操作步骤(C++)
  10. 二维码Aztec简介及其解码实现(zxing-cpp)