iOS 开发 ------ 代码混淆

本贴最后更新于 2018 天前,其中的信息可能已经物是人非

之前听过代码混淆的概念,但公司不要求这个,所以当时也没有在意,现在有时间就简单看了一下,真的只是简单的看了一下,虽然看不懂。。。

由于 class-dump 可以导出程序的头文件,对于 APP 的安全考虑,我们需要混淆自己的代码。
混淆代码有多种方式:
字符串加密、符号混淆、别名、C 重写、脚本处理 等等....
防止 class-dump 导出可读信息的有效方法是易读字符替换,接下来我们就来看一下吧。 ###

这是念茜女神写的一个脚本,以下代码来自念茜女神的博客

// 数据库名
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
// 存放混淆方法、属性的list的路径
STRING_SYMBOL_FILE="$PROJECT_DIR/项目名/func.list"
CONFUSE_FILE="$PROJECT_DIR/项目名"
// 存放混淆方法、属性的.h的路径
HEAD_FILE="$PROJECT_DIR/项目名/codeObfuscation.h"
// 剩下的代码看不懂啦。。。
export LC_CTYPE=C

以下代码是来自另一位大大的博客,那位大大实现了自动混淆(方法名字不能一个一个的添加到 func.list 中,所以只能从.m 和.h 文件中抽取了,但是如何屏蔽系统的方法名,暂行的策略是:将自己定义的方法名全部添加一个前缀例如:sss_),但只是混淆了方法名,我加上了属性名的混淆(因为看不懂 Linux 命令,只是一个简单的小问题弄了好久)

# 取以.m或.h结尾的文件以+号/-号/@property开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
grep -h -r -I  "^[-+@property]" $CONFUSE_FILE  --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{lens=split($0,b," "); print b[lens]; }'| sort|uniq |sed "/^$/d"|sed -n "/^sss_/p" >$STRING_SYMBOL_FILE
// 维护数据库方便日后作排重,以下代码来自念茜女神的博客
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
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

1.新建文件,将后缀改为 aaa.sh 如图:
image.png

把上面的代码粘贴到 aaa.sh 中,编译一下报错啦吧

image.png

解决办法:切换到工程目录下,输入命令行:

 chmod 755 aaa.sh 

给我们的脚本授权

2.我们再编译一下项目,然后在工程目录下,我们会多出一个 codeObfuscation.h 文件,右键 add...加到项目中

3.放到 pch 文件中
image.png

4.在 Xcode-->Target--->Build Phases---> 添加 Run Script
将 aaa.sh 拖到下图的黑框中,会自动生成路径
image.png

5.最后打包,用 class-dump 导出就可以看到效果啦
image.png
image.png

  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    84 引用 • 139 回帖 • 1 关注
  • 代码
    459 引用 • 591 回帖 • 8 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...