美文网首页逆向+反编译
iOS-代码简单混淆

iOS-代码简单混淆

作者: afyylong | 来源:发表于2020-02-06 16:50 被阅读0次

这里生成混淆代码的方法我们通过shell脚本来实现,同时我们需要一个文档来写入我们需要进行混淆的方法名或是变量名。

  • 打开终端,cd到文件所在目录,使用
touch confuse.sh
touch func.list
  • 写入shell脚本
#!/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"

#要被替换的方法列表文件 Demo是项目名称
STRING_SYMBOL_FILE="$PROJECT_DIR/recorder/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
  • 添加run script命令
    js.png

    然后添加$PROJECT_DIR/recorder/confuse.sh

  • 给脚本授权

接下来还是在我们项目的文件夹下,通过终端给我们的脚本赋予最高权限

chmod 777 confuse.sh
  • 添加预编译文件pch并配置好pch文件路径(不再赘述)
  • 生成CodeObfuscation.h文件

这时候我们编译一下代码,会发现项目中多出了一个CodeObfuscation.h文件(如果没有,可到项目文件夹中找,我的就是在文件夹里找到的- -,然后拖进项目)。这个文件就是替换方法名的文件,我们在PCH文件中引入他。

  • 在func.list中添加准备替换的方法名

在项目中点开之前拖进来的func.list文件,然后在里面加入自己想要混淆的方法名或者变量名,\color{red}{注意:方法名和系统方法名不要相同}

add_Timer
removeTimer
testName
  • 结果

编译之后

#ifndef CodeObfuscation_h
#define CodeObfuscation_h
//confuse string at Thu Feb  6 10:15:57 CST 2020
#define add_Timer JgljUNExphlljzLU
#define removeTimer twZJFmYFQxcUaXFU
#define testName UGxeiEiyWEpdbgTa
#endif

看到 CodeObfuscation有这种变化,恭喜你,已经代码混淆成功。即使通过class-dump反编出来的,也只是一堆乱码。

  • 需要注意的几点

\color{red}{不可以混淆iOS中的系统方法;}
\color{red}{不可以混淆iOS中init等初始化方法;}
\color{red}{不可以混淆xib的文件,会导致找不到对应文件;}
\color{red}{不可以混淆storyboard中用到的类名;}
\color{red}{混淆有风险,有可能会被App Store以2.1大礼包拒掉。}

虽然比较繁琐,但是亲测有效,有问题可以写留言,对诸位有帮助的话我心甚慰!

相关文章

  • iOS-代码混淆加固策略

    iOS-代码混淆加固策略 iOS-代码混淆加固策略

  • iOS-代码简单混淆

    这里生成混淆代码的方法我们通过shell脚本来实现,同时我们需要一个文档来写入我们需要进行混淆的方法名或是变量名。...

  • iOS-代码混淆

    基本概念 什么是加固 加固是为了增加应用的安全性,防止应用被破解、盗版、二次打包、注入、反编译等 常见的加固方式有...

  • iOS-最新代码混淆

    代码混淆其实就是字符串替换,目前有二种方法可以实现,一个是#define,一个是利用tops,本文主要是讲解#de...

  • iOS-代码混淆加固策略

    技 术 文 章 / 超 人 对于IOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当...

  • iOS 测试 iOS-客户端代码覆盖测试 (Gcov)

    原文iOS-客户端代码覆盖测试 (Gcov)iOS-客户端代码覆盖测试 (Gcov) 本文主要介绍如何对 iOS ...

  • Gson代码混淆简单使用

    时光总在指尖流逝,转眼间入了深秋了。在安卓代码编写中,代码混淆是不可少的一环,简而言之,用一套万能的混淆代码再修改...

  • 安卓-混淆

    混淆 1.简单介绍 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等...

  • Android项目的代码混淆

    代码混淆: 代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。有的混淆是根据自己写得代码有关,需要根据异常错...

  • iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) iOS 初探代码混淆(OC)

网友评论

    本文标题:iOS-代码简单混淆

    本文链接:https://www.haomeiwen.com/subject/taeyxhtx.html