iOS-代码简单混淆

这里生成混淆代码的方法我们通过shell脚本来实现,同时我们需要一个文档来写入我们需要进行混淆的方法名或是变量名。

  • 打开终端,cd到文件所在目录,使用
touch confuse.sh
touch func.list
  • 写入shell脚本
#!/bin/bash

# 这是Shell脚本,如果不懂shell,自行修炼:http://www.runoob.com/linux/linux-shell.html

# 以下使用sqlite3进行增加数据,如果不了解sqlite3命令,自行修炼:http://www.runoob.com/sqlite/sqlite-tutorial.html

#数据表名
TABLENAME="CodeObfuscationOC"

#数据库名
SYMBOL_DB_FILE="CodeObfuscation.db"

#要被替换的方法列表文件 Demo是项目名称
STRING_SYMBOL_FILE="$PROJECT_DIR/recorder/func.list"

#被替换后的宏定义在此文件里
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"

#维护数据库方便日后做bug排查
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
}

#生成随机16位名称
randomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16
}

#删除旧数据库文件
rm -f $SYMBOL_DB_FILE

#删除就宏定义文件
rm -f $HEAD_FILE

#创建数据表
createTable

#touch命令创建空文件,根据指定的路径
touch $HEAD_FILE
echo '#ifndef CodeObfuscation_h
#define CodeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE

#使用cat将方法列表文件里的内容全部读取出来,形成数组,然后逐行读取,并进行替换
cat "$STRING_SYMBOL_FILE" | while read -ra line;
do
if [[ ! -z "$line" ]]
then
random=`randomString`
echo $line $random

#将生成的随机字符串插入到表格中
insertValue $line $random

#将生成的字符串写入到宏定义文件中,变量是$HEAD_FILE
echo "#define $line $random" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
  • 添加run script命令
    js.png

    然后添加$PROJECT_DIR/recorder/confuse.sh

  • 给脚本授权

接下来还是在我们项目的文件夹下,通过终端给我们的脚本赋予最高权限

chmod 777 confuse.sh
  • 添加预编译文件pch并配置好pch文件路径(不再赘述)
  • 生成CodeObfuscation.h文件

这时候我们编译一下代码,会发现项目中多出了一个CodeObfuscation.h文件(如果没有,可到项目文件夹中找,我的就是在文件夹里找到的- -,然后拖进项目)。这个文件就是替换方法名的文件,我们在PCH文件中引入他。

  • 在func.list中添加准备替换的方法名

在项目中点开之前拖进来的func.list文件,然后在里面加入自己想要混淆的方法名或者变量名,\color{red}{注意:方法名和系统方法名不要相同}

add_Timer
removeTimer
testName
  • 结果

编译之后

#ifndef CodeObfuscation_h
#define CodeObfuscation_h
//confuse string at Thu Feb  6 10:15:57 CST 2020
#define add_Timer JgljUNExphlljzLU
#define removeTimer twZJFmYFQxcUaXFU
#define testName UGxeiEiyWEpdbgTa
#endif

看到 CodeObfuscation有这种变化,恭喜你,已经代码混淆成功。即使通过class-dump反编出来的,也只是一堆乱码。

  • 需要注意的几点

\color{red}{不可以混淆iOS中的系统方法;}
\color{red}{不可以混淆iOS中init等初始化方法;}
\color{red}{不可以混淆xib的文件,会导致找不到对应文件;}
\color{red}{不可以混淆storyboard中用到的类名;}
\color{red}{混淆有风险,有可能会被App Store以2.1大礼包拒掉。}

虽然比较繁琐,但是亲测有效,有问题可以写留言,对诸位有帮助的话我心甚慰!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆步...
    开心的小娇阅读 3,621评论 2 2
  • iOS表面上看来是比android安全的多的,在网络上针对android的加密保护也比iOS多得多,但是这并不意味...
    张囧瑞阅读 11,345评论 7 30
  • 目的 为了进一步增加应用的安全性,防止我们的应用程序很容易的被攻击者分析、破解、重打包,提高攻击者逆向分析应用的难...
    miracle洛洛阅读 9,802评论 3 21
  • 混淆原理 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 长话短说,直接上步骤。 混淆集成步骤 步骤...
    权宜平和阅读 41,307评论 68 110
  • 最近在听徐文兵老师的《中医太美之黄帝内经》,讲述了很多的行医经历和对黄帝内经的解释。其中老师聊到有一次为病人看病,...
    秋秋小Q阅读 789评论 0 0