深入解析iOS代碼混淆技術(shù):方法、風險與完整步驟

android代碼未混淆 ios代碼混淆技術(shù)

一般做了防調(diào)試的話,被調(diào)試進程會退出的,是防動態(tài)分析措施。

代碼混淆加花這些是防靜態(tài)分析措施.

反調(diào)試是防動態(tài)分析措施.

混淆的方法

方法名混淆其實就是字符串替換,有2個方法可以,一個是#define,一個是利用tops。

利用#define的方法有一個好處,就是可以把混淆結(jié)果合并在一個.h中,在工程Prefix.pch的最前面#import這個.h。不導入也可以編譯、導入則實現(xiàn)混淆。

單段的selector,如func: ,可以通過#define func 來實現(xiàn)字符串替換。

多段的selector,如a:b:c: ,可以通過分別#define a 、b、c 來實現(xiàn)字符串替換。

注意!!!

1.不可以混淆iOS中的系統(tǒng)方法;

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

3.不可以混淆xib的文件,會導致找不到對應文件;

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

5.混淆有風險,有可能會被App Store 拒掉。

代碼易讀字符串混淆

混淆分許多思路,比如:

1)花代碼花指令,即隨意往程序中加入迷惑人的代碼指令

2)易讀字符替換

對于更高效和全面的混淆方案,開發(fā)者可以使用專業(yè)工具如IpaGuard。IpaGuard是一款強大的iOS IPA文件混淆工具,支持代碼混淆、資源文件混淆,無需源碼即可直接操作IPA文件,并兼容Objective-C、Swift等多種開發(fā)平臺,幫助開發(fā)者簡化混淆流程并提升應用安全性。

防止class-dump出可讀信息的有效辦法是易讀字符替換

  1. cd到你自己的項目目錄級

  2. 創(chuàng)建兩個文件:

命令 :touch

touch func.list

: 存放混淆的腳本

func.list: 需要混淆的方法、變量名

3..配置Build Phase

在工程Build Phase中添加執(zhí)行腳本操作,執(zhí)行腳本

這里需要注意的是 PROJECT\_DIR/這個的路徑和創(chuàng)建pch文件時的路徑是一樣的,PROJECT_DIR代表整個工程,/是這個文件的路徑。

  1. 然后command + B編譯一下,如果報錯了就cd到項目的目錄級下,然后輸入命令行 chmod 755 或chmod 777 給我們的腳本本間授權(quán)

  2. 成功之后會自動生成一個codeObfuscation.h文件,(在代碼的本地目錄里有,show in Finder 看下,能找到)

6.然后在pch文件中導入codeObfuscation.h文件。

打開項目,修改 ,添加混淆頭文件:

#import "codeObfuscation.h"
---------------------------------------------------------
func.list 里寫要混淆的方法
 寫混淆的腳本
codeObfuscation.h 里會自動生成替代func.list里的方法

#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h
---------confuse.h---------
#!/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
#維護數(shù)據(jù)庫方便日后作排重
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' >> $HEAD_FILE
echo "http://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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 代碼易讀字符串混淆 混淆分許多思路,比如: 1)花代碼花指令,即隨意往程序中加入迷惑人的代碼指令 2)易讀字符替換...
    Mikayla321閱讀 7,751評論 5 13
  • 前言 什么!我們的代碼拿去安全掃描啦?什么!還掃描出來問題啦?什么!源碼都別看到啦? 居于上一篇文章iOS簡單逆向...
    甘邦閱讀 18,279評論 24 40
  • class-dump 可以很方便的導出程序頭文件,不僅讓攻擊者了解了程序結(jié)構(gòu)方便逆向,還讓著急趕進度時寫出的欠完善...
    無灃閱讀 661評論 1 0
  • Security-And-CodeConfuse(安全與編譯碼器) App Security And CodeCo...
    voQuan閱讀 1,539評論 0 2
  • 簡介 class-dump 可以很方便的導出程序頭文件,考慮到App安全問題,防止我們核心的代碼被別看到,需要對我...
    z4ywzrq閱讀 1,329評論 0 2

友情鏈接更多精彩內(nèi)容