乐观丽姐 發表於 2021-11-26 11:40:39

Swift实现代码混淆详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>1. 新建相关文件</li><li>2. 导入文件至项目</li><li>3. 修改项目配置</li><ul class="second_class_ul"><li>3.1 修改TARGETS配置</li><li>3.2 修改指令文件</li><ul class="third_class_ul"><li>3.2.1 打开confuse.sh文件,复制并粘贴一下文本</li><li>3.2.2 修改指令文件权限</li></ul><li>3.3 修改需要混淆的方法名文件</li><ul class="third_class_ul"></ul><li>3.4 修改pch文件配置</li><ul class="third_class_ul"></ul></ul><li>4. 运行效果</li><ul class="second_class_ul"></ul></ul></div><p class="maodian"></p><h2>1. 新建相关文件</h2>
<p>新建文件<code>confuse.sh</code>和<code>func.list</code></p>
<p>创建文件方式如下:</p>
<div class="jb51code">
<pre class="brush:plain;">
$ cd ~/Desktop/ceshi
$ touch confuse.sh
$ touch func.list</pre>
</div>
<p style="text-align: left;">最终结果如下:</p>
<p style="text-align: center;"><br />
<img src="https://img.jbzj.com/file_images/article/202111/202111261122349.jpg" alt="" /></p>
<p class="maodian"></p><h2>2. 导入文件至项目</h2>
<p>将创建的<code>confuse.sh</code>文件以及<code>func.list</code>文件导入项目<br />
最终结果如下</p>
<p style="text-align: center;"><img src="https://img.jbzj.com/file_images/article/202111/2021112611223410.jpg" alt="" /></p>
<p class="maodian"></p><h2>3. 修改项目配置</h2>
<p class="maodian"></p><h3>3.1 修改TARGETS配置</h3>
<p>如果没有<code>RunScript</code>。请点击红框内<code>+</code>进行新增</p>
<p style="text-align: center;"><img src="https://img.jbzj.com/file_images/article/202111/2021112611223511.jpg" alt="" /></p>
<p style="text-align: left;"><code>RunScript</code>内输入的文本</p>
<div class="jb51code">
<pre class="brush:plain;">
$PROJECT_DIR/confuse.sh</pre>
</div>
<p class="maodian"></p><h3>3.2 修改指令文件</h3>
<p class="maodian"></p><h4>3.2.1 打开confuse.sh文件,复制并粘贴一下文本</h4>
<div class="jb51code">
<pre class="brush:plain;">
#!/usr/bin/env bash

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C

#维护数据库方便日后作排重
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 Demo_codeObfuscation_h
#define Demo_codeObfuscation_h' &gt;&gt; $HEAD_FILE
echo "//confuse string at `date`" &gt;&gt; $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" &gt;&gt; $HEAD_FILE
    fi
done
echo "#endif" &gt;&gt; $HEAD_FILE

sqlite3 $SYMBOL_DB_FILE .dump</pre>
</div>
<p class="maodian"></p><h4>3.2.2 修改指令文件权限</h4>
<div class="jb51code">
<pre class="brush:plain;">
$ cd ~/Desktop/ceshi
$ chmod 755 confuse.sh</pre>
</div>
<p class="maodian"></p><h3>3.3 修改需要混淆的方法名文件</h3>
<p>打开<code>func.list</code>文件,在文件内输入需要进行方法名混淆的方法名</p>
<p>示例如下:</p>
<div class="jb51code">
<pre class="brush:plain;">
imageCompress
blurImage
viewDidLoad</pre>
</div>
<p class="maodian"></p><h3>3.4 修改pch文件配置</h3>
<p>1、如果没有<code>PrefixHeader.pch</code>这种文件,则需要新建一个<br />
2、打开<code>PrefixHeader.pch</code>文件</p>
<div class="jb51code">
<pre class="brush:plain;">
#ifndef PrefixHeader_pch
#define PrefixHeader_pch

// Include any system framework and library headers here that should be included in all compilation units.
#import "CodeObfuscation.h"

#endif /* PrefixHeader_pch */</pre>
</div>
<p class="maodian"></p><h2>4. 运行效果</h2>
<p>运行<code>com+B</code></p>
<p style="text-align: center;"><img src="https://img.jbzj.com/file_images/article/202111/2021112611223512.jpg" alt="" /></p>
<p>希望本文所述对大家的Swift开发和学习有所帮助。</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>Swift 列举内存管理与异常处理具体代码</li><li>Swift代码自定义UIView实现示例</li><li>Swift Self详解及简单实例代码</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Swift实现代码混淆详解