代码混淆

411 阅读1分钟

代码混淆选择性混淆步骤

代码混淆

选择性混淆

步骤

1、创建 confuse.sh 和 func.list 文件

confuse.sh —— 就是脚本文件,将需要混淆的 属性名 和 方法名 用随机字符串换

func.list —— 用来罗列需要混淆的 方法名 和 属性名 。

$ touch confuse.sh
$ touch func.list

2、添加进项目

3、添加运行脚本

4、设置脚本相对路径

这里设置的是 根路径;可以根据情况,放置到文件夹下

5、编写 脚本文件 内容

在 Xcode 中,对 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、设置权限 —— Permission denied

如果直接进行 command + B 编译

/Users/Company/Library/Developer/Xcode/DerivedData/lottery-dwewlqubikmoxoejkcmvvcncfvcg/Build/Intermediates.noindex/lottery.build/Debug-iphoneos/lottery.build/Script-68BE413C21073C8B0059B160.sh: line 2: /Users/Company/Desktop/GiteeRepository/cp55new/lottery_new/confuse.sh: Permission denied

这时候,要进行 脚本权限设置

进入项目目录下
$ chmod 755 confuse.sh

7、进行编译

进行 command + B 编译之后,在项目目录下,会有一个 codeObfuscation 文件;将它拖进项目中

8、pch文件内,添加头文件

#import "codeObfuscation.h"

9、添加要混淆的方法名,属性名

1. 类方法
2. 实例方法
	2.1 实例方法,如果是多个参数;把冒号之前的<方法字段>都复制进去
3. 属性

10、运行程序 —— 成功检验