美文网首页
iOS 代码混淆 2

iOS 代码混淆 2

作者: 手中的风信子 | 来源:发表于2023-09-11 15:17 被阅读0次

    iOS 代码混淆

    转载:https://blog.csdn.net/olsQ93038o99S/article/details/81417166

    创建准备文件

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

    打开终端,cd到文件所在目录,使用

    touch confuse.sh touch func.list
    

    然后将这两个文件加入到项目中。


    image.png

    写入shell脚本

    接下来我们在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" #要被替换的方法列表文件 STRING_SYMBOL_FILE="$PROJECT_DIR/ConfusionDemo/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命令

    接下来打开Targets -> Bulid Phases -> + -> New Run Script Phase

    image.png

    然后添加$PROJECT_DIR/ConfusionDemo/confuse.sh,让应用每次启动时去跑一下我们的脚本。

    给脚本授权

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

    chmod 777 confuse.sh
    

    这里有人说用 755 ,但是用755好像还是不行,干脆给最高权限,用777。

    添加预编译文件PCH

    接下来再添加一个PCH文件,实现整个项目的替换。

    image.png

    然后配置一下PCH文件。

    image.png

    添加$PROJECT_DIR/ConfusionDemo/PrefixHeader.pch

    生成CodeObfuscation.h文件

    这时候我们编译一下代码,会发现项目中多出了一个CodeObfuscation.h文件。这个文件就是替换方法名的文件,我们在PCH文件中引入他。

    func中添加准备替换的方法名

    ok,到了最后一步了,这时候我们只需要打开func.list文件,写入我们想要混淆的方法名。就大功告成了。

    viewControllerTestMethodA viewControllerTestMethodB viewControllerTestMethodC viewControllerMethodWithParameter testString testArray testMutDic
    

    结果

    OK,该做的已经做完了,接下来我们再打一个包,看一下结果。

    编译之后我们就可以看到,CodeObfuscation.h文件中就发生了变化。

    #ifndef CodeObfuscation_h #define CodeObfuscation_h //confuse string at Tue Jun 12 22:28:04 CST 2018 #define viewControllerTestMethodA CTBxmOXAbJYekhnH #define viewControllerTestMethodB RnPEjnXygFXLdikO #define viewControllerTestMethodC IzHlDYOpaAFYFTXa #define viewControllerMethodWithParameter nWqyalBcfoUSRVpc #define testString MNPoVYdmCcklAnCO #define testArray kHMRxPlGXGeqekxL #define testMutDic hphPSODIvbBFSTHX #endif
    

    可以看到,原来的代码都变成了一些乱七八糟的代码,混淆成功了。

    最后

    到此,今天的内容就基本结束了,这只是iOS安防的最基本最初级的工作,而且用的方法也是念茜女神很久以前提出的一个方案。并且这里有几点需要注意!!!

    • 1.不可以混淆iOS中的系统方法;

    • 2.不可以混淆iOS中init等初始化方法;

    • 3.不可以混淆xib的文件,会导致找不到对应文件;

    • 4.不可以混淆storyboard中用到的类名;

    • 5.混淆有风险,有可能会被App Store以2.1大礼包拒掉。

    以上文章有什么不对的地方还请大佬多多指教和批评。

    相关文章

      网友评论

          本文标题:iOS 代码混淆 2

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