iOS开发/App安全/代码自动混淆笔记
2017-12-27 00:00
330 查看
点击上方“[b]iOS开发[/b]”,选择“置顶公众号”关键时刻,第一时间送达!
最近接触银行类项目,对app安全才有了些认识...比较尴尬,除了之前经常做的网络参数加密解密,以及防止数据重放之外,还提到了防范反编译的风险,其实Apple算比较安全的了,反编译过来也就看到.h文件....但把代码混淆还是会比较好些。
一、在项目根目录下新建confuse.sh 和 gbFunc.list 文件
说明:
confuse.sh 文件在编译过程中会执行gbFunc.list 用于自动混淆代码时,存放过滤出来需要混淆的方法名
touch confuse.shtouch gbFunc.list
二、新建GBConfuse.h
说明:
GBConfuse.h 是在自动混淆代码时,将会把自动生成的字符串定义成宏,存放在此文件,也便于查看。
注意:需要把.h文件移到项目文件外,因为放项目文件中,到时被反编译过来,还是能得到GBConfuse.h里面的东西的,就能通过比对,得到方法。(后面用class-dump反编译过来就明白了...)
三、在confuse.sh中添加如下代码
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#func.list路径STRING_SYMBOL_FILE="$PROJECT_DIR/GBFunc.list"
#项目文件路径CONFUSE_FILE="$PROJECT_DIR/Safedemo"
#Confuse.h路径HEAD_FILE="$PROJECT_DIR/GBConfuse.h"
export LC_CTYPE=C
#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.listgrep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *^/{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^GBSAFE_/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}
ramdomString(){openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}
rm -f $SYMBOL_DB_FILErm -f $HEAD_FILEcreateTable
touch $HEAD_FILE#这里也要做修改echo '#ifndef GBConfuse_h#define CodeConfuse' >> $HEAD_FILEecho "//confuse string at `date`" >> $HEAD_FILEcat "$STRING_SYMBOL_FILE" | while read -ra line; doif [[ ! -z "$line" ]]; thenramdom=`ramdomString`echo $line $ramdominsertValue $line $ramdomecho "#define $line $ramdom" >> $HEAD_FILEfidoneecho "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
需要修改的代码在于文件路径:
四、添加 Run Script
五、添加 PCH 文件
六、在ViewController中添加以"GBSAFE_"为前缀的测试方法
七、测试
运行报错如下:
原因是.sh文件没有权限,所以需要去开启权限。
在confuse.sh文件目录下,执行命令:
chmod 755 confuse.sh
运行成功!
先打包一个.ipa安装包进行测试!
先不进行代码混淆:
把.ipa文件类型改成.zip,解压得到.app文件
新建Hear文件夹用于保存反编译后得到的文件:
用class-dump进行反编译
class-dump -H 要破解的可执行文件路径 -o 破解后的头文件存放路径
得到没有进行代码混淆的文件:
可以看到都是项目中一些.h文件,打开可以看到完整的方法名....
然后客户说测试公司说不安全...
需要进行代码混淆...
在PCH文件中,引用GBConfuse.h:
重新打包..就可以得到混淆后的.ipa..
下面就是混淆后的结果。
总结:
其实,原理应该就是在编译过程中,把需要混淆的代码生成随机字符串进行替换....
来自: _Grabin
链接:http://www.jianshu.com/p/3a9952aa9ed2
iOS开发整理发布,转载请联系作者授权
【点击成为Android大神】
最近接触银行类项目,对app安全才有了些认识...比较尴尬,除了之前经常做的网络参数加密解密,以及防止数据重放之外,还提到了防范反编译的风险,其实Apple算比较安全的了,反编译过来也就看到.h文件....但把代码混淆还是会比较好些。
一、在项目根目录下新建confuse.sh 和 gbFunc.list 文件
说明:
confuse.sh 文件在编译过程中会执行gbFunc.list 用于自动混淆代码时,存放过滤出来需要混淆的方法名
touch confuse.shtouch gbFunc.list
二、新建GBConfuse.h
说明:
GBConfuse.h 是在自动混淆代码时,将会把自动生成的字符串定义成宏,存放在此文件,也便于查看。
注意:需要把.h文件移到项目文件外,因为放项目文件中,到时被反编译过来,还是能得到GBConfuse.h里面的东西的,就能通过比对,得到方法。(后面用class-dump反编译过来就明白了...)
三、在confuse.sh中添加如下代码
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#func.list路径STRING_SYMBOL_FILE="$PROJECT_DIR/GBFunc.list"
#项目文件路径CONFUSE_FILE="$PROJECT_DIR/Safedemo"
#Confuse.h路径HEAD_FILE="$PROJECT_DIR/GBConfuse.h"
export LC_CTYPE=C
#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.listgrep -h -r -I "^[-+]" $CONFUSE_FILE --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *^/{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^GBSAFE_/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}
ramdomString(){openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}
rm -f $SYMBOL_DB_FILErm -f $HEAD_FILEcreateTable
touch $HEAD_FILE#这里也要做修改echo '#ifndef GBConfuse_h#define CodeConfuse' >> $HEAD_FILEecho "//confuse string at `date`" >> $HEAD_FILEcat "$STRING_SYMBOL_FILE" | while read -ra line; doif [[ ! -z "$line" ]]; thenramdom=`ramdomString`echo $line $ramdominsertValue $line $ramdomecho "#define $line $ramdom" >> $HEAD_FILEfidoneecho "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
需要修改的代码在于文件路径:
四、添加 Run Script
五、添加 PCH 文件
六、在ViewController中添加以"GBSAFE_"为前缀的测试方法
七、测试
运行报错如下:
原因是.sh文件没有权限,所以需要去开启权限。
在confuse.sh文件目录下,执行命令:
chmod 755 confuse.sh
运行成功!
先打包一个.ipa安装包进行测试!
先不进行代码混淆:
把.ipa文件类型改成.zip,解压得到.app文件
新建Hear文件夹用于保存反编译后得到的文件:
用class-dump进行反编译
class-dump -H 要破解的可执行文件路径 -o 破解后的头文件存放路径
得到没有进行代码混淆的文件:
可以看到都是项目中一些.h文件,打开可以看到完整的方法名....
然后客户说测试公司说不安全...
需要进行代码混淆...
在PCH文件中,引用GBConfuse.h:
重新打包..就可以得到混淆后的.ipa..
下面就是混淆后的结果。
总结:
其实,原理应该就是在编译过程中,把需要混淆的代码生成随机字符串进行替换....
来自: _Grabin
链接:http://www.jianshu.com/p/3a9952aa9ed2
iOS开发整理发布,转载请联系作者授权
【点击成为Android大神】
相关文章推荐
- iOS开发/App安全/代码自动混淆笔记
- iOS 开发笔记 - 开发中如何实现自动检测更新APP
- iOS 开发笔记 - 开发中如何实现自动检测更新APP
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- iOS开发笔记--使用Auto Layout中的VFL(Visual format language)--代码实现自动布局
- iOS开发笔记--图片上传代码
- IOS布局笔记一(代码实现自动布局)
- ios开发代码笔记
- iOS: 学习笔记, 用代码驱动自动布局实例(swift)
- iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)
- iOS: 学习笔记, 用代码驱动自动布局实例
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- [ios]安全攻防之代码混淆的一个小工具
- 2011斯坦福大学iOS应用开发教程学习笔记(第二课)My First iOS App
- IOS开发笔记之app送审状态
- iOS安全攻防(二十三):Objective-C代码混淆