這里生成混淆代碼的方法我們通過(guò)shell腳本來(lái)實(shí)現(xiàn)爽茴,同時(shí)我們需要一個(gè)文檔來(lái)寫(xiě)入我們需要進(jìn)行混淆的方法名或是變量名。
-
打開(kāi)終端煮甥,cd到文件所在目錄鬓照,使用
touch confuse.sh
touch func.list
-
寫(xiě)入shell腳本
#!/bin/bash
# 這是Shell腳本,如果不懂shell秽之,自行修煉:http://www.runoob.com/linux/linux-shell.html
# 以下使用sqlite3進(jìn)行增加數(shù)據(jù)当娱,如果不了解sqlite3命令,自行修煉:http://www.runoob.com/sqlite/sqlite-tutorial.html
#數(shù)據(jù)表名
TABLENAME="CodeObfuscationOC"
#數(shù)據(jù)庫(kù)名
SYMBOL_DB_FILE="CodeObfuscation.db"
#要被替換的方法列表文件 Demo是項(xiàng)目名稱
STRING_SYMBOL_FILE="$PROJECT_DIR/recorder/func.list"
#被替換后的宏定義在此文件里
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"
#維護(hù)數(shù)據(jù)庫(kù)方便日后做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
}
#生成隨機(jī)16位名稱
randomString()
{
openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16
}
#刪除舊數(shù)據(jù)庫(kù)文件
rm -f $SYMBOL_DB_FILE
#刪除就宏定義文件
rm -f $HEAD_FILE
#創(chuàng)建數(shù)據(jù)表
createTable
#touch命令創(chuàng)建空文件考榨,根據(jù)指定的路徑
touch $HEAD_FILE
echo '#ifndef CodeObfuscation_h
#define CodeObfuscation_h' >> $HEAD_FILE
echo "http://confuse string at `date`" >> $HEAD_FILE
#使用cat將方法列表文件里的內(nèi)容全部讀取出來(lái)跨细,形成數(shù)組,然后逐行讀取河质,并進(jìn)行替換
cat "$STRING_SYMBOL_FILE" | while read -ra line;
do
if [[ ! -z "$line" ]]
then
random=`randomString`
echo $line $random
#將生成的隨機(jī)字符串插入到表格中
insertValue $line $random
#將生成的字符串寫(xiě)入到宏定義文件中冀惭,變量是$HEAD_FILE
echo "#define $line $random" >> $HEAD_FILE
fi
done
echo "#endif" >> $HEAD_FILE
sqlite3 $SYMBOL_DB_FILE .dump
-
添加run script命令
然后添加$PROJECT_DIR/recorder/confuse.sh
-
給腳本授權(quán)
接下來(lái)還是在我們項(xiàng)目的文件夾下,通過(guò)終端給我們的腳本賦予最高權(quán)限
chmod 777 confuse.sh
-
添加預(yù)編譯文件pch并配置好pch文件路徑(不再贅述)
-
生成CodeObfuscation.h文件
這時(shí)候我們編譯一下代碼掀鹅,會(huì)發(fā)現(xiàn)項(xiàng)目中多出了一個(gè)CodeObfuscation.h文件(如果沒(méi)有散休,可到項(xiàng)目文件夾中找,我的就是在文件夾里找到的- -淫半,然后拖進(jìn)項(xiàng)目)溃槐。這個(gè)文件就是替換方法名的文件,我們?cè)赑CH文件中引入他科吭。
-
在func.list中添加準(zhǔn)備替換的方法名
在項(xiàng)目中點(diǎn)開(kāi)之前拖進(jìn)來(lái)的func.list文件昏滴,然后在里面加入自己想要混淆的方法名或者變量名,
add_Timer
removeTimer
testName
-
結(jié)果
編譯之后
#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有這種變化对人,恭喜你谣殊,已經(jīng)代碼混淆成功。即使通過(guò)class-dump反編出來(lái)的牺弄,也只是一堆亂碼姻几。
-
需要注意的幾點(diǎn)
雖然比較繁瑣,但是親測(cè)有效春贸,有問(wèn)題可以寫(xiě)留言混萝,對(duì)諸位有幫助的話我心甚慰!