代码混淆笔记

借鉴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/[ ]*$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

你可能感兴趣的:(代码混淆笔记)