linux apk重签名,ios应用签名原理以及重签名

一、iOS应用签名原理及过程

f86df6738fe2

iOS应用签名原理.png

签名的过程如上图,接下来我们来简单看下描述文件,打开目录:

/Users/xxx/Library/MobileDevice/Provisioning Profiles

随便选择一个证书,用命令查看:

security cms -Di fe1db9ae-746b-49f1-8ff5-0fa8b3ab8483.mobileprovision

找到 entitlements :

Entitlements

keychain-access-groups

55TKKGAAJQ.*

get-task-allow

application-identifier

55TKKGAAJQ.*

com.apple.developer.team-identifier

55TKKGAAJQ

这个 entitlements 就是权限配置,App重签名会用到。

二、应用重签名

2.1 准备工作

先下载砸壳的应用(业内普遍用WeChat),用 codesign 看下我们准备的应用包:

codesign -vv -d WeChat.app

其中有一项:Authority 就是应用签名,

查看machO文件

machO即Unix可执行文件,我们用otool工具先看一下:

//以下命令可以都可以,我们用第三个

otool -l WeChat //终端直接输出

otool -l WeChat | grep cry //管道输出,grep筛选

otool -l WeChat | grep cry > 文件地址 //输入到文件

cryptid字段: 0 , 代表你下载的是砸过壳的 ;1,也就是加密过的,其实就是 AppStore 使用的非对称性加密 (代码签名)。

注意:App的解密,即签名验证发生在启动App时,并非安装时就解密(可参考企业包的安装验证过程)。

f86df6738fe2

cryptid.png

查看电脑上的证书

命令:security find-identity -v -p codesigning

2.2 删除插件

插件普通账号无法重签,先删除:

1、WeChat 显示包内容,找到 PlugIns 文件夹,直接删除。

2、找到Watch文件夹,这里也有插件,我们暂时不用,删除。

2.3 重签FrameWork

进入FrameWork文件夹

利用codesign,使用自己的证书进行重签名。

命令:codesign -fs "刚刚复制的你自己的证书名字" 要重签的FrameWork名称

例如:codesign -fs "Apple Development: chen_xxxx@xxxx.com (632F4MG322)" OpenSSL.framework

重复操作,把FrameWork文件夹下的所有库全部重签。

f86df6738fe2

codesign.png

2.4 确保machO的执行权限。

简单判断可执行权限:预览框中,黑色,表示可执行;灰色,表示不可执行(10.15的系统可能看不了)。

也可以通过命令:ls -l Wechat,查看文件权限。结果可能为:-rw-rw-r--@ 或者其他权限。

如果没有可执行权限,也就是 x 权限,可以通过 chmod +x WeChat 添加权限。

2.4.1 Linux 文件权限

Unix 和 Linux 都是多用户、多任务的系统,所以这样的系统里面就拥有了用户、组的概念。那么同样文件的权限也就有相应的所属用户和所属组了。

f86df6738fe2

Mac文件属性.png

f86df6738fe2

文件类型及权限.png

文件类型以及权限:

第1段表示文件类型:d,目录;-,文件。

后面三段表示文件权限,对应 [user] [group] [other]

2.1 第2段:文件所有者权限

2.2 第3段:这一组其他用户权限

2.3 第4段:非本组用户权限

文件三个权限为:[read] [write] [execute]

简写及对应数字:r : 4 w : 2 x : 1

二进制表示: 0100 0010 0001

如果一个文件权限为:[–rwxr-xr-x]

User:rwx 4+2+1 = 7

Group:r-x 4+0+1 = 5

Other:r-x 4+0+1 = 5

chmod 755 文件名:该命令设置权限同上。

符号类型:chmod [u、g、o、a] [+(加入)、-(除去)、=(设置)] [r、w、x] 文件名称。(chmod 7 文件名,默认为所有)

2.5 添加描述文件

这个可以借助xcode自动生成一个,当然有的话可以直接用。

1、新建一个空工程跑到手机上,Bundle identifier为com.study.WeChatTest,然后进入app包内找到描述文件,复制到WeChat包内。

f86df6738fe2

embedded.png

2、WeChat包内找到 Info.plist 文件,修改Bundle identifier为com.study.WeChatTest。

2.6 准备授权文件(Entilements)

利用文章开始我们说的查看描述文件方法,看我们刚刚拷贝到微信包里的描述文件。也就是我们自己空工程生成的描述文件,找到权力文件部分。

f86df6738fe2

Entilements.jpg

打开我们刚刚新建的工程,新建一个reInfo.plist文件。Open As -> Source Code,将权利文件内容粘贴进去。

f86df6738fe2

截屏2020-08-18 22.29.14.png

然后将 Info.plist 文件放到 WeChat.app同路径下。

f86df6738fe2

WeChat.png

2.6 重签app包

codesign -fs"Apple Development: chen_xxxx@xxxx.com (632F4MG322)" --no-strict --entitlements=reInfo.plist WeChat.app

2.7 安装到手机

f86df6738fe2

1597761592347.jpg

点击 +,添加重签过得app包,安装到手机。

注意在这一步时,一定要将app包中Info.plist 文件的Bundle identifier 修改。

三、通过Xcode直接安装

3.1 新建同名工程

重复上面的前三步,新建同名工程,即WeChat工程。选择真机,安装到手机上。

不使用同名工程时,每次 build 会重新创建一个 Mach-O,也就是说此时你就算更换了包,但是这个包里有两个 Mach-O,而运行的还会是你自己的空工程,所以在我们已经下载到 ipa 看得到包里的 Mach-O 的情况下,我们就起和它一样的名字就好。

3.2 替换App包

找到上一步重签名的App包,替换我们新建项目的App包。

这个时候,App包里面的Bundle ID还是微信的,不管,直接运行。

直接运行,App正常安装到手机上,大功告成。

总结

前面之所以要自己手动重签名,主要是让我们了解重签名的过程及原理。当然通过Xcode重签,我们可以看到部分打印,方便我们添加代码运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值