iOS逆向攻防实战( 四 )


如果希望将破坏了签名的安装包,安装到非越狱的手机上,需要对安装包进行重签名的操作 。
有两个注意点:
a. 安装包中的可执行文件必须是经过脱壳的,重签名才会有效 。
b. .app包内部的所有动态库(.、.dylib)、(文件夹,拓展名是appex)、(Watch文件夹)都需要重新签名
重签名步骤:
a. 准备一个.文件(必须是付费证书产生的,appid、一定要匹配),并放入.app包中 。可以通过Xcode自动生成,然后在编译后的APP包中找到,也可以去开发者证书网站生成下载 。
b. 从.文件中提取出.plist权限文件 。
在终端敲以下命令即可提取:
cms -D -i . > temp.plist
/usr// -x -c 'Print :' temp.plist > .plist
查看可用的证书:
find- -v -p
对.app内部的动态库、等进行签名:
-fs 证书ID xxx.dylib
对.app包进行签名:
-fs 证书ID -- .plist xxx.app
也可以使用一些带有UI的重签名工具 。例如:
iOS App()
iOS App 可以对.app重签名打包成ipa,需要在.app包中提供对应的.文件 。
()
可以对ipa进行重签名,需要提供.plist、.文件的路径 。
重签名的过程中遇到的问题与注意点:
a. 只能对脱壳的可执行文件进行重签名 。
b. 工具只能对ipa进行重签名,app内的动态库、需要先手动重签名,最后再使用工具进行ipa重签名 。
c. 重签名打包成ipa安装到手机时如出现...错误,应该是info.plist文件里面的字段的问题,需要把这个字段去掉再重新打包 。
重签名步骤总结(以文档表格编辑为例)
a. 通过爱思助手等工具把文档表格编辑的app包拷贝到电脑上
b. 把已脱壳的可执行文件放到app里面替换原来的未脱壳的可执行文件
c. 把新的描述性文件、需要注入的动态库放进app包里面(与可执行文件同一路径)
d. 对app包里的所有动态库、、、进行重签名(自己加的动态库,改完路径再重签名)
-fs 证书ID 动态库名字
e. 修改所有注入动态库的查找路径,例如注入动态库,需要将的查找路径改成@/.dylib,如果动态库还依赖其他动态库,一般都要依赖()这个库,所以还需要将的查找路径改为@/.dylib(@/.dylib,需要注意的是,一般是用这个,因为从手机终端导出来的自动改名为,如果使用@/.dylib会导致路径错误闪退)
otool -L .dylib //查找动态库所依赖的库及其路径
- ///./ @/ .dylib //修改的执行路径
f. 把动态库注入到可执行文件里面
@/.dylib--all-yes --weak
g. 把info.plist里的字段删掉
使用工具对app包进行重签名并生成ipa文件,再通过爱思助手安装到手机上
6.防
前面谈到这么多种攻击手段,那么对应的也存在很多的防御手段,比如数据加密(字符串、网络数据、敏感数据等)、应用加壳(二进制加密,iOS上传会自动加壳,但早已被破解)、代码混淆(类名、方法名、代码逻辑等)、反调试、反注入、Hook检测、越狱检测、完整性检测等 。
通过逆向大量市面上很多的APP,我发现大多数都没有做太多的防护措施,不过也有少数像抖音、微信这样的知名APP就做了大量的防护措施 。总之,没有防御的APP就像把源代码暴露在别人面前一样,漏洞百出,存在着大量的安全隐患,所以我认为对APP做一些防护是非常有必要的,学习一些逆向知识,还能提高我们的安全意识,在平时的开发过程中编写代码也会时时注意到什么样的写法是有漏洞的,什么样的写法才是安全的 。
接下来我会介绍几种逆向领域里常用的防御手段,也称应用加固 。