APP安全之代码混淆防止反编译查看真实的头文件函数声明
现在有的公司对自己的爱屁屁(APP)安全上有重视,所以本篇讲一下代码混淆,即使别人反编译出来,也看不出来头文件的信息.
上菜:
1.首先安装class-dump,下载地址:http://stevenygard.com/projects/class-dump
下载完打开后
把class-dump写入到usr/bin,发现提示:
Operation not permitted
后来发现原因是不可写,有解决办法,但是没用,踩过的坑就不说了,下面直接上
打开终端输入:open usr/local/bin
然后把class-dump 拖进去
终端输入:sudo chmod 777 /usr/local/bin/class-dump 更改权限
再输入:class-dump 如果出现下图,说明成功:
开始测试:
新建一个工程,cd到工程路径下,然后创建两个文件:一个confuse.sh、一个func.list:
然后打开工程,应该是这样:
添加到工程里面:
一定要添加工程目录下,添加完之后一定是这样:
再重申一下,成功添加点击 confuse.sh(confuse.sh,和func.list必须添加到CodeConfusion目录下),现在要在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 CodeConfusion_codeObfuscation_h #define CodeConfusion_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
注意点:箭头指向的位置是你工程的名字
添加pch文件,一定要设置pch的路径, 不会的自行百度. 在pch 文件添加 #import "codeObfuscation.h"
配置 Build Phase:添加 Run Script
添加脚本路径:
配置好 Run Script然后再回到终端,同样先 cd 到工程目录下,接着我们要打开刚才 .sh 这个脚本文件的运行权限,因为默认是没有这个权限的,在终端输入以下指令:
如果不执行命令,发现会报错的.
在ViewController里面定义几个方法:
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (nonatomic,copy)NSString *test1; - (void)cdm_method; - (void)cdm_testStr:(NSString *)string cdm_number:(NSUInteger)num; - (void)cdm_aaaaaa; @end
在 func.list 文件里,写入待混淆的函数名:
列出需要混淆的,大功告成!现在 command + b 运行一下,然后在哪里看结果呢,请看这里:
查看codeObfuscation.h,你会发现,多了好多宏定义,其实就是我们刚才的字段来的:
文件所在位置:
多出的宏定义:
1,show in finder 拖进iTunes,生成app
把ipa拿出来,放到桌面
修改后缀名字:把ipa修改为zip:
解压zip
打开文件夹:
使用一下命令:
-H 后面是上面wenjian的路径 -o 后面是自己随便起的文件夹名字. Code文件夹在HOME下(就是你电脑上面的🏠)
打开Code:
是不是很神奇? ...才怪, 打开ViewController看看,发现:
是不是你自己定义的都看不出来了
在看工程里面,你的函数应该也变色了:
最后,有什么不清楚可以留言,附上Demo地址: https://github.com/domanc/CodeConfusion.git