iOS应用安全(二)代码混淆基础

代码混淆

使用class-dump可以很轻松的获取程序的所有头文件,而且如果头文件没有加密dump出来,会暴漏程序的很多信息,因为程序的头文件都是容易读的,为了使用class-dump 导出的头文件的可读性变差,可以对代码进行混淆。

关于class-dump的使用请移步:iOS应用安全:一: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=symbols
SYMBOL_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_FILE
rm -f $HEAD_FILE
createTable

touch $HEAD_FILE
echo '#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
cat "$STRING_SYMBOL_FILE" | while read -ra line; do
if [[ ! -z "$line" ]]; then
ramdom=`ramdomString`
echo $line $ramdom
insertValue $line $ramdom
echo "#define $line $ramdom" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE


sqlite3 $SYMBOL_DB_FILE .dump

confuse.sh 文件中定义了三个文件,注意func.list是在项目根目录下,而HEAD_FILE是在项目根目录下的项目名称下的路径,也就是.pch文件所在的路径,最好保持 codeObfuscation.h文件的路径和.pch文件的路径一致,如果路径一致,这个shell脚本不用做任何修改

SYMBOL_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头文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风流 少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值