IOS开发入门iOS应用安全(二)代码混淆基础
白羽 2019-04-16 来源 :网络 阅读 560 评论 0

摘要:本文将带你了解IOS开发入门iOS应用安全(二)代码混淆基础,希望本文对大家学IOS有所帮助。

    本文将带你了解IOS开发入门iOS应用安全(二)代码混淆基础,希望本文对大家学IOS有所帮助。


IOS开发入门iOS应用安全(二)代码混淆基础


代码混淆
   使用class-dump可以很轻松的获取程序的所有头文件,而且如果头文件没有加密dump出来,会暴漏程序的很多信息,因为程序的头文件都是容易读的,为了使用class-dump  导出的头文件的可读性变差,可以对代码进行混淆
   混淆的意思就是将可读的代码变成不可读的,例如:@property(copy, nonatomic) NSString *password; 混淆成  @property(copy, nonatomic) NSString *nRgLSvKPjbgkipPb; password大家都知道是密码的意思,但是  “nRgLSvKPjbgkipPb”这个东西是个随机字符串,大家都不知道是什么意思,这样做会更加安全一点。
   
   具体操作步骤:
   1、在项目的根目录下新建2个文件,分别为 confuse.sh、func.list,并修改confuse.sh文件的权限
   
   2、 新建.pch 文件
   注意.pch文件的位置最好要放在 AppName 名字的文件夹下,.pch文件的位置会在confuse.sh中会使用到,如果.pch文件的位置放在其它地方那么需要修改confuse.sh文件中的某个变量的值
   注意.pch文件的路径需要在Build Settings中配置一下
   
   3、 编写confuse.sh
   #!/usr/bin/env  bash TABLENAME=symbolsSYMBOL_DB_FILE="symbols"STRING_SYMBOL_FILE="func.list"HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"export  LC_CTYPE=C #维护数据库方便日后作排重createTable(){echo "create table  $TABLENAME(src text, des text);" | sqlite3  $SYMBOL_DB_FILE} insertValue(){echo "insert into $TABLENAME  values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE} query(){echo  "select * from $TABLENAME where src='$1';" | sqlite3  $SYMBOL_DB_FILE} ramdomString(){openssl rand -base64 64 | tr -cd  'a-zA-Z' |head -c 16} rm -f $SYMBOL_DB_FILErm -f  $HEAD_FILEcreateTable touch $HEAD_FILEecho '#ifndef  Demo_codeObfuscation_h#define Demo_codeObfuscation_h' >> $HEAD_FILEecho  "//confuse string at `date`" >> $HEAD_FILEcat  "$STRING_SYMBOL_FILE" | while read -ra line; doif [[ ! -z  "$line" ]]; thenramdom=`ramdomString`echo $line $ramdominsertValue  $line $ramdomecho "#define $line $ramdom" >> $HEAD_FILEfidoneecho  "#endif" >> $HEAD_FILE  sqlite3 $SYMBOL_DB_FILE  .dump
   confuse.sh  文件中定义了三个文件,注意func.list是在项目根目录下,而HEAD_FILE是在项目根目录下的项目名称下的路径,也就是.pch文件所在的路径,最好保持  codeObfuscation.h文件的路径和.pch文件的路径一致,如果路径一致,这个shell脚本不用做任何修改
   ?123SYMBOL_DB_FILE="symbols"STRING_SYMBOL_FILE="func.list"HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
   4、 配置confuse.sh
   选中Target—》Build Phases—> + —->New Run Script Phase
   然后配置一下confuse.sh的路径
   
   5、 在func.list中配置需要混淆哪些单词,只有配置了该单词才会混淆,可以配置多个,一行一个,可以把一些敏感的单词配置进去
   
   6、Command + B 编译项目,如果正常的话,项目中会多出两个文件:symbols和  codeObfuscation.h,然后将codeObfuscation.h文件导入的.pch中
   
   
   7、然后Command + B 编译项目,可以在Report  navigator中看到一下内容,可以看到脚本中为func.list中的每个单词生成一个随机字符串
   
   8、 项目混淆好了,可以使用class-dump来测试一下
   刚以开始使用class-dump -H ClassDumpTest.app/ -o 文件输出路径  这个命名看到没有混淆成功,后来找到ClassDumpTest.app文件所在目录手动删掉该文件,重新编译一下,使用了这个命令: class-dump -S  -s -H ClassDumpTest.app/ -o /Users/macmini/Desktop/ClassDumpTest333  结果混淆成功了,后来又试了一下第一个命令,结果也能混淆成功
   
   
   
   该示例混淆的原理是:编译时执行confuse.sh脚本,为func.list中的每个单词生产一个宏并写入到codeObfuscation.h  这个头文件中,然后将func.list中的每个单词都用对应的宏替换
   
   
   经过测试,使用class-dump 并不会导出codeObfuscation.h头文件    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!

本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程