• iOS 源代码混淆(初步混淆)


    我们可以用classdump对原程序进行 dump,像上篇文章( Class-dump 安装和使用记录(导出应用的头文件)),我们可以看到所有.h 文件全暴露了(如下图)

    点击HWAccount.h后,里面的函数名,属性名也一样清清楚楚:

    这样就相当于在裸奔,这时候我们就需要用到代码混淆了。简单点讲,就是把你的这些个用户名和函数名弄得没有可读性,比如你的用户名的变量名定义为 userName,那你自己用肯定是正常的,如果黑客们 dump 出来的这个变量名会变成 abcd 或 1234 ,这样他也就不清楚你这是用来干吗的了。

    第一、在工程项目路径中建立一个confuse.sh、一个func.list文件

       1、先打开终端,然后 cd 到你的项目工程路径下:

    $ cd /Users/yoowei/Desktop/学习资料(hello)/重要资料/代码混淆实验/yoowei

      2、创建两个文件,一个 confuse.sh,一个 func.list

    $ touch confuse.sh

    $ touch func.list

      3、这时候我们打开这个工程文件夹,可以看到,这两个文件已经创建好了:

    4、打开工程,把刚才创建的两个文件加进去,右键你的项目蓝色标志,然后选择 Add Files to yoowei:

    5、点击 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 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  

    脚本来源于:http://blog.csdn.net/yiyaaixuexi/article/details/29201699

    6、在 .pch 文件中引用文件

    一般的时候,在添加后会报错,因为脚本文件还没有被引用

    第二、配置 Build Phase 

    1、添加 Run Script

    2、配置Run Script

    $PROJECT_DIR/confuse.sh

    3、开启权限

    然后再回到终端,同样先 cd 到工程目录下,接着我们要打开刚才 .sh 这个脚本文件的运行权限,因为默认是没有这个权限的,在终端输入以下指令:

    $ chmod 755 confuse.sh

    回车,回到我们的工程,先 command + b 编译一下工程,然后再把我们刚刚注释掉的那句打开( .pch文件报错的)

    再次 command + b 编译,问题解决,编译成功。

    第三、在  func.list 文件里,写入待混淆的函数名

    需要混淆的属性跟函数名,在 fun.list 就这么列出来就好了:

    大功告成!现在 command + b 运行一下,然后在哪里看结果呢,请看这里:

    在来到HWAccount.h 发现:

     
    最后,我发现整个项目中所有用到name的地方都被替换成了宏,反而跑不起来了,这个需要研究解决?
    鉴于此,我们在做代码混淆的时候,可能要一个一个的弄,别出错了。或者不要在pch文件引用也是一个解决方案 。总之要十分小心。
    下面用class-dump弄过之后的结果和前文对照一下:还是有点作用的。
     
    感谢:http://blog.csdn.net/yiyaaixuexi/article/details/29201699
  • 相关阅读:
    java-以月为单位,得到一年中某一个月份的范围
    计算两个时间段相差几个月(包含相差的哪些月份)
    单个进程最大线程数
    Dell PowerEdge R720内存安装原则
    Java [parms/options] range -b 100 -c 10 -i 100 -t 300 -s 180
    PhysicalDrive
    classpath和环境变量设置
    MySQL正则表达式
    MySQL模式匹配(LIKE VS REGEXP)
    ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析
  • 原文地址:https://www.cnblogs.com/richard-youth/p/7642446.html
Copyright © 2020-2023  润新知