Giter Club home page Giter Club logo

yuedu's Introduction

yuedu

香色闺阁、微信重签名实战

背景

博客地址:iPA重签名 + 香色闺阁、微信重签名实战

换手机之后,原来的香色闺阁不能下载,转移的时候就丢失了。又最近看到有人截屏iPhone上装了两个微信,一个是自己重签名的;想到自己有开发者账号,但是还没试过重签名APP,是不是可以通过重签名来安装香色闺阁,以及实现多开微信?

步骤

说干就干,首先从简单的开始,先来尝试重签名香色闺阁,再尝试微信,因为香色闺阁的包内容比微信的少很多,文件容易找,相对简单,步骤如下:

重签名香色闺阁

首先从网上搜素下载香色闺阁的 ipa 包,没有的可以从这里yuedu.ipa下载。

然后将 ipa 改为 zip,然后解压,会出现一个 Payload 文件夹,里面有一个StandarReader.app的文件。选中StandarReader.app,右键显示包内容,可以看到APP包中的所有内容,如下图:

ipa解压

显示包内容

package content

重签名就是用自己的账号新建一个APP(bundleID自己定义),运行到手机上,找到运行的包(xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app)或者通过打包的方式,使用AdHoc方式生成一个iPA(用于获取到描述文件和Entitlements.plist),这里需要注意选择的描述文件包含要安装的设备,然后把待签名的iPA中的bundleID、证书和描述文件,替换成自己创建的APP的。

所以通常需要修改的有以下内容:

  • Info.plist 中的 bundleID
  • embedded.mobileprovision 签名文件
  • _CodeSignature中的内容
  • 因为普通账号不能对插件进行签名,在包内容路径中找到Watch和PlugIns文件夹直接删除
  • 重签 framework

而针对香色闺阁的 ipa 来说,没有插件,没有 framework,所以需要修改的文件有:Info.plistembedded.mobileprovision_CodeSignature中的内容,下面具体来看如何修改:

修改Info.plist中的bundleID

找到Payload/StandarReader.app中的Info.plist,用 Xcode 打开,或者其他编辑器打开,找到Bundle identifier,可以看到香色闺阁的bundleID为com.appbox.StandarReader,替换com.appbox.StandarReader为自己创建APP的bundleID, 如下图:

Ps: 如果不是Xcode打开可以直接搜索替换

替换bundleID

替换embedded.mobileprovision

从自己新建APP的iPA中获取到新的embedded.mobileprovision,步骤同上:改为zip -> 解压缩 -> 查看包内容,找到embedded.mobileprovision拷贝出来,可以放到要替换的Payload目录的外层,如下图:

新的embedded.mobileprovision

然后用这个新的替换原APP中embedded.mobileprovision,可以通过命令行,如下:

  1. 删除原APP中的描述文件
    rm -rf Payload/xxx.app/embedded.mobileprovision
  2. 把新的描述文件,放入xxx.app中
    cp embedded.mobileprovision Payload/xxx.app/

重新签名

从自己创建的APP的embedded.mobileprovision中获取Entitlements.plist注意是自己创建的APP中获取,而不是香色闺阁的包中获取,然后删除香色闺阁包中的_CodeSignature,再用生成的Entitlements.plist给香色闺阁包生成新的签名,具体步骤如下:

  1. 生成Entitlements.plist
    /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist
  2. 删除香色闺阁包中的_CodeSignature
    rm -rf Payload/xxx.app/_CodeSignature/
  3. 用新的Entitlements.plist给香色闺阁包生成新的签名
    // 首先获取证书名称
    security find-identity -v -p codesigning
    // 选择创建APP时使用的证书进行签名
    codesign -f -s "证书名称" --entitlements entitlements.plist Payload/xxx.app

打包,安装

Payload文件夹在压缩为ipa文件,命令如下:

zip -r xxx.ipa Payload/

最后安装,可以选中Xcode,然后选择 Windows -> Device And Simulators,或者选中Xcode后使用快捷键Shift+CMD+2打开,选中设备,点击+,选择生成的ipa,即可安装。

Xcode安装ipa

重签名微信

第一步,获取微信的 ipa 文件,要注意下载 ipa 的可用性,要不然辛苦半天最后发现不能用,误以为是步骤有问题,有可能是包的问题。。。笔者最终可用的是从这里下载的微信 ipa

ipa 下载完成后,和上面步骤类似,改为.zip,解压,获取到Payload/WeChat.app,如下图:

WeChat_app

用自己的账号新建一个APP(bundleID自己定义),运行到手机上,找到运行的包(xxx/DriveData/xxx/Build/Products/Debug-iphoneos/xxx.app)或者通过打包的方式,使用AdHoc方式生成一个iPA(用于获取到描述文件和Entitlements.plist),这里需要注意选择的描述文件包含要安装的设备,然后把待签名的iPA中的bundleID、证书和描述文件,替换成自己创建的APP的。

修改 info.plist 的 bundleIdentifier

然后查看WeChat.app的包内容,找到info.plist,并替换其中的bundleIdentifier为自己创建的(WeChat.app中内容很多,可以按修改日期排序,会相对容易找到要修改的文件),如下图: 微信bundleID修改

替换embedded.mobileprovision

从自己创建的APP中获取到embedded.mobileprovision,然后替换WeChat.app中的embedded.mobileprovision,可以直接复制替换。

重签名Frameworks

对比上面的香色闺阁,这里多了重签名Frameworks的步骤,需要把Frameworks中的所有库,都用自己的证书重新签名一下,Frameworks中内容如下图(这里可能有非官方的库,一并签名了,不影响):

Frameworks内容

重签名的命令如下,重复执行,直到Frameworks下所有库都签名完成:

codesign -fs "你的证书" xxx.framework

替换framework签名

删除Plugins

笔者下载的这个版本的WeChat.app的Content中未找到Plugins的内容,故而不需要处理

替换签名

从自己创建的APP中获取到的embedded.mobileprovision生成Entitlements.plist,命令如下:

   /usr/libexec/PlistBuddy -x -c "print:Entitlements " /dev/stdin <<< $(security cms -D -i xxx.app/embedded.mobileprovision) > Entitlements.plist

然后删除WeChat.app中的_CodeSignature,再用生成的Entitlements.plist,给WeChat.app重签名,命令如下,执行时注意Entitlements.plistWeChat.app的路径:

codesign -fs "你的证书" --no-strict --entitlements=Entitlements.plist Payload/WeChat.app/

重签名WeChat.app

然后压缩/Payload/WeChat.app,生成xxx.ipa,命令如下:

zip -r xxx.ipa Payload/

最后使用 Xcode 安装 xxx.ipa 到手机,步骤如下: 选中Xcode,Shipt+CMD+2打开窗口,然后选中设备,点击"+",选择xxx.ipa,等待安装

最后安装后效果如下:

最终效果

总结

总结一下,ipa重签名是用自己的证书和描述文件替换对应包中的证书和描述文件的过程,总的步骤如下:

  • 找到可用的 ipa
  • 新建项目,编译或者打包,获取到对应的embeded.mobileprovision
  • 修改替换包的bundleIdentifier为自己创建项目的bundleIdentifier
  • 用自己的embeded.mobileprovision更新替换包中的
  • 重签名Frameworks
  • 删除Plugins
  • 用自己的embeded.mobileprovision生成Entitlements.plist,然后重签名xxx.app
  • 最后打包xxx.appxxx.ipa,安装

参考

yuedu's People

Contributors

mokong avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.