zoukankan      html  css  js  c++  java
  • iOS 代码混淆

                  不过据我后来在网上查询很多人说,跑脚本的混淆,审核直接被拒。

    混淆分许多思路,比如:

    1)花代码花指令,即随意往程序中加入迷惑人的代码指令

    2)易读字符替换

    具体步骤:

    1.cd到你的工程目录下,创建两个文件

    confuse.sh: 存放混淆的脚本
    func.list:  需要混淆的方法、变量名
    

    这里写图片描述

    2.打开工程,把刚才创建的两个文件添加到工程中,在工程中再创建两个文件分别是pch文件和一个.h文件,并在pch中引入刚一同创建的.h

    这里写图片描述

    pch不会配置的童鞋看过来,会的童鞋可自动忽略这一步:

    这里写图片描述

    然后点击4的后边输入:$(SRCROOT)然后把pch拖进来,删除前边多余路径。
    如图:
    这里写图片描述

    (初学者尽量名字用这两个,否则可能会在后边的配置中出错)

    3.配置Phases

    这里写图片描述

    填写 $PROJECT_DIR/confuse.sh(注:这儿的confuse.sh的路径随你创建这个文件的位置而改变)

    这里写图片描述

    4.向脚本confuse.sh中添加代码

    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="func.list"
    
    CONFUSE_FILE="$PROJECT_DIR/HXTest"
    
    HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Confuse.h"
    
    export LC_CTYPE=C
    
    #取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
    grep -h -r -I  "^[-+]" $CONFUSE_FILE  --include '*.[mh]' |sed "s/[+-]//g"|sed "s/[();,: *^/{]/ /g"|sed "s/[ ]*</</"| sed "/^[ ]*IBAction/d"|awk '{split($0,b," "); print b[2]; }'| sort|uniq |sed "/^$/d"|sed -n "/^hx_/p" >$STRING_SYMBOL_FILE
    
    
    #维护数据库方便日后作排重,以下代码来自念茜的微博
    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 Confuse_h
    #define CodeConfuse' >> $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
    

    其中

    STRING_SYMBOL_FILE="func.list"
    
    CONFUSE_FILE="$PROJECT_DIR/HXTest"
    
    HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Confuse.h"
    #这里也要做修改
    echo '#ifndef Confuse_h

    均需要根据自己的进行修改(如果名字和位置和我的创建的一样,目前不需要修改)

    hx_是你在代码中要混淆的方法名和变量的前缀,方法变量前增加前缀是为了和系统方法区分开,可以根据自己写的方法自定义。

    5.编译

    此时编译应该会报一个没有权限的错误,此时,切换到工程目录下,输入命令行 chmod 755 confuse.sh 给我们的脚本本间授权,如图:

    这里写图片描述

    此时应该能顺利编译通过,混淆成功。

    这里写图片描述

    前边是混淆前的,后边是混淆后的名字。

    注意:

    1、 系统的方法

    2、XIB中拖线的控件名

    这些都不能用这个方法混淆,因为会导致运行的时候出错。

    参考

    念茜女神http://blog.csdn.net/yiyaaixuexi/article/details/29201699

    附反编译:

    1.1 Class-Dunp 简介

    Class-Dump是一款可以导出头文件的命令行工具,改程序用于检查objective - c运行时信息存储在Mach-O文件,它生成类的声明,类别和协议。

    1.2 Class-Dump 下载地址

    http://stevenygard.com/projects/class-dump/

    1.3 安装

    双击.dmg 文件打开,把里面的文件拖到 /usr/local/bin 目录下,因为是修改了系统的路径,所以需要输入本机的密码,这样就可以在终端使用 class-dump 命令了。

    1.4 使用

    注意这里dump的是应用后缀是.app而不是.ipa:

    然后打开终端,输入命令

    class-dump -H XXX.app -o XXX

    这里写图片描述

    -H 后面的内容为需要dump的 .app 文件路径

    -o 后面的内容为输出的头文件保存路径

    因为我是保存到桌面的,所以等命令执行完成之后,我就可以在桌面上找到Dump这个名字的文件夹了,并且里面已经装满了我们想要的头文件了

    打开ViewController.h,已经是混淆过的代码了

    2.1 什么是Hopper

    Hopper Disassembler是Mac上的一款二进制反汇编器,基本上满足了工作上的反汇编的需要,包括伪代码以及控制流图(Control Flow Graph),支持ARM指令集并针对Objective-C的做了优化。

    2.2 下载地址

    官网地址:https://www.hopperapp.com

    2.3 使用

    这个工具的强大之处,在于二进制文件在它面前,基本是毫无遮掩的,所有函数名,方法名,代码逻辑结构,你都可以一览无遗。

  • 相关阅读:
    LeetCode——字符串解码
    LeetCode——迷宫 i-ii
    JavaScript实现按照指定长度为数字前面补零输出的方法
    React 修改input按钮上文字
    HTML input可以输入相同的文件
    LeetCode——重新安排行程
    LeetCode——矩阵中的最长递增路径
    c++ vector push_back对象的时候存起来的是拷贝
    char* = "name" g++报告warn的原因
    虚函数表指针、父类成员变量、子类成员变量在内存中的位置关系
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/9485502.html
Copyright © 2011-2022 走看看