iOS代码混淆

1、先创建两个文件func.list和confuse.sh,并且用命令行修改这两个文件的权限,不修改权限则会编译报错。

$chmod 777 func.list
$chmod 777 confuse.sh

2、将如下脚本代码复制到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

3、将需要混淆的方法名写入func.list文件,只需要方法名,我定义了一个test方法,然后将方法名test写入func.list文件中(注意有参数的方法不要加冒号)


定义了一个test方法.png

在func.list文件中写入需要混淆的方法名.png
  • 注意:只需要写入方法名,如果方法带参数则去掉冒号
    比如:
-(void)createView:(CGRect)frame color:(UIColor *)color;
要写成  
createView
color

而不是
createView color
更不是
createView: color:
  • 事实上上面的脚本会将func.list文件中的方法名生成对应的宏,并用随机的字母序列替换,我们完全可以不用脚本,手动完成这个过程。
#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h
//confuse string at Fri Sep 28 14:21:29 CST 2018
#define test CaAaWrvilwElJBOY     //这就是为test生成的宏
#endif

4、为项目添加pch文件

5、在pch文件中#import "codeObfuscation.h"头文件,添加该头文件就开启了代码混淆,不添加则表示关闭代码混淆。codeObfuscation.h是脚本中定义的。

在pch文件中import codeObFuscation.h头文件.png

6、修改工程Build Phases配置运行脚本


修改工程配置.png

7、command+b编译项目即可完成混淆

8、利用class-dump查看混淆后的结果,我这里利用class-dump导出了工程里的头文件,可以看到test被混淆成了euJNUKhcYnuGttSk


[图片上传中...(混淆后的结果.png-f292ef-1538107206323-0)]

混淆后的结果.png

参考链接

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

推荐阅读更多精彩内容

  • 代码易读字符串混淆 混淆分许多思路,比如: 1)花代码花指令,即随意往程序中加入迷惑人的代码指令 2)易读字符替换...
    Mikayla321阅读 7,586评论 5 13
  • 前言 什么!我们的代码拿去安全扫描啦?什么!还扫描出来问题啦?什么!源码都别看到啦? 居于上一篇文章iOS简单逆向...
    甘邦阅读 18,176评论 24 40
  • 该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我...
    iLeooooo阅读 542评论 0 0
  • app风靡的时代,总有一些奇葩的需求。为了刷量,刷排名,制作壳包,为了通过苹果爸爸审核,想到代码混淆,垃圾代码等策...
    二斤寂寞阅读 23,019评论 11 52
  • 一. 为什么要代码混淆? 系统安全性很高是iOS一大特征,上传到appstore的应用,虽然已经被系统加密,但并非...
    突刺刺阅读 1,592评论 1 0