美文网首页收藏iosiOS开发iOS相关
iOS的反编译和代码混淆

iOS的反编译和代码混淆

作者: yks慷 | 来源:发表于2018-08-24 18:04 被阅读223次

    在 iOS APP 开发过程中,可能以为疏忽或者是工程时间赶,安全性这一方面往往会被忽视

    只需要拿到 ipa 文件,那么就可以获取很多数据,比如:

    (1)反编译就可以获取你的.h 文件的各种公开方法名,甚至可以拿到你加密的方法,这样黑客就可以直接模仿用户行为,造成不必要的损失

    (2)分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。所以一些保密的不能放到这些文件中

    (3)通过软件查看 APP 的沙盒,查看里面存储的 文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的 plist文件中)、图片等,在做登录功能时大部分的人都把用户信息放到NSUserdefault,如果是一些比较重要的,则需要进行加密在存储

    还有很多是需要我们继续向下学习的,这篇文章主要是说一下反编译和代码混淆

    反编译

    反编译有很多种方法,大致都是使用各种辅助工具来进行剖解 ipa 文件,主要的步骤就不一一细说,链接到的文章里都很详细,下面的文章是对比之后写的比较详细的,有兴趣的可以试试反编译

    (1)使用 class-dump 

    https://www.jianshu.com/p/2cd9636f9b37

    (2)使用 IDA

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

    https://blog.csdn.net/wqt925497045/article/details/79062405

    (3)使用 Hopper

    https://www.jianshu.com/p/384dc5bc1cb4

    代码混淆

    防止反编译的方法有很多,比如本地数据加密,URL编码加密,网络传输数据加密,借助第三方APP加固,代码混淆等,本文主要讲的是代码混淆方法.

    先附上自己做的 demo ,是使用 swift 制作的,原理和 OC 语言的一样

    (一)现在工程中建两个文件confuse.sh和func.list,第一个文件是用来放脚本,第二个文件是放需要加密的方法名字

    (二)将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"

    exportLC_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 -base6464| tr -cd'a-zA-Z'|head -c16

    }

    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 

    (三)填入脚本的路径

    注意:脚本的路径一定要对,不对的话会出现两个错误,可以运行,但是最后是没有代码混淆的,如下图,是放置的位置

    (四)最后在 func.list 中写入你需要混淆的方法,运行即可,第一次运行会自动生成一个文件codeObfuscation.h, 如果有对应的# define 生成,说明你已经成功了!

    到此为止已经成功把你的代码混淆了,如果不懂的或者有什么建议,可以留言,参考自念茜大婶

    参考地址:http://blog.csdn.net/yiyaaixuexi/article/details/29201699

    相关文章

      网友评论

        本文标题:iOS的反编译和代码混淆

        本文链接:https://www.haomeiwen.com/subject/loabiftx.html