前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS实现代码混淆

iOS实现代码混淆

作者头像
honey缘木鱼
发布2019-05-10 18:05:52
3.2K1
发布2019-05-10 18:05:52
举报
文章被收录于专栏:娱乐心理测试

从事iOS开发几年了,从未对代码加密加固,总是认为iOS APP一般是通过AppStore发布的,况且苹果的系统又很难攻破,根本就无需加密,但使用class-dump和Hopper这两款工具就可以导出头文件和分析代码逻辑,还有马甲包过审这快也需要代码代码混淆的功能,下面就记录下自己的实现过程! 1.打开终端,cd到项目目录Rescources文件夹下

代码语言:javascript
复制
cd /Users/zj/Desktop/PastLook/PastLook/Rescources 

以桌面为例

2.创建confuse.sh 和 func.list这两个文件

代码语言:javascript
复制
touch confuse.sh
func.list

创建

  1. 在Rescources下创建CodeConfuse.h和PCH文件,在PCH文件中引入CodeConfuse.h头文件

注意:PCH的配置

4.在confuse.sh文件中添加以下代码

代码语言:javascript
复制
#!/usr/bin/env bash
TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
#LSJDemo切换为自己的项目名称
STRING_SYMBOL_FILE="$PROJECT_DIR/PastLook/Rescources/func.list"
CONFUSE_FILE="$PROJECT_DIR/PastLook"
HEAD_FILE="$PROJECT_DIR/PastLook/Rescources/CodeConfuse.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 "/^dt_/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 PastLook_CodeConfuse_h
#define CodeConfuse' >> $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
  1. 添加Run Script

添加 5.添加confuse.sh路径

6.编译应该会报一个没有权限的错误

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

6.编译通过,把要混淆的方法明和属性写在fun.list中(前缀是因为脚本中^dt_/p" >的设置)

7.编译后

注意: 1、 系统的方法和XIB中拖线的控件名不能用这个方法混淆 2、CodeConfuse.h文件没有实现混淆,检查confuse.sh中的那些路径是否正确。 3.这种方式只是很多中混淆方法的一种,据说这种脚本的混淆,审核直接被拒 !

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.04.28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档