借鉴md5 + base64替换了原文中的随机数、自动提取加密方法、bjective-C代码混淆、实现正则过滤方法名,谢谢!
一、环境配置
执行
$ brew install md5sha1sum
安装,需要用到 md5sum 命令
链接:http://www.jianshu.com/p/bd1958fc5225 http://www.jianshu.com/p/0d42e5c6361c
二 、常见错误
1、Showing All Messages
confuse.sh: Permission denied
解决办法:切换到工程目录下,输入命令行chmod 755 confuse.sh
给我们的脚本本间授权2、找不到 codeObfuscation.h
解决方法 : 在.pch中先注释 #import "codeObfuscation.h" 这句,待编译成功过一次后再打开。因为代码混淆本质上是把易懂的方法名替换为难懂的方法名,字符串替换本质是上一次编译后产生的MD5,生成宏,下次编译时直接替换。3、 No such file or directory
解决方法 :修改 confuse.sh 脚本文件中的路径,相匹配4、Duplicate declaration of method ':'
Expected selector for Objective-C method
解决方法:在.pch中先注释#import "codeObfuscation.h"
这句。因为在方法名MD5后的替换字符串未正常生成。
当在 codeObfuscation.h 文件中生成如下信息后,在.pch中打开 #import "codeObfuscation.h" 这句,再次运行,编译后的方法名,就是后面的BASE64字符串了
#define aes256DecryptDataWithkey NGUxNWQ4MjVhODAyNjljOWM5Y2IzZDk2YTZhNTdhNjcgIC0K
三、我的confuse.sh
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="$PROJECT_DIR/....../func.list"
CONFUSE_FILE="$PROJECT_DIR/......"
HEAD_FILE="$PROJECT_DIR/....../codeObfuscation.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/[ ]*</</"|awk '{split($0,b," ");print b[2];}'| sort|uniq |sed "/^$/d"|sed "/^init/d"|sed -n "/(正则表达式)/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
}
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
base=$(echo -n $line |md5sum |base64 | sed 's/\=//g')
echo $line $base
insertValue $line $base
echo "#define $line $base" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump