最新iOS 馬甲包製做工具和腳本,一次搞定問題

iOS 馬甲包製做(Config 配置)準備階段

連接:馬甲包不影響母本的狀況下Config配置(這裏很少說—->看博客 )python

iOS 馬甲包混淆代碼和添加類名文件工具使用

添加文件類和垃圾代碼,以及當前類添加垃圾代碼ios

生成的類文件和垃圾代碼

工具下載:工具使用json

iOS 馬甲包從新命名類修改文件類名腳本

這個是python 腳本 後綴 py 把下面的代碼複製txt文件,修改後綴爲py安全

#!/usr/bin/env python3bash

# coding=utf-8工具

import osui

#原來的前綴spa

oldPrefix=’SKT’code

#新前綴orm

newPrefix=’ZJP’

fordirpath, _, filenamesinos.walk(‘.’):

forfilenameinfilenames:

iffilename.startswith(oldPrefix):

oldFile = os.path.join(dirpath, filename)

newFile = os.path.join(dirpath, filename.replace(oldPrefix, newPrefix,2))

printnewFile

inFile = open(oldFile)

outFile = open(newFile,’w’)

replacements = {oldPrefix:newPrefix}

forlineininFile:

forsrc, targetinreplacements.iteritems():

line = line.replace(src, target)

outFile.write(line)

inFile.close()

outFile.close()

os.remove(oldFile)

附加視頻,修改爲功————–類名修改

iOS代碼混淆使用教程

代碼混淆都是一個很重要的安全技術手段,如何進行全局的自動化代碼混淆,如下開源項目詳細介紹瞭如何實現這個目標。

若是你的工程支持cocoapod,你能夠直接添加!
pod 「STCObfuscator」 (注:請用最新版本1.3.0,最好更新下pod repo update master)

把下面的代碼加入到Appdelegate didFinishLaunchingWithOptions方法裏,
#import "STCObfuscator.h"

#if (DEBUG == 1)
[[STCObfuscator obfuscatorManager] confuseWithRootPath:[NSString stringWithFormat:@"%s", STRING(ROOT_PATH)] resultFilePath:[NSString stringWithFormat:@"%@/STCDefination.h", [NSString stringWithFormat:@"%s", STRING(ROOT_PATH)]] linkmapPath:[NSString stringWithFormat:@"%s", STRING(LINKMAP_FILE)]];
#endif

而後完成下面步驟的設置

步驟一:

在 Build Settings->Preprocessor Macros->DEBUG 中添加環境變量。(注:工程儘可能不要放在中文路徑下)

LINKMAP_FILE=$(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt複製代碼

ROOT_PATH="${SRCROOT}"

步驟二:

在 Build Settings 開啓Write Link Map File, 設置成 YES。

步驟三:

將下面的腳本添加到 Build Phases

dir=${SRCROOT}
file_count=0
file_list=`ls -R $dir 2> /dev/null | grep -v '^$'`
for file_name in $file_list
do
temp=`echo $file_name | sed 's/:.*$//g'`
if [ "$file_name" != "$temp" ]; then
cur_dir=$temp
else
if [ ${file_name##*.} = a ]; then
find -P $dir -name $file_name > tmp.txt
var=$(cat tmp.txt)
nm $var > ${file_name}.txt
rm tmp.txt
fi
if [ ${file_name##*.} = framework ]; then
find -P $dir -name ${file_name%%.*} > tmp.txt
var=$(cat tmp.txt)
nm $var > ${file_name}.txt
rm tmp.txt
fi
fi
done.

步驟四:

在預編譯文件最前面中添加如下代碼:

#if (DEBUG != 1)
#import "STCDefination.h"
#endif

步驟五:

在DEBUG環境下用模擬器運行工程,在STCDefination.h頭文件中生成混淆的宏。

全部的混淆符號會保留在工程目錄下的confuse.json。

用於反混淆的文件confuse.json:

步驟六:

把工程目錄下STCDefination.h頭文件加入工程。

混淆後,若是工程增長代碼,須要再次混淆,先清空STCDefination.h裏面的內容,不能留任何空格和換行,而後pod update,再次在模擬器DEBUG環境下運行。

步驟七:

在 RELEASE 環境下運行工程,實現代碼混淆。

一、混淆前

二、混淆後

另外,若是採用jenkins集成了項目,在jenkins中有進行pod update 處理,請在pod update 後加上如下腳本,

其中SRCROOT必須在腳本中配置爲jenkins打包job中的要混淆的工程的根目錄。

dir=${SRCROOT}/Pods
headerFile=${SRCROOT}/STCDefination.h
file_count=0
file_list=`ls -R $dir 2> /dev/null | grep -v '^$'`
for file_name in $file_list
do
temp=`echo $file_name | sed 's/:.*$//g'`
if [ "$file_name" != "$temp" ]; then
cur_dir=$temp
else
if [ ${file_name##*.} = pch ]; then
echo $file_name
find -P $dir -name $file_name > tmp1.txt
var1=$(cat tmp1.txt)
echo $var1
var2=$(cat $headerFile)
echo "" > $var1
echo "Pipe"
echo "$var2" | while read line
do
echo "$line" >> $var1
done
rm tmp1.txt
fi
let file_count++
fi
done

注:對於大量採用runtime的庫好比RAC,RN,儘可能不混淆,另外那些採用反射機制映射的類、字段和方法依賴接口的,也不要混淆,這些狀況通常自動化的工具很難解決,仍是須要手工處理過濾下,好比那些暴露給RN的屬性,一旦混淆,RN就崩潰了。

相關文章
相關標籤/搜索