应用签名-手动签名

news/2024/7/20 23:11:26 标签: iOS, 签名

获取破壳应用

手动签名是对破壳后的应用进行签名,应用破壳有两种:
1、通过越狱手机获取破壳应用,可参考:《砸壳概述及其原理》;
2、通过PP助手获取越狱应用即可。
将砸壳应用放到桌面或其他方便操作的地方,当前使用的是微信应用:

app.png

签名步骤

1、创建一个WeChat工程,本测试中使用的是xcode自动生成的证书和描述文件,也可以使用创建的证书和描述文件,因为都是从苹果服务器申请获取的,参考《应用签名-签名原理》,所以能够对APP进行手动签名。接入真机并编译,获取.app中的描述文件。如下图:

create.png

2、右键.app显示包内容复制embedded.mobileprovision到桌面备用,使用命令查看描述文件中的权限配置(Entitlements下的为权限配置):

security cms -D -i embedded.mobileprovision

权限文件部分:

<key>Entitlements</key>
<dict>
    <key>application-identifier</key>
    <string>48HJPW679W.com.yahibo.WeChat</string>
    <key>keychain-access-groups</key>
    <array>
        <string>48HJPW679W.*</string>
    </array>
    <key>get-task-allow</key>
    <true/>
    <key>com.apple.developer.team-identifier</key>
    <string>48HJPW679W</string>
</dict>

3、创建一个plist权限文件,并将embedded.mobileprovision中的权限文件复制到plist中,用来对砸壳应用重签名

Entitlements.png

4、将权限文件移动到桌面或其他方便操作的地方,并将embedded.mobileprovision文件加入到砸壳应用包中(.app右键显示包内容)。如下图:

mobileprovision.png

5、修改砸壳应用中包中info.plist的唯一标识:

info.png

6、给可执行文件执行权限

chmod +x WeChat

7、进入到桌面砸壳应用,因为对Watch中的app无法签名,所以直接删除,Plugins中插件无法被验证不能使用,所以需要删除。
Watch文件(删除):

Watch.png

PlugIns文件(删除):

PlugIns.png

8、进入Frameworks.app中的文件)文件中对所有库重签名
1)查看当前安装的证书

security find-identity -v -p codesigning

2)使用可用证书对每一个库签名

codesign -fs "iPhone Developer: yahibo@qq.com (64R6BCB698)" ProtobufLite.framework

注意:签名证书要与工程中使用的证书保持一致

签名使用的证书:

sign1.png

Frameworks下的所有库重签名
sign2.png
9、签名APP,返回桌面,用已经创建好的权限文件对.app重新签名

codesign -fs "iPhone Developer: yahibo@qq.com (64R6BCB698)" --no-strict --entitlements=Entitlements.plist Payload/WeChat.app

在创建工程时自动生成的描述文件中已经包含了测试设备id签名app即可安装到测试设备上;如果想添加多台设备,可以自己创建证书,创建描述文件时添加需要安装的设备,重签名使用该证书即可。

安装:
1、签名完之后可以放在xcode中替换原有的.app,直接运行;如下图:

xcode.png

2、打包APP,通过Xcode->window devices安装ipa包。打包命令如下:

zip -ry WeChat.ipa Payload

安装ipa

install.png

总结

应用签名步骤如下:

  1. PP助手越狱手机中获取解密ipa包
  2. 创建新应用,并安装至手机,获取.app包中的描述文件;
  3. 从描述文件中获取权限配置,并创建en.plist权限文件;
  4. 进入解密ipa包中的.app文件,移除Plugin插件及Watch文件;
  5. 使用上面创建工程的证书,对解密的.app/Frameworks文件下的库进行重签名
  6. 将第2步获取的描述文件放入解密的.app包下;
  7. 使用第3步en.plist权限文件对整个.app包进行重签名
  8. 向手机安装.app包或者打包为.ipa包

注意

在操作过程中发现以下问题:
1、通过越狱手机获取到的破壳应用,由于手机CPU架构不同(测试用iPhone5),会导致安装失败;
2、创建的工程获取描述文件时注意,要使用一手描述文件(重新编译描述文件会发生变化,签名APP验证不通过)。

《应用签名-签名原理》

《应用签名-脚本签名


http://www.niftyadmin.cn/n/1737837.html

相关文章

应用签名-脚本签名

签名原理熟悉了&#xff0c;又能够手动对应用签名&#xff0c;那么就可以将手动签名部分写成脚本&#xff0c;通过脚本&#xff0c;一步步实现手动签名过程。脚本签名中xcode会对.ipa做权限管理&#xff0c;因此不需要做权限签名。 破壳ipa获取&#xff1a; 1、通过越狱手机获…

epoll原理及使用方法

Linux 2.6内核中提高网络I/O性能的新方法epoll 正如我昨天在“Linux下各类TCP网络服务器的实现源代码”(http://zhoulifa.bokee.com/5345930.html)一文中提到的那样&#xff0c;I/O多路复用技术在比较多的TCP网络服务器中有使用&#xff0c;即比较多的用到select函数。感谢chin…

Web应用安全学习

1、CSRF漏洞的防范 方法一&#xff1a;添加Form Token 基本思路&#xff1a; step 1、在服务器端生成一个随机的token&#xff0c;如用tokenmd5(time()userName)&#xff1b; step 2、把token存入session或者数据库&#xff1b; step 3、把token存入待输出页面的某个元素中&…

objc4-750源码编译

OC的一个主要特性Runtime运行时特性&#xff0c;在日常开发中我们使用到的都是不可见的&#xff0c;还好官方提供了Runtime&#xff08;objc4&#xff09;源码供开发者研究&#xff0c;我是小白&#xff0c;下面就开始迈出源码探索的第一步&#xff0c;源码编译。 源码地址 一…

解读 nginx 中 chain 和 buf

在写 nginx 的 filter 模块时候需要比较深入去了解chain 和 buf的一些细节以及数据流处理过程。 就结构而言&#xff0c;这两个结构不算复杂 struct ngx_chain_s { ngx_buf_t *buf; ngx_chain_t *next;}; struct ngx_buf_s { u_char *pos; u_char …

GCD部分总结

一、概述 多线程任务管理&#xff0c;基于C语言的底层API&#xff0c;采用闭包形式与外界通讯&#xff0c;代码简洁高效&#xff1b;充分利用多核CPU&#xff0c;自动管理线程的生命周期&#xff0c;我们只负责任务的创建。 二、队列和任务 1、队列 常用的数据结构之一&…

理解JAVASCRIPT 中hasOwnProperty()的作用

【转载】http://hj149.javaeye.com/blog/505237 hasOwnProperty&#xff1a;是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是&#xff0c;此方法无法检查该对象的原型链中是否具有该属性&#xff0c;该属性必须是对象本身的一个成员。格式如下&#xff1a; …

iOS图片处理

一、图片大小 二、强制解压缩 三、灰度图片 四、图片调色 五、设置马赛克 一、图片大小 位图&#xff1a;由一个个像素点组成的图像 图片像素点个数&#xff1a;就是图片宽高乘积 一个像素点的大小&#xff1a;4个字节&#xff08;存放RGBA值&#xff0c;每一分量占1个字节&…