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

    首先是安装和使用dump:

      下载dump地址

      1.选择class-dump-3.5.dmg 下载;

      2.下载之后,点击打开,复制class-dump文件,

      3.shift+command+G 打开finder 的路径,输入/usr/local,并把class-dump粘贴到 /bin 这个文件中,(这个文件是隐藏的文件夹)

    这样就可以开始玩dump了,

      4.找个项目(跑过真机的)拿到app包(或包里的可执行文件),

      5.在桌面创建一个文件夹,用于存放反编译出来的头文件;

      6.终端:class-dump -H 项目包路径 -o 解析出来的文件路径

      7.之后就会见到有多个.h文件被解析出来,如果没有做代码混淆的话,可以看到项目中的很多属性/方法都可以看到,

    再来说一下代码混淆:

      1.创建一个新的项目,Class-dump-Test

      2.为项目创建一个 .pch文件,并为pch文件配置路径,$(SRCROOT)/Class-dump-Test/pch文件名.pch

      3.终端:cd 项目路径;

      4:touch confuse.sh

      5:touch func.list 为项目创建2个文件,并添加到项目中,

      6:为脚步文件confuse.sh设置路径,

      

      7.创建codeObfuscation.h 在这个文件中可以看到混淆后的代码,并声明到.pch文件中

      其中如果手动选择要混淆的方法或属性,就把方法/属性写到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"

    #/* 针对特殊字符的代码混淆**/

    CONFUSE_FILE="$PROJECT_DIR/Class-dump-Test"

    HEAD_FILE="$PROJECT_DIR/Class-dump-Test/codeObfuscation.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 "/^wq_/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 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

    编译一下:

    这就算是成功了,自己可以反编译一下,看看还能不能开到明文的方法/属性

      遇到的问题:在为脚本文件设置好路径后,编译出错:Permission Denied。要获取脚步权限,

      终端:chmod 755 scriptname.sh  再次编译就没事了!

      

      如果有什么不对的,可一定要告诉我一下哈!

  • 相关阅读:
    逻辑实现与物理实现
    逻辑实现与物理实现
    可逆矩阵的逆
    可逆矩阵的逆
    算法 Tricks(三)—— 判断序列是否为等差数列
    算法 Tricks(三)—— 判断序列是否为等差数列
    C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
    AndroidMainifest标签使用说明3——&lt;activity-alias&gt;
    支持向量机通俗导论(理解SVM的三层境地)
    iOS中,MRC和ARC混编
  • 原文地址:https://www.cnblogs.com/liuwenqiang/p/8625935.html
Copyright © 2011-2022 走看看