zoukankan      html  css  js  c++  java
  • iOS安全攻防之代码混淆

      iOS 代码安全之代码混淆实践:

      前言:

      在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件,这样很方便“坏人”了解工程代码结构,参数传输,严重危及了应用安全。为了应对反编译,需要对工程进行“代码混淆”。
      正文:
      首先在工程目录下新建个存放反编译文件的文件夹,然后拖进工程。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      在 Config 文件目录下新建 .sh 和 .list 文件。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      拖进工程。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      添加 编译脚本代码。
    #!/usr/bin/env bash
    
    TABLENAME=symbols
    
    SYMBOL_DB_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/symbols"
    
    STRING_SYMBOL_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/func.list"
    
    HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/TestCodeConfuscation.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 TestCodeConfuseUse_TestCodeConfuscation_h
    
    #define TestCodeConfuseUse_TestCodeConfuscation_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

      添加脚本编译选项。

      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
    command + B ,发现运行报错(Permission denied)。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      解决方案:
      终端输入进入Config目录,输入 chmod 755 confuse.sh , 回车。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
          然后再编译一下即可。打开 Config 目录,会发现多了两个文件。symbols 和 TestCodeConfuscation.h
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      新建个 prefix header 文件,引入  TestCodeConfuscation.h
        iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      重新 build 
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      接下来就可以在 func.list 文件中 添加你所需要混淆的代码了。
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
      编译之后,会发现在 TestCodeConfuscation.h 中生成了混淆后的方法或变量名
      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客

      此时再用 class-dump 一下,会发现已经完成混淆了。

      iOS 代码安全之代码混淆实践 - Zach Toby - Zach Toby的博客
         大功告成。

      文章部分参见念茜的博客

  • 相关阅读:
    luogu P3295 [SCOI2016]萌萌哒
    luogu P4916 魔力环
    CF997C Sky Full of Stars
    CF961G Partitions
    android屏蔽软键盘并且显示光标
    设置和获取Android中各种音量
    自定义广播
    发送广播
    android取高度
    Java数字格式化
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/6892538.html
Copyright © 2011-2022 走看看