时时勤拂拭,勿使惹尘埃

TOC

Categories

iOS(五)iOS应用签名



1、xcode的sodesign签名工具:

codesign指令只能识别app,不能识别ipa格式
查看签名完整性:
codesign --verify Example.app
查看签名信息:
codesign -vv -d Example.app
    签名内容如下:
设置签名:
codesign -s 'iPhone Developer: Thomas Kollbach (7TPNXN7G6K)' Example.app
重签名:
codesign -f -s 'iPhone Developer: Thomas Kollbach (7TPNXN7G6K)' Example.app

2、查看系统中可用签名证书

security find-identity -v -p codesigning

3、ipa中的签名信息

Payload/YourApp.app/_CodeSignature
保存ipa中每个文件的校验
 
  • embedded.mobileprovision,证书配置文件

4、重打包过程

a.解压iPA文件
b.删掉旧的签名文件
c.拷贝新的provision profile替换旧的embedded.mobileprovision
d.用codesign命令重签名
f.重新zip为iPA文件

5、iOS证书中authority

与Android不同,iOS应用的证书信息不是放在单独的文件中的,而是直接写入可执行文件的区块中
codesign工具可以查看app的签名信息,otool工具可以查看证书在可执行文件中的偏移位置和大小
内核处理的Mach-O加载命令
命令
内核中处理的函数
(定义在bsd/kern/mach_loader.c文件中)
用途
0x1DLC_CODE_SIGNATUREload_code_signature
代码签名
(OS X中偶尔使用,iOS中强制使用)
证书信息由cmd类型为LC_CODE_SIGNATURE的加载命令指定,结构体 如下
struct linkedit_data_command {
    uint32_t cmd;  /* LC_CODE_SIGNATURE or LC_SEGMENT_SPLIT_INFO */
    uint32_t cmdsize; /* sizeof(struct linkedit_data_command) */
    uint32_t dataoff; /* file offset of data in __LINKEDIT segment */
    uint32_t datasize; /* file size of data in __LINKEDIT segment  */
};
第三个字段dataoff指的是证书信息在可执行文件内的偏移位置,基础地址是对应的二进制文件的起始地址
iOS app可执行文件是胖二进制类型,他的mach-o文件起始地址为0x4000,因此证书的实际位置为0x4000 + dataoff

0 评论:

发表评论