美文网首页
从头学习OC代码逆向和保护(更新ing)

从头学习OC代码逆向和保护(更新ing)

作者: 杨闯 | 来源:发表于2018-04-09 11:13 被阅读78次

    dump

    作用

    导出头文件

    下载地址

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

    安装方式

    把dmg打开,把文件class-dump放到/usr/local/bin目录下,就完成安装

    使用

    1、因为下载下来的iOS安装包一般都是ipa文件,但是dump的需要是app文件,所以需要将ipa文件转换为app文件,通过右击ipa文件,通过归档实用工具的方式提取出来app文件。
    2、执行dump

    class-dump -S -s -H app文件路径 -o dump出的头文件路径
    
    结果

    头文件都大白于天下了

    混淆部分头文件

    方案一 手动

    1、创建脚本文件 confuse.sh,具体文件内容见下

    #!/usr/bin/env bash
    
    TABLENAME=symbols
    SYMBOL_DB_FILE="symbols"
    STRING_SYMBOL_FILE="func.list"
    HEAD_FILE="$PROJECT_DIR/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
    

    在这里,会生成一个sqlite数据库文件,但是如果不想保存数据库文件的话,将脚本改写成

    STRING_SYMBOL_FILE="func.list"
    HEAD_FILE="$PROJECT_DIR/codeObfuscation.h"
    export LC_CTYPE=C
    
    ramdomString()
    {
    openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
    }
    
    rm -f $HEAD_FILE
    
    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
    echo "#define $line $ramdom" >> $HEAD_FILE
    fi
    done
    echo "#endif" >> $HEAD_FILE
    

    2、将混淆脚本confuse.sh放到工程目录下
    3、在工程对应的pch文件中添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)

        #import "codeObfuscation.h"  
    

    4、配置Build Phase
    在工程Build Phase中添加执行脚本操作

    $PROJECT_DIR/confuse.sh

    5、创建函数名列表func.list,写入待混淆的函数名,如:
    -(void)sample;
    -(void)seg1:(NSString *)string seg2:(NSUInteger)num;

    就这样写:
    sample
    seg1
    seg2

    6、并将文件放置于与confuse.sh脚本同级
    mv func.list your_proj_path/

    5.编译查看结果
    直接build,混淆脚本会在编译前运行,进行字符随机替换,并且每次build的随机字符不同

    如果在debug过程中,不需要进行混淆
    直接在工程中将codeObfuscation.h文件移除即可
    该方式实现了对部分指定字符串进行了混淆,实现很容易,并且可以通过codeObfuscation.h查看混淆前和混淆后的字符串的对比,可以根据文件进行崩溃时的相关问题的查找
    
    如果一些代码是被pod进来的,那么不要对这些文件的方法名称进行混淆,要不就会引起崩溃
    

    方案二、Camo全自动混淆

    下载地址:http://yonsm.net/camo/

    方案三、SMC(self modifying code),不能上线App Store

    Hopper

    下载地址:https://www.hopperapp.com

    参考文章

    相关文章

      网友评论

          本文标题:从头学习OC代码逆向和保护(更新ing)

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