iOS 代码混淆

徘徊边缘 提交于 2019-12-05 06:19:31

1、代码混淆?

别人通过class-dump反编译你的应用后,不会显示你自定义的方法名(系统方法名除外),增加其对你应用的理解难度。注意:这样并不能阻止别人反编译你的应用。

2、自动代码混淆

1)新建以下四个空文件:func.list、confuse.sh、Confuse.h、*.pch

2) 在confuse.sh文件中添加以下代码


#!/usr/bin/env bash

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
# func.list文件路径
STRING_SYMBOL_FILE="$PROJECT_DIR/BYConfuseDemo/ConfuseSouce/func.list"
# 项目文件路径
CONFUSE_FILE="$PROJECT_DIR/BYConfuseDemo"
# .h文件路径
HEAD_FILE="$PROJECT_DIR/BYConfuseDemo/ConfuseSouce/Confuse.h"

export LC_CTYPE=C

#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
grep -h -r -I  "^[-+]" $CONFUSE_FILE  --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *\^\/\{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^nhb_/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 Confuse_h
#define CodeConfuse' >> $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)在Xcode-->Target--->Build Phases--->添加Run Script

4)安装class-dump

下载class-dump

将下面的文件class-dump复制到/usr/local/bin目录下

终端输入class-dump,显示下面的界面就说明安装正确

 

5) 在viewController写入一些方法,前缀带nhb_和不带前缀的方法,方便class-dump后进行比较

 

运行程序,可能会报错,有两种情况:

No such file or directory 这种是因为你文件的路径没有找到,通过在项目中New Group创建文件夹在Show in Finder中是找不到这个文件的,要在项目的Show in Finder中创建文件夹,然后拖到项目中

Permission Denied sh文件权限被拒绝,解决办法:打开终端,cdconfuse.sh文件夹目录下,输入命令  chmod 755 confuse.sh

编译成功后,加入头文件

运行成功后,打开.app文件,点击“显示包内容”,找到“BYConfuseDemo”文件

终端输入命令

$ class-dump -H BYConfuseDemo的文件路径 -o 导出的.h文件存放文件夹路径

打开导出的.h文件,方法名变成毫无意义的字符串

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!