前言
機緣巧合偶遇iOS馬甲包業(yè)務(wù)蓄愁,前期也使用過目前市面上其他得工具,實際效果不太理想。經(jīng)過大量實踐柑肴,開發(fā)出一款功能齊全的混淆工具。工具的主要功能OC旬薯、C++已封裝成Mac應(yīng)用晰骑,其他功能還在封裝中,敬請期待。公測階段: 免費
提示
為了提高通用性硕舆,近期不斷重構(gòu)(>=v1.2.0)之前老版本的功能秽荞,為此新建測試工程confuse_test,大家在實際使用過程中如果遇到問題抚官,歡迎擴展測試工程扬跋,請在工程中請注明bug細節(jié)。
1.2.0之前的老版本說明:
簡介:不涉及語法及編譯要求凌节,但是混淆后可能出現(xiàn)局部漏改或者改錯钦听,請自行添加至黑名單過濾。
適用項目:C++倍奢、Swift朴上、RN等還未適配的混合項目。
使用條件:目前能用v1.1.3卒煞,其他過期了
目前Swift和OC混合項目的Swift默認不修改痪宰,但是Swift引用到OC的需要自己添加值黑名單,后續(xù)將優(yōu)化畔裕。
自述
其實識別一個工具的優(yōu)劣衣撬,只需看看它能否修改方法名的所有參數(shù)名(極少)、帶block的參數(shù)的方法(極少)扮饶,修改布局(較少)具练、插入的是代碼還是‘垃圾’(Apple今年不止三歲了)。更別說“還有誰...”能識別宏贴届、區(qū)分繼承鏈等上下文關(guān)聯(lián)內(nèi)容靠粪,智能識別不可修改部分(+ (void)init;- (void)reloadData;基本能改,做到的有幾個呢毫蚓?)占键,正常混淆完基本不報錯(除了一些個別語法不嚴謹造成混淆后報錯)元潘。也歡迎大家使用不同工具混淆測試工程confuse_test畔乙,對比效果。
馬甲包的本質(zhì):
- 階段一減低重復(fù)率 翩概,本人開發(fā)初期的版本和目前市面上的其它工具基本相似牲距,主要是‘名稱’全局替換這一個基本的功能
- 階段二減少相似度(相同元素的正態(tài)分布),目前該工具經(jīng)過優(yōu)化已經(jīng)有了很大的改善钥庇,已經(jīng)在慢慢往這方面靠近牍鞠,詳情見以下功能介紹。事物都有兩面性评姨,功能越強大混淆耗時越長难述,如果你的項目很大,混淆幾個小時也是有可能的,請不要見怪胁后,后續(xù)持續(xù)優(yōu)化中店读。
功能
confuse是一款混淆工具,盡可能模擬人工開發(fā)攀芯,仿照Xcode部分功能屯断,避免機核4.3、2.1侣诺、2.3.1殖演、賬號調(diào)查等。
目標(biāo):模擬人工修改一切能改的地方年鸳,這也是為什么本工具只有黑名單沒有白名單的原因
詳細功能如下(基本功能不做描述剃氧,詳見其他工具):
已完成
通用部分
- [項目配置],只要選擇項目路徑阻星,自動完成其他默認配置
- 全局設(shè)置‘忽略路徑’,支持正則
- 可以根據(jù)‘target’混淆
- 自定義添加‘敏感詞’
- [資源替換]已添,混淆前指定需要替換的資源文件夾妥箕,自動進行同名文件替換,方便快捷
- [修改文件屬性]更舞,如創(chuàng)建時間畦幢、訪問時間、修改時間
- [修改項目]缆蝉,無需刪除Cocoapods
- 可設(shè)置‘修改uuid’宇葱,徹底翻新
- ‘修改target’名稱,相關(guān)聯(lián)信息同步更新
- 自動備份源碼
Objective-C
- [刪除注釋]刊头,可‘保留空格’‘保留pragma’設(shè)置黍瞧,利于測試階段查看
- [修改圖片],質(zhì)量修改原杂、大小偏移印颤、局部像素微調(diào)
- [重命名圖片],智能名詞替換穿肄,自動糾正圖片名和xcassets文件夾名不對應(yīng)的情況
- 可設(shè)置‘運行拼接名稱’年局,用于運行時通過字符串拼接生成的圖片名
- 可設(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ā)
- 【智能識別不可修改部分】陨界,實現(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)勢:
- 對原方法進行拆分調(diào)用并根據(jù)參數(shù)類型(支持繼承)局部調(diào)整,詳情見支持參數(shù)類型匯總表
- 可多次執(zhí)行突梦,指數(shù)x2遞增
- [重命名全局變量]诫舅,智能名詞替換
- [修改全局變量],替換全局變量名宫患、全局變量轉(zhuǎn)化為全局函數(shù)刊懈、混淆字符串變量值
- [修改局部變量],模擬人工封裝調(diào)用娃闲,變量名關(guān)聯(lián)類型虚汛,優(yōu)勢:
- 局部變量值運行時保持不變,詳情見支持類型匯總表
- 可多次執(zhí)行皇帮,指數(shù)x2遞增
- [修改字符串]卷哩,支持任意字符串,加密處理(硬編碼->內(nèi)存)属拾,原始字符串保留在注釋中方便檢查
- 設(shè)置‘最少長度’過濾
- 也可設(shè)置‘有效個數(shù)’搭配使用
- [修改xib将谊、storyboard],自動插入視圖渐白,并修改內(nèi)部結(jié)構(gòu)屬性
- [修改字體]瓢娜,對項目中使用的字體隨機微調(diào),識別宏
- [修改顏色]礼预,對項目中UI控件顏色隨機偏移,識別宏
- [UI布局偏移]虏劲,支持Frame托酸、Mansonry、SDAutoLayout常見布局微調(diào)
- [重命名類]柒巫,類名不限制(例如:my励堡、My),可指定添加前綴堡掏,優(yōu)勢:
- 智能名詞替換
- 可設(shè)置‘重命名同名文件’
- 可設(shè)置‘重命名相似字符串’应结,(忽略|相等|包含)三種設(shè)置
- 新增‘糾正非標(biāo)準(zhǔn)點語法’,針對非標(biāo)準(zhǔn)的點語法調(diào)用(方法當(dāng)做屬性調(diào)用)
- [插入文件]泉唁,生成其它文件(創(chuàng)建自定義控件鹅龄,模擬正常開發(fā)),項目中自動調(diào)用亭畜;注意:目前需要手動導(dǎo)入文件(在項目根路徑下扮休,會生成"other_xxx_file"的文件夾,將它拖入工程即可)
- [插入文本]拴鸵,生成json玷坠、txt蜗搔、doc、plist等文本文件八堡,項目中自動調(diào)用樟凄;注意:目前需要手動導(dǎo)入文件(在項目根路徑下,會生成"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)容進行屏蔽勤庐,忽略混淆。
名詞解釋
- 智能名詞替換:重命名時使用關(guān)聯(lián)類型已有信息+相近語義+類型+部分舊詞匯等組合好港,并且過濾敏感詞匯愉镰,同時用戶也可以自定義敏感詞,
棄用‘隨機單詞無腦組合’ - 智能識別不可修改部分:通過類型及繼承鏈方式識別系統(tǒng)钧汹、第三方岛杀、Pod方法,并不是‘簡單’的相等判斷崭孤,例如:
- 類方法:+ (void)init;原則上任何地方都能改
- 對象方法:- (void)reloadData;不是UITableView的子類是可以改的
- 屬性:@property (readonly) NSUInteger length;如果不是NSString的子類也是可以改的
規(guī)劃中
更新迭代將按照以下順序依次進行
- Objective-C(90%)类嗤,重構(gòu)的目的是為了提高工具的通用性和穩(wěn)定性糊肠,及強化功能
- 重構(gòu)《多語言》
- 音頻、視頻文件使用少遗锣,后續(xù)添加
- C++(40%)货裹,開發(fā)中...
- 字符串加密混淆
- 方法:插入、修改
- 屬性:修改精偿、插入
- Lua(0%)的針對性太強了弧圆,暫時不開放,暫時不打算重構(gòu)有需要在說吧
- Swift(5%)笔咽,本人實際項目使用不多搔预,故排在最后,看用戶需求再決定
- 其他功能:
- 迭代混淆(50%)叶组,保留上次混淆記錄拯田,用戶只要維護源碼就行
- 快速混淆模式
圖文介紹
運行APP效果圖,使用前請詳細閱讀工具使用教程
更新日志
v3.4.0(2021.01.06)
- 新增C++[修改字符串],加密處理(硬編碼->內(nèi)存)甩十,原始字符串保留在注釋中方便檢查
- 設(shè)置‘最少長度’過濾
- 也可設(shè)置‘有效個數(shù)’搭配使用
- 新增局部變量模板支持類型NSDictionary
- 優(yōu)化OC[修改字符串]船庇,減少混淆時間20%~30%,沒有字符串時不處理侣监,避免插入空內(nèi)容
- 更新‘target選項’為‘scheme選擇’鸭轮,移除名稱限制,現(xiàn)在可任意
- 修復(fù)上一個版本bug橄霉,原因:上一個版本修改太多了窃爷,改懵了,抱歉
- OC[插入文件]混淆失效
- OC[重命名方法]init開頭混淆異常
感謝反饋
shizu2014姓蜂、myhonior按厘、imbahong