前言
機(jī)緣巧合偶遇iOS馬甲包業(yè)務(wù),前期也使用過目前市面上其他得工具,實(shí)際效果不太理想。經(jīng)過大量實(shí)踐,開發(fā)出一款功能齊全的混淆工具。工具的主要功能OC、C++已封裝成Mac應(yīng)用,其他功能還在封裝中,敬請期待。公測階段: 免費(fèi)
提示
為了提高通用性,近期不斷重構(gòu)(>=v1.2.0)之前老版本的功能,為此新建測試工程confuse_test,大家在實(shí)際使用過程中如果遇到問題,歡迎擴(kuò)展測試工程,請?jiān)诠こ讨姓堊⒚鱞ug細(xì)節(jié)。
1.2.0之前的老版本說明:
簡介:不涉及語法及編譯要求,但是混淆后可能出現(xiàn)局部漏改或者改錯,請自行添加至黑名單過濾。
適用項(xiàng)目:C++、Swift、RN等還未適配的混合項(xiàng)目。
使用條件:目前能用v1.1.3,其他過期了
目前Swift和OC混合項(xiàng)目的Swift默認(rèn)不修改,但是Swift引用到OC的需要自己添加值黑名單,后續(xù)將優(yōu)化。
自述
其實(shí)識別一個工具的優(yōu)劣,只需看看它能否修改方法名的所有參數(shù)名(極少)、帶block的參數(shù)的方法(極少),修改布局(較少)、插入的是代碼還是‘垃圾’(Apple今年不止三歲了)。更別說“還有誰...”能識別宏、區(qū)分繼承鏈等上下文關(guān)聯(lián)內(nèi)容,智能識別不可修改部分(+ (void)init;- (void)reloadData;基本能改,做到的有幾個呢?),正?;煜昊静粓?bào)錯(除了一些個別語法不嚴(yán)謹(jǐn)造成混淆后報(bào)錯)。也歡迎大家使用不同工具混淆測試工程confuse_test,對比效果。
馬甲包的本質(zhì):
- 階段一減低重復(fù)率 ,本人開發(fā)初期的版本和目前市面上的其它工具基本相似,主要是‘名稱’全局替換這一個基本的功能
- 階段二減少相似度(相同元素的正態(tài)分布),目前該工具經(jīng)過優(yōu)化已經(jīng)有了很大的改善,已經(jīng)在慢慢往這方面靠近,詳情見以下功能介紹。事物都有兩面性,功能越強(qiáng)大混淆耗時越長,如果你的項(xiàng)目很大,混淆幾個小時也是有可能的,請不要見怪,后續(xù)持續(xù)優(yōu)化中。
功能
confuse是一款混淆工具,盡可能模擬人工開發(fā),仿照Xcode部分功能,避免機(jī)核4.3、2.1、2.3.1、賬號調(diào)查等。
目標(biāo):模擬人工修改一切能改的地方,這也是為什么本工具只有黑名單沒有白名單的原因
詳細(xì)功能如下(基本功能不做描述,詳見其他工具):
已完成
通用部分
- [項(xiàng)目配置],只要選擇項(xiàng)目路徑,自動完成其他默認(rèn)配置
- 全局設(shè)置‘忽略路徑’,支持正則
- 可以根據(jù)‘target’混淆
- 自定義添加‘敏感詞’
- [資源替換],混淆前指定需要替換的資源文件夾,自動進(jìn)行同名文件替換,方便快捷
- [修改文件屬性],如創(chuàng)建時間、訪問時間、修改時間
- [修改項(xiàng)目],無需刪除Cocoapods
- 可設(shè)置‘修改uuid’,徹底翻新
- ‘修改target’名稱,相關(guān)聯(lián)信息同步更新
- 自動備份源碼
Objective-C
- [刪除注釋],可‘保留空格’‘保留pragma’設(shè)置,利于測試階段查看
- [修改圖片],質(zhì)量修改、大小偏移、局部像素微調(diào)
- [重命名圖片],智能名詞替換,自動糾正圖片名和xcassets文件夾名不對應(yīng)的情況
- 可設(shè)置‘運(yùn)行拼接名稱’,用于運(yùn)行時通過字符串拼接生成的圖片名
- 可設(shè)置‘重命名關(guān)聯(lián)字符串,用于修改字符串與圖片名相等的情況
- 可設(shè)置‘忽略危險名稱’開關(guān)
- [插入圖片],自動插入圖片,同時根據(jù)上下文及類型模擬人工調(diào)用,可指定插入個數(shù)
- [重命名屬性],支持@property的所有類型,基本功能,改名字、前綴類似其他工具,不做過多描述,優(yōu)勢:
- 識別語法,識別類型、繼承關(guān)系,屬性名混淆和類名(包含繼承鏈)關(guān)聯(lián),同名屬性不同類混淆后將不一致,自動識別系統(tǒng)屬性
- 可設(shè)置文件名Model后綴過濾
- 【智能名詞替換】,混淆后不同類存在相同屬性名,模擬正常開發(fā)
- 【智能識別不可修改部分】,實(shí)現(xiàn)最大化混淆
- [插入屬性],關(guān)聯(lián)已有類型,智能名詞替換
- ‘百分比控制’
- ‘Model后綴’開關(guān),目的:避免Model歸檔或者數(shù)據(jù)轉(zhuǎn)模型失敗
- 可多次執(zhí)行,指數(shù)x2遞增
- [重命名方法],近似Xcode的Rename功能,基本功能:改名字、前綴類似其他工具,不做過多描述,優(yōu)勢:
- 語法相關(guān),識別類型、繼承關(guān)系,支持多參修改,方法名混淆和類名(包含繼承鏈)及類型關(guān)聯(lián),同名方法不同類、同類同名方法不同類型(類方法、對象方法)混淆后將不一致
- 【智能名詞替換】,混淆后不同類存在相同方法名,以及相同類相同方法不同類型,模擬正常開發(fā)
- 【智能識別不可修改部分】,不放過任何一個可以修改的內(nèi)容
- [插入方法],插入并調(diào)用上下文關(guān)聯(lián)方法,告別“垃圾代碼”,優(yōu)勢:
- 根據(jù)方法的返回值類型,在分類中創(chuàng)建相應(yīng)的方法。同時封裝原方法的返回值并調(diào)用。
- 可多次執(zhí)行,指數(shù)x2遞增
- [修改方法],模擬人工封裝調(diào)用,優(yōu)勢:
- 對原方法進(jìn)行拆分調(diào)用并根據(jù)參數(shù)類型(支持繼承)局部調(diào)整,詳情見支持參數(shù)類型匯總表
- 可多次執(zhí)行,指數(shù)x2遞增
- [重命名全局變量],智能名詞替換
- [修改全局變量],替換全局變量名、全局變量轉(zhuǎn)化為全局函數(shù)、混淆字符串變量值
- [修改局部變量],模擬人工封裝調(diào)用,變量名關(guān)聯(lián)類型,優(yōu)勢:
- 局部變量值運(yùn)行時保持不變,詳情見支持類型匯總表
- 可多次執(zhí)行,指數(shù)x2遞增
- [修改字符串],支持任意字符串,加密處理(硬編碼->內(nèi)存),原始字符串保留在注釋中方便檢查
- 設(shè)置‘最少長度’過濾
- 也可設(shè)置‘有效個數(shù)’搭配使用
- [修改xib、storyboard],自動插入視圖,并修改內(nèi)部結(jié)構(gòu)屬性
- [修改字體],對項(xiàng)目中使用的字體隨機(jī)微調(diào),識別宏
- [修改顏色],對項(xiàng)目中UI控件顏色隨機(jī)偏移,識別宏
- [UI布局偏移],支持Frame、Mansonry、SDAutoLayout常見布局微調(diào)
- [重命名類],類名不限制(例如:my、My),可指定添加前綴,優(yōu)勢:
- 智能名詞替換
- 可設(shè)置‘重命名同名文件’
- 可設(shè)置‘重命名相似字符串’,(忽略|相等|包含)三種設(shè)置
- 新增‘糾正非標(biāo)準(zhǔn)點(diǎn)語法’,針對非標(biāo)準(zhǔn)的點(diǎn)語法調(diào)用(方法當(dāng)做屬性調(diào)用)
- [插入文件],生成其它文件(創(chuàng)建自定義控件,模擬正常開發(fā)),項(xiàng)目中自動調(diào)用;注意:目前需要手動導(dǎo)入文件(在項(xiàng)目根路徑下,會生成"other_xxx_file"的文件夾,將它拖入工程即可)
- [插入文本],生成json、txt、doc、plist等文本文件,項(xiàng)目中自動調(diào)用;注意:目前需要手動導(dǎo)入文件(在項(xiàng)目根路徑下,會生成"other_xxx_text"的文件夾,將它拖入工程即可)
- 優(yōu)化中...
[重命名多語言],支持漢字,所有字符串將被修改
C++
- [重命名類],支持模板等類型
- 可切換舊模式
- 前綴設(shè)置
- 可設(shè)置‘重命名同名文件’
- [重命名方法],近似Xcode的Rename功能,【智能識別不可修改部分】
- 語法相關(guān),識別類型、模板、重載、重寫、繼承等關(guān)系
- 【智能名詞替換】,混淆后不同類存在相同方法名,模擬正常開發(fā)
- [重命名屬性],支持所有類型屬性,【智能識別不可修改部分】
- 識別語法,識別類型、繼承,同名屬性不同類混淆后將不一致
- 【智能名詞替換】,混淆后不同類存在相同屬性名,模擬正常開發(fā)
- [修改字符串],支持任意字符串,加密處理(硬編碼->內(nèi)存),原始字符串保留在注釋中方便檢查
- 設(shè)置‘最少長度’過濾
- 也可設(shè)置‘有效個數(shù)’搭配使用
Cocos2d-x
該部分功能整合至C++中,支持cocos2dx自動過濾
以上所有功能均支持黑名單過濾,對指定的內(nèi)容進(jìn)行屏蔽,忽略混淆。
名詞解釋
- 智能名詞替換:重命名時使用關(guān)聯(lián)類型已有信息+相近語義+類型+部分舊詞匯等組合,并且過濾敏感詞匯,同時用戶也可以自定義敏感詞,
棄用‘隨機(jī)單詞無腦組合’ - 智能識別不可修改部分:通過類型及繼承鏈方式識別系統(tǒng)、第三方、Pod方法,并不是‘簡單’的相等判斷,例如:
- 類方法:+ (void)init;原則上任何地方都能改
- 對象方法:- (void)reloadData;不是UITableView的子類是可以改的
- 屬性:@property (readonly) NSUInteger length;如果不是NSString的子類也是可以改的
規(guī)劃中
更新迭代將按照以下順序依次進(jìn)行
- Objective-C(90%),重構(gòu)的目的是為了提高工具的通用性和穩(wěn)定性,及強(qiáng)化功能
- 重構(gòu)《多語言》
- 音頻、視頻文件使用少,后續(xù)添加
- C++(40%),開發(fā)中...
- 字符串加密混淆
- 方法:插入、修改
- 屬性:修改、插入
- Lua(0%)的針對性太強(qiáng)了,暫時不開放,暫時不打算重構(gòu)有需要在說吧
- Swift(5%),本人實(shí)際項(xiàng)目使用不多,故排在最后,看用戶需求再決定
- 其他功能:
- 迭代混淆(50%),保留上次混淆記錄,用戶只要維護(hù)源碼就行
- 快速混淆模式
圖文介紹
運(yùn)行APP效果圖,使用前請?jiān)敿?xì)閱讀工具使用教程

更新日志
v3.4.0(2021.01.06)
- 新增C++[修改字符串],加密處理(硬編碼->內(nèi)存),原始字符串保留在注釋中方便檢查
- 設(shè)置‘最少長度’過濾
- 也可設(shè)置‘有效個數(shù)’搭配使用
- 新增局部變量模板支持類型NSDictionary
- 優(yōu)化OC[修改字符串],減少混淆時間20%~30%,沒有字符串時不處理,避免插入空內(nèi)容
- 更新‘target選項(xiàng)’為‘scheme選擇’,移除名稱限制,現(xiàn)在可任意
- 修復(fù)上一個版本bug,原因:上一個版本修改太多了,改懵了,抱歉
- OC[插入文件]混淆失效
- OC[重命名方法]init開頭混淆異常