iOS对ipa包进行代码混淆《二》 ---代码混淆

接上一篇文章ipa包砸壳,接下来讲一下代码混淆。

混淆代码,我们需要生成两个文件confuse.sh和func.list。

confuse.sh是一个脚本文件,里边定义了混淆的一些算法,以及需要混淆方法的路径。

func.list是我们列举的一些需要混淆的方法。当然系统的方法不能混淆,不然一些库文件方法没办法正确加载。

1、首先,终端cd到文件目录,并且利用指令touch生成这两个文件

touch confuse.sh

touch func.list

不出意外,文件目录里已经有这两个文件了。然后我们将这两个文件放入的项目中。

2、然后,给confuse.sh文件添加脚本如下,可以复制粘贴(记得将里边混淆方法文件路径替换成你自己的)



#!/bin/bash

# 这是Shell脚本,如果不懂shell,自行修炼:http://www.runoob.com/linux/linux-shell.html

# 以下使用sqlite3进行增加数据,如果不了解sqlite3命令,自行修炼:http://www.runoob.com/sqlite/sqlite-tutorial.html

#数据表名

TABLENAME="CodeObfuscationOC"

#数据库名

SYMBOL_DB_FILE="CodeObfuscation.db"

#要被替换的方法列表文件

#=======这里需要将TEST替换给你项目的名称==============
STRING_SYMBOL_FILE="$PROJECT_DIR/TEST/func.list"
#=================================================

#被替换后的宏定义在此文件里

HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"

#维护数据库方便日后做bug排查

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

}

#生成随机16位名称

randomString()

{

openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16

}

#删除旧数据库文件

rm -f $SYMBOL_DB_FILE

#删除就宏定义文件

rm -f $HEAD_FILE

#创建数据表

createTable

#touch命令创建空文件,根据指定的路径

touch $HEAD_FILE

echo '#ifndef CodeObfuscation_h

#define CodeObfuscation_h' >> $HEAD_FILE

echo "//confuse string at `date`" >> $HEAD_FILE

#使用cat将方法列表文件里的内容全部读取出来,形成数组,然后逐行读取,并进行替换

cat "$STRING_SYMBOL_FILE" | while read -ra line;

do

if [[ ! -z "$line" ]]

then

random=`randomString`

echo $line $random

#将生成的随机字符串插入到表格中

insertValue $line $random

#将生成的字符串写入到宏定义文件中,变量是$HEAD_FILE

echo "#define $line $random" >> $HEAD_FILE

fi

done

echo "#endif" >> $HEAD_FILE

sqlite3 $SYMBOL_DB_FILE .dump

3、脚本添加完毕后,我们需要设置项目运行该脚本

Targets -> Bulid Phases -> + -> New Run Script Phase

 

4、然后添加run script指令----$PROJECT_DIR/TEST/confuse.sh

 

5、然后,在终端给脚本执行权限,一定要注意在confuse.sh文件路径下,添加权限

chmod 777 confuse.sh

我就是执行了几次都报错confuse.sh: Permission denied。就是因为权限目录没有在文件所处路径。

6、然后,给项目添加PCH预编译文件,Xcode生成一个pch文件PrefixHeader.pch

7、配置pch文件执行路径。Targets -> Bulid Settings -> 搜索prefix header -> 双击路径填写$PROJECT_DIR/TEST/PrefixHeader.pch (注意:TEST替换给你的项目名称

 

8、添加完成后,我们command+B 编译一下,会在项目目录中多出一个文件CodeObfuscation.h,这个文件内部执行后会生成我们需要混淆方法的宏定义。所以这个混淆代码的方式也是通过的随机字母,生成字符串然后用宏定义的方法改变我们的方法。

9、然后,我们打开之前创建的pch文件,#import "CodeObfuscation.h"引用它。

10、最后一步,我们在之前创建的func.list文件中,写入要混淆的方法列表,注意只写方法的名称即可,不要写方法全部。

如:clickButton needUpdateBread

我在测试的时候发现如果把方法名称写全,如- (void)clickButton:(UIButton *)sender会编译报错。其实也能理解,这种方式就是随机的字母改变,所以如果你全部传递,方法的- ()等也被改动了,导致程序无法编译通过。

写完需要混淆的方法后,我们就可以重新跑一下程序了,然后会发现CodeObfuscation.h文件的内容已经发生变化

已经编译好了两个方法的宏定义。然后我们重新打一个ipa包,进行上一篇文章的砸壳,破解后的方法名称已经不容易分辨了。

混淆前

混淆后

至此,iOS开发的代码方法混淆就大功告成了。

当然,也查找到一些注意事项

1、不能混淆iOS中的系统方法;

2、不能混淆init等初始化方法;

3、不能混淆xib的文件,会导致找不到对应文件;

4、不能混淆storyboard中用到的类名;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值