Skip to main content

iOS 加密流程

方案简介#

深盾安全 iOS 应用加固通过对 iOS IPA 中的主程序进行加固,有效解决 iOS 应用存在的安全问题,保护应用免受破解、篡改等风险。

温馨提示
  • 建议在 Mac 电脑上对 ios 程序加密
  • 要求IPA主程序编译时需要关掉 bitcode
  • 不支持直接对 ipa 文件加密,您可以解压ipa,对里面的 .app 文件包加密,勾选签名,加密后会重新生成 ipa文件。

加密流程#

本文以 helloworld.app 为例。


编译xcarchive包#

1、Xcode->TARGETS->Build Setting->Build Options->Debug Information Format选择DWARF with dSYM File选项,目的是编译成xcarchive包内带有dSYM文件,加壳工具解析app时可以解析出函数名称,否则,函数将会只会显示地址;

image-20220421151134494

2、加壳工具暂不支持bitcode,编译时关闭bitcode的编译选项,Xcode->TARGETS->Build Setting->Build Options->Enable Bitcode->no;

image-20220421151206342

3、以上选项配置完后,选择Xcode->Prodcut->Archive进行编译程序;

image-20220421151237584

4、编译成功后进入到Archives页面;

image-20220421151251462

5、选中编译好的程序,右键在Finder里打开该程序;

image-20220421151307070

6、找到编译好的xcarchive,右键显示包内容;

image-20220421151322002

7、进入包内容后,在Products\Applications目录下为待保护的app程序。

image-20220421151337325

加密流程#

将程序拖入VirboxProtector界面#

首先找到ios打包出来的应用所在的文件目录,将ios程序打包出来的应用(如:helloworld.app) 直接拖入加壳工具中(支持两种格式的识别,用户可以选择app格式的包文件,也可以直接使用app包中的可执行文件)

函数选项-添加函数#

点击按钮函数选项-【添加函数】可以选择要保护的函数;

可以选择想要保护的函数(代码混淆和代码虚拟化);

注意

将dSYM文件放到app包所在的目录下,可以解析出函数名称;否则,函数将会只会显示地址。xcarchive包无需此操作,加壳工具会自动读取。

dSYM文件放置位置,如图所示:

加密选项设置#

输出信息设置#

输出文件夹:可设置加密后的程序存储的位置及命名

设置选项#

内存校验:可以针对应用程序防篡改

Objective-C 名称混淆:防止 objective-c class-dump dump 出方法名

调试器检测:可以检测调试器,防止动态调试

签名设置#

  • 若勾选启用签名,签名证书选择和Xcode编译xcarchive时的证书一致,则程序保护生成的app默认已签名;
  • 若不勾选启用签名,则程序保护生成的app默认不签名,需自行在对加固后的app手动签名(比如使用codesign命令行、iOS App Signer工具等),签名证书选择也要和Xcode编译xcarchive时的证书一致。
注意

注意:若使保护后的app程序在非越狱手机上安装,需要确保Xcode编译中signing->Team指定的account和VBP界面所选的一致。

点击保护选中项目#

选择完成后,单机保护所选项目按钮,等待完成即可。

保护完成后,生成的文件

  • ***.app.ssp:指配置文件,主要存储Virbox Protector界面选择的函数和加密所选的选项,该配置文件和原程序在同目录且名称一致,即Virbox Protector再次保护程序时可不用重新配置;

  • protected/***.ipa:指加固后的app程序打包成ipa的包;

  • protected/***.app:指加固后生成的程序;

image-20220824172859102

上架APP Store#

若需上架App Store,将原程序移动备份到其他位置,再将protected/***.app移动到原程序的位置上,不能存在xcarchive包内;

修改完后,在返回Archives页面,点击Distribute APP对程序进行上架。

image-20220824172931053

命令行加壳#

本文以 helloworld.app 为例。


生成SSP配置文件#

使用界面工具,设置函数选项、加密选项后,点击【保存所有配置】,即可生成 SSP 配置文件。如果不生成 SSP 文件,则无法对加固后的文件进行签名。

执行命令进行加固#

找到 命令行工具 virboxprotector_con 文件位置:在应用程序中找到 Virbox Protector 2 Trial.app,打开包内容,在/Contents/MacOS/bin目录下就可以找到 virboxprotector_con。

打开终端窗口,进入到“virboxprotector_con”所在的路径,直接输入“virboxprotector_con”运行可查看帮助信息;

执行加固命令:virboxprotector_con helloworld.app -o ssp.helloworld.app

注意事项#

非越狱手机上安装ipa#

【注】这种情况只在个人测试时才会出现这个问题,如果程序正常上架后,在app store里下载,就不会区分手机是越狱还是非越狱。

问题:若加壳时文件签名证书选择和Xcode编译xcarchive时的证书不一致,程序重新签名,如何在非越狱手机上安装程序?

解决1:重新签名时,证书用一致的。

解决2:

1、下载爱思助手,并打开

2、连接设备

3、点击爱思助手的工具箱,选择”IPA签名“,选择使用“Apple ID签名”

4、点击“添加Apple ID”,输入开发者账号,选择设备UDID,点击添加。

4、选择ipa文件,选择对应的Apple ID,点击开始签名

5、签名成功后,点击“打开已签名IPA位置”,可以看到重签后的IPA

6、在非越狱手机上可以安装成功(注:这种情况下签名的ipa只能在该设备ID上安装)。

崩溃信息#

若程序加壳后在手机上运行崩溃,需要将崩溃信息提供给Virbox人员,如何获取崩溃信息?

1、手机连接电脑,保证手机ip地址要和电脑IP地址在同一网段内。

2、打开Xcode ,选择Window->Devices and Simulators选项;

2、点击View Device Logs选项;

3、若手机ip地址要和电脑IP地址在同一网段内,在手机上运行的app崩溃后,日志会自动同步到此页面;

4、选中Type为Crash,点击右键Export log,将该日志保存到本地。

如何用命令给app签名#

1、使用该命令查询电脑上的证书

security find-identity -v -p codesigning

2、使用该命令对app进行签名

codesign -fs <证书信息>  ***.app

如果将app打包成ipa#

1、创建一个文件夹,名称为Payload;

2、将保护后的.app文件放入该文件夹中;

3、将Payload文件夹进行压缩(默认压缩为.zip);

4、将后缀名.zip改名为.ipa;