iOS源码混淆


出于对自己生产出代码的尊重,要对其负责,保护她的隐私,不被别人发现。我们希望在开发时一直保留清晰可读的程序代码,方便自己。同时,希望编译出来的二进制包含乱七八糟的混淆后的程序代码,恶心他人。

不讲了,发现完全控制不住自己,直接上问题。

iOS源码混淆

  • 强项目安全性
  1. 使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露。(下期在分享一下如何对源程序进行dump)在安全性的角度来讲,该项目已经处于高风险阶段了。比如:银行的客户端,交易平台等等。

  2. 首先需要得到两个文件 confuse.sh 和 func.list,

1)打开终端:cd -> 你工程的路径
2)创建两文件:touch -> confuse.sh and fund.list

  1. 打开工程加入刚创建好的两个文件


    addfile.png
  1. 当打开confuse.sh文件,里面并没有内容,里面是一个脚本文件,在最下面
  1. 在.pch中添加代码
#ifdef __OBJC__     
#import//添加混淆作用的头文件
#import"codeObfuscation.h" 
#endif  

6.添加Run Script

$PROJECT_DIR/confuse.sh
run script.jpg
  1. 添加脚本权限,confuse.sh这个脚本默认的权限是关闭的,打开终端到当前文件路径下,添加命令行$:
 chmod 755 confuse.sh
  1. 现在开始源码的混淆,打开func.list


    func.png

如上图所示,现在要混淆ViewDragController的方法,将这些方法名称粘出来贴到func.list中。如下图:


funclist.png

OK,这个时候已经大功告成了,咱们验证一下结果。

funcend.png

ps:这里有点局限性,大型项目只能对相对重要的方法、属性进行混淆,全部混淆工作量很大,当然这也是一个优点。

感谢阅读!!!

confuse.sh脚本内容


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 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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 📣本文内容 一)为什么要进行代码混淆 二)代码混淆的两种方法(①宏替换 ②脚本实现替换)本文github地址,敬请...
    wg689阅读 10,651评论 17 65
  • APP 一般经常做的网络参数加密解密,加密方法有base64、MD5、AES、RSA、DES等加密方法、这些加密一...
    flyrees阅读 5,023评论 1 3
  • 该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我...
    laitys阅读 3,795评论 0 12
  • 该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我...
    freesan44阅读 14,438评论 12 25
  • class-dump 可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善...
    无沣阅读 3,725评论 1 0

友情链接更多精彩内容