代码混淆&反编译

花了小半天的时间整了下代码混淆以及反编译...看了那么多帖子很多都是讲的模糊两可,基本都是要在自己去琢磨琢磨。默默的自己补一篇文章吧,新手少走点弯路哈。
代码混淆主要就是不让自己暴露在.h文件中的代码让别人随便看,增加点安全性。当然,还可以遮羞,嘿嘿~代码风格写的不好防止被看到。

1、安装class-dump

先用终端检测一下是否存在

class-dump

安装的就不讲了,推荐一篇帖子写的很赞的哈,class-dump在本文中主要是用来反编译。

2、创建文件

随意位置创建一个文件夹,反正最后是需要将整个文件夹添加到工程进去的。
终端命令:

cd 文件夹路径
touch confuse.sh    //用于存放脚本
touch func.list     //用于存放需要混淆的变量或者函数

将文件夹添加到工程,并新建.h文件: codeObfuscation.h用于存放混淆前后的代码(宏定义) 以及pch文件:PrefixHeader.pch
注意:有的人喜欢把codeObfuscation.hPrefixHeader.pch一次性用终端创建了,但是对应的头需要另外自己写个人嫌麻烦,还是比较喜欢直接在工程里面直接创建哈。
配置PrefixHeader.pch文件:
导入#import "codeObfuscation.h",以及设置pch文件的prefixHeader文件路径

pch文件路径配置.png

3、confuse.sh脚本

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#修改成相应的文件路径
STRING_SYMBOL_FILE="$PROJECT_DIR/Ninety/Confuse/func.list"
#修改成相应的文件路径
CONFUSE_FILE="$PROJECT_DIR/Ninety"
HEAD_FILE="$PROJECT_DIR/Ninety/Confuse/codeObfuscation.h"
export LC_CTYPE=C
#取以.m或.h结尾的文件以+号或-号开头的行 |去掉所有+号或-号|用空格代替符号|n个空格跟着<号 替换成 <号|开头不能是IBAction|用空格split字串取第二部分|排序|去重复|删除空行|删掉以init开头的行>写进func.list
#注意:需要将zyg换成你自己的函数前缀
#注意:如果需要自动混淆的请加上对应的前缀,如果只是混淆部分的又没有前缀,请注释此部分代码,否则只会混淆带有前缀的函数
# 也就是所谓的自动混淆了,如果不需要就请注释掉,如果是自动混淆就没法混淆变量,只能混淆函数
#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 "/^zyg_/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 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
insertValue $line $ramdom
echo "#define $line $ramdom" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump

请注意看脚本的内容,里面的路径例如func.listcodeObfuscation.h的路径需要修改成相应自己工程的文件路径
以及脚本里面,修改codeObfuscation.h的代码,也需要修改成相应的文件名

脚本中注意部分#grep请细看那边的解释,有详细注明所谓的自动混淆、以及混淆变量

注意:如果没有修改成相应的文件路径或者文件名的话 在编译的时候会报错:***/no such file or dictory之类的错误,反正就是找不到func.listcodeObfuscation.h文件

5、配置confuse.h路径

配置路径就看图吧,如果没有配置项目没法编译直接报错哈。


confuse.h路径.png

当然这边也需要授权,下文会讲到。

6、配置需要混淆的函数或者变量

func.list将需要混淆的函数或者变量放进去,如图:


混淆的函数或者变量.png

7、confuse.sh文件授权

完成以上操作后,发现编译或者运行后,报错(贴个网络图,别介意懒得再运行自己的工程):


未授权错误.png

confuse.sh没有权限,那就给他授权哈,打开终端,进入confuse.sh文件夹:

cd 存放confuse.sh的文件夹路径
ls -l confuse.sh    //可以先查看下confuse.sh的权限
chmod a+x confuse.sh    // 给权限,a是指所有人
//chmod 755 confuse.sh 用此命令给权限也是可行的

运行成功后的混淆

看图,不说话。


运行成功图.png

当然也可以查看codeObfuscation.h文件,每次运行混淆后的方法名都不一样

codeObfuscation.h.png

8、calss-dump反编译

将需要反编译的ipa文件解压(归档),获取到Payload文件夹,显示包内容找到项目名的文件,如图:


反编译的文件.png

打开终端:

class-dump -H /Users/zhouyonggui/Desktop/Ninety\ 2018-07-17\ 17-07-43/Payload/Ninety.app/Ninety  -o /Users/zhouyonggui/Desktop/Confuse 

注意-H需要大写 对应的后面是需要反编译的文件路径;-o需要小写哈,后面跟着反编译后需要存放的文件路径

总结

总的就讲这些吧,demo暂时没有后面会上次,因为我直接把代码混淆直接做到项目上,现在懒...就没弄demo了哈哈。如果在做代码混淆的时候有问题可以留言,互相学习哈。
顺便附上参考的连接,都写的很不错哈,也很类似只是有些没有说明:
iOS 代码混淆基本处理
iOS安全攻防(二十三):Objective-C代码混淆
iOS代码混淆----自动
iOS代码混淆
iOS class-dump反编译和代码混淆
class-dump最新安装方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 移动互联网时代,安卓应用被反编译已经不是什么新鲜事了。iOS系统安全性非常高,很少出新漏洞,但是在各位工程师的不懈...
    蜗牛非牛阅读 5,331评论 1 16
  • iOS表面上看来是比android安全的多的,在网络上针对android的加密保护也比iOS多得多,但是这并不意味...
    张囧瑞阅读 6,196评论 7 30
  • APP 一般经常做的网络参数加密解密,加密方法有base64、MD5、AES、RSA、DES等加密方法、这些加密一...
    flyrees阅读 1,209评论 1 3
  • 📣本文内容 一)为什么要进行代码混淆 二)代码混淆的两种方法(①宏替换 ②脚本实现替换)本文github地址,敬请...
    wg689阅读 5,121评论 17 65
  • 一. 为什么要代码混淆? 系统安全性很高是iOS一大特征,上传到appstore的应用,虽然已经被系统加密,但并非...
    突刺刺阅读 1,506评论 1 0