dump
作用
导出头文件
下载地址
http://stevenygard.com/projects/class-dump/
安装方式
把dmg打开,把文件class-dump放到/usr/local/bin目录下,就完成安装
使用
1、因为下载下来的iOS安装包一般都是ipa文件,但是dump的需要是app文件,所以需要将ipa文件转换为app文件,通过右击ipa文件,通过归档实用工具的方式提取出来app文件。
2、执行dump
class-dump -S -s -H app文件路径 -o dump出的头文件路径
结果
头文件都大白于天下了
混淆部分头文件
方案一 手动
1、创建脚本文件 confuse.sh,具体文件内容见下
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/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
在这里,会生成一个sqlite数据库文件,但是如果不想保存数据库文件的话,将脚本改写成
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/codeObfuscation.h"
export LC_CTYPE=C
ramdomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}
rm -f $HEAD_FILE
touch $HEAD_FILE
echo '#ifndef codeObfuscation_h
#define 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
echo "#define $line $ramdom" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
2、将混淆脚本confuse.sh放到工程目录下
3、在工程对应的pch文件中添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)
#import "codeObfuscation.h"
4、配置Build Phase
在工程Build Phase中添加执行脚本操作
5、创建函数名列表func.list,写入待混淆的函数名,如:
-(void)sample;
-(void)seg1:(NSString *)string seg2:(NSUInteger)num;
就这样写:
sample
seg1
seg2
6、并将文件放置于与confuse.sh脚本同级
mv func.list your_proj_path/
5.编译查看结果
直接build,混淆脚本会在编译前运行,进行字符随机替换,并且每次build的随机字符不同
如果在debug过程中,不需要进行混淆
直接在工程中将codeObfuscation.h文件移除即可
该方式实现了对部分指定字符串进行了混淆,实现很容易,并且可以通过codeObfuscation.h查看混淆前和混淆后的字符串的对比,可以根据文件进行崩溃时的相关问题的查找
如果一些代码是被pod进来的,那么不要对这些文件的方法名称进行混淆,要不就会引起崩溃
方案二、Camo全自动混淆
方案三、SMC(self modifying code),不能上线App Store
Hopper
下载地址:https://www.hopperapp.com
参考文章
- https://www.jianshu.com/p/85d951941c45
- 《iOS应用逆向工程(第2版)》
- 《macOS软件安全与逆向分析》
网友评论