博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C代码混淆
阅读量:4540 次
发布时间:2019-06-08

本文共 2064 字,大约阅读时间需要 6 分钟。

class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码。

混淆思路

混淆分许多思路,比如:花代码花指令,即随意往程序中加入迷惑人的代码指令、易读字符替换等等。防止class-dump出可读信息的有效办法是易读字符替换。

混淆时机

希望在开发时一直保留清晰可读的程序代码,方便自己。同时,希望编译出来的二进制包含乱七八糟的混淆后的程序代码,恶心他人。因此,可以在Build Phrase 中设定在编译之前进行方法名的字符串替换。

操作步骤

1.创建项目CodeObfuscation

2.切换到项目下

$ cd desktop/CodeObfuscation

3.在该目录下,执行命令创建两个文件:

confuse.sh: 存放混淆的脚本

func.list: 需要混淆的方法、变量名

touch confuse.sh func.list

4.创建文件,右键项目名称,把这两个文件导进来项目中来

1501610-20181008161223785-1512794340.png

5.打开 confuse.sh 文件,添加如下脚本:

#!/usr/bin/env bashTABLENAME=symbolsSYMBOL_DB_FILE="symbols"STRING_SYMBOL_FILE="func.list"HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/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_FILErm -f $HEAD_FILEcreateTable touch $HEAD_FILEecho '#ifndef Demo_codeObfuscation_h#define Demo_codeObfuscation_h' >> $HEAD_FILEecho "//confuse string at `date`" >> $HEAD_FILEcat "$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    fidoneecho "#endif" >> $HEAD_FILEsqlite3 $SYMBOL_DB_FILE .dump

6.点击工程名称 — > Build Phase — > Run Script,配置 Build Phase

1501610-20181008161257993-1126966933.png

7.添加 $PROJECT_DIR/confuse.sh ,这句命令的意思的应用每次启动的时候,都会先去跑我们confuse.sh 脚本

1501610-20181008161319558-1355587834.png

8.编译脚本出现如下报错信息:

1501610-20181008161340649-771888769.png

解决办法:切换到工程目录下,输入命令行 chmod 755 confuse.sh 给脚本授权

$ cd Desktop/CodeObfuscation$ chmod 755 confuse.sh

9.编译项目,在工程目录下,会出现一个codeObfuscation.h文件,导入项目

1501610-20181008161357293-805176149.png

混淆方法名

1.打开 func.list 文件,把需要混淆的方法名写进去

1501610-20181008161421270-829535709.png

2.在test所在类中导入头文件#import "codeObfuscation.h",然后编译,打开codeObfuscation.h文件,可以看到test方法被替换为bXZJUdtRaXWCZDZP

1501610-20181008161438584-969565647.png

3.替换效果如下:

1501610-20181008161449929-956572323.png

Demo

备注:

1.系统的方法

2.XIB中拖线的控件名

3.注意storyboard的类名,如果被混淆,跳转可能会出问题

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

参考链接

转载于:https://www.cnblogs.com/allen12/p/9754958.html

你可能感兴趣的文章
【C++】继承时构造函数和析构函数
查看>>
opencv源代码之中的一个:cvboost.cpp
查看>>
swift
查看>>
pycharm 快捷键
查看>>
Linux常用命令
查看>>
.net中的设计模式---单例模式
查看>>
安装程序工具 (Installutil.exe)22
查看>>
如何简单解释 MapReduce算法
查看>>
面向接口编程详解(二)——编程实例
查看>>
解决java.lang.NoClassDefFoundError: org/apache/log4j/Level
查看>>
端口号
查看>>
mysql for macOS安装
查看>>
HDU5092——Seam Carving(动态规划+回溯)(2014上海邀请赛重现)
查看>>
语言基础
查看>>
C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
查看>>
C#中字符串转换成枚举类型的方法
查看>>
Airplace平台
查看>>
TinyOS实例介绍
查看>>
我是怎么定义微服务平台?
查看>>
python random
查看>>