继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

iOS开发中代码混淆方法详解:使用脚本混淆方法名防止class-dump

iOSDevPro
关注TA
已关注
手记 78
粉丝 0
获赞 2

class-dump 可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码。

混淆思路

混淆分许多思路,比如:花代码花指令,即随意往程序中加入迷惑人的代码指令、易读字符替换等等。防止class-dump出可读信息的有效办法是易读字符替换。

混淆时机

希望在开发时一直保留清晰可读的程序代码,方便自己。同时,希望编译出来的二进制包含乱七八糟的混淆后的程序代码,恶心他人。因此,可以在Build Phrase 中设定在编译之前进行方法名的字符串替换。

操作步骤

1.创建项目CodeObfuscation

2.切换到项目下

$ cd desktop/CodeObfuscation

3.在该目录下,执行命令创建两个文件:

confuse.sh: 存放混淆的脚本

func.list: 需要混淆的方法、变量名

touch confuse.sh func.list

4.创建文件,右键项目名称,把这两个文件导进来项目中来

5.打开 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

6.点击工程名称 — > Build Phase — > Run Script,配置 Build Phase

7.添加 $PROJECT_DIR/confuse.sh ,这句命令的意思的应用每次启动的时候,都会先去跑我们confuse.sh 脚本

8.编译脚本出现如下报错信息:

1501610-20181008161340649-771888769.png

解决办法:切换到工程目录下,输入命令行 chmod 755 confuse.sh 给脚本授权


$ cd Desktop/CodeObfuscation
$ chmod 755 confuse.sh

9.编译项目,在工程目录下,会出现一个codeObfuscation.h文件,导入项目

除了手动混淆方法外,还可以使用专业工具如IpaGuard进行IPA文件级别的混淆。IpaGuard无需源码即可对iOS应用中的代码和资源进行混淆加密,支持多种开发平台,能有效增加反编译难度。

混淆方法名

1.打开 func.list 文件,把需要混淆的方法名写进去

2.在test所在类中导入头文件#import “codeObfuscation.h”,然后编译,打开codeObfuscation.h文件,可以看到test方法被替换为bXZJUdtRaXWCZDZP

3.替换效果如下:

1501610-20181008161449929-956572323.png

备注:

1.系统的方法

2.XIB中拖线的控件名

3.注意storyboard的类名,如果被混淆,跳转可能会出问题

这些都不能用这种方法混淆,会导致运行的时候出错

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP