• iOS 代码混淆(swift版)


    最近项目做了安全检查,得分有点低,主要就是因为代码没有混淆。

    最近研究代码混淆,顾记录一下整个经过。

    混淆原理

    同网上大部分一样,把类名、常量、变量等生成一串随机字符串。

    第一步:在相应的项目工程下新建一个confuse.sh 和 func.list文件

        $ cd /Users/xx/Desktop/xxx  
    
        $ touch confuse.sh
    
        $ touch func.list
    

    第二步:将新建的两个文件拖到项目工程中,并配置confuse.sh脚本

    把这两个文件拖入工程中,并在Build Prases 中添加脚本,如下图

    第三步:把下面代码复制到confuse.sh 中

    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="$PROJECT_DIR/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 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
            #将生成的随机字符串插入到表格中
            insertValue $line $ramdom
            echo "#define $line $ramdom" >> $HEAD_FILE
        fi
    done
    echo "#endif" >> $HEAD_FILE
    
    
    sqlite3 $SYMBOL_DB_FILE .dump
    

     第四步,修改权限

    chmod 755 confuse.sh

    第五步,pch 中,导入文件

    #import "CodeObfuscation.h"

    如果没有的话,就新建一个,并配置好 pch 路径

    编译一下

    如果报错"CodeObfuscation.h" file not found
    把 pch 文件中这一句注释掉,再次编译;

    //#import "CodeObfuscation.h"

    然后 把这一句打开,再次编译即可;

    第六步,把需要混淆的类和变量名写入 func.list 文件中

    编译就可以看到

     恭喜,已经成功了!

    参考文章:

    https://www.jianshu.com/p/5b6cbbe79e78

    https://www.jianshu.com/p/f3ad9c107757

  • 相关阅读:
    JAVA 时间 Date Long String类型之间的转换
    大公司,还是小公司?
    linux 安装ibuspinyin输入法
    vim windows linux文件格式转换
    editplus正则匹配查找替换
    SQL Server2005中逻辑处理阶段的几个新元素
    记centos6下安装redis2.6过程
    git命令行常用操作及在linux下push到github项目中遇到的问题
    记centos6默认python2.6升级2.7及安装easy_install过程
    多级分类的级联查询sql
  • 原文地址:https://www.cnblogs.com/lion-witcher/p/13043080.html
Copyright © 2020-2023  润新知