ZFJObsLib-iOS代碼混淆工具-馬甲包混淆工具(Python腳本混淆iOS工程)

ZFJObsLib更新說明

https://gitee.com/zfj1128/ZFJObsLib_dmg

----------------------------------------分割線----------------------------------------

前言

今天主要想說的是iOS的代碼混淆,爲什麼想做代碼混淆?爲了APP的安全,爲了防止別人破殼輕易破解我們代碼;還有就是做馬甲包了,我們知道馬甲包的市場需求很大,但是不能花費過多的精力在開發上,畢竟只是個馬甲,沒必要花費太多的成本!

混淆工具

網上搜了一下,開源免費的混淆都在轉載念茜大姐大sh腳本的混淆方法,或者在念茜的腳本基礎上二次開發,大家去看過就知道念茜的這篇博客是在14年寫的,那時我剛做iOS沒多久?,而且那時候中國區審覈還沒有那麼嚴格,若果你現在還使用那種方法進行混淆,你肯定會收到蘋果的2.3.1 大禮包?,所以我們還是探索別的混淆方法吧,不要再挖墳了!

ZFJObsLib主要是通過Python寫的混淆工具,具體功能有方法混淆、屬性混淆、類名混淆、添加垃圾代碼、自動創建垃圾類、刪除註釋、修改資源文件Hash值、加密字符串、翻新資源名、模擬人工混淆、混淆文件名、混淆文件目錄、混淆詞庫、混淆日誌、映射列表、敏感詞過濾、圖片壓縮、爬蟲服務、修改項目名、翻新項目UUID、自動備份混淆項目、自定義忽略屬性、自定義忽略函數、自定義忽略類名、界面顏色魔改,具體的如下:

軟件界面

ZFJObsLib混淆工具全面支持OC與Swift語言開發的項目!!!

下載地址:

Gitee:https://gitee.com/zfj1128/ZFJObsLib_dmg

GitHub:https://github.com/zfjsyqk/ZFJObsLib

使用教學視頻:

鏈接:https://pan.baidu.com/s/1pqUkgU8YxSzjqTzpHlAD6g  密碼:9sll

ZFJObsLib軟件的主要界面如下:

混淆日誌

進行混淆的部分日誌,混淆的時候會自動生成混淆日誌《ZFJ混淆日誌.log》,便於開發者修改部分報錯,在混淆界面下方的《打開混淆日誌》按鈕打開:

忽略路徑

我們在混淆的時候,沒必要全部進行混淆,特別是第三方庫,或者Pods管理的第三方庫;畢竟混淆的越多問題也就越多和也越費時,所以我添加了混淆忽略文件和忽略文件功能,如下圖:

特別說明:多級目錄混淆情況,如果想忽略的目錄在多個文件夾中有重名的,比如你想忽略Home下面的Models文件夾,但是在Home文件夾和Mine文件夾都有個Models文件夾,你可以這樣設置'Home/Models'就OK了!So Easy!☝️☝️☝️

如果想過濾擁有相同前綴的類,比如ZFJ_TouchClass.h/ZFJ_TouchClass.m/ZFJ_MyButton.h/ZFJ_MyButton.m,可以設置‘ZFJ_+’就可以對以‘ZFJ_’開頭的類進行過濾忽略;

如果想過濾擁有相同後綴的類,比如ZFJName.h/ZFJName.m/ABCName.h/ABCName.h,可以設置‘+Name’就可以對以‘Name’結尾的類進行過濾忽略。

使用問答

在使用的時候要是有什麼問題,可以先看看《ZFJObsLib-iOS代碼混淆軟件使用問答(Q&A)

在軟件可以在系統欄-幫助-使用問答查看,如下圖:

軟件功能

✍️✍️✍️ZFJObsLib有很多功能,大家可以根據自己的實際使用情況自行選擇!✍️✍️✍️

在此附上一些過包大佬常用的功能截圖,僅供參考,這些大佬最牛逼的一週過了五六個:

 

1.方法混淆

如果混淆了系統的方法,可以在方法過濾裏面手動添加需要過濾的方法,本人也統計了上百個常見的系統方法,但是肯定不能統計全面覆蓋,所以如果遇到沒有覆蓋的用戶可以手動添加設置!方法過濾功能在主菜單首頁!

2.屬性混淆

如果你的命名和系統屬性相同,導致系統屬性被混淆,比如屬性字段title和系統的一些控件的title一直,所以在混淆的過程中會把系統的屬性給混淆了,導致報錯,同樣你可以再屬性過濾中添加屬性字段title(我已經添加好title這個字段了🤗),所以你遇到其他的情況你可以自己添加!

3.類名混淆

類名混淆也會導致一些和系統重複,比如你的類名命名爲‘TabBarController’,但是在系統中有一個UITabBarController,所以在類名混淆的時候就會導致混淆出錯,通樣你可以使用類名過濾的功能,當然一般類名混淆基本上是沒錯的!🎉🎉🎉

4.添加垃圾代碼

在.h文件中暴露垃圾代碼

垃圾代碼的調用與實現

5.創建垃圾類

詳細請看:?《Python-ZFJObsLib完美生成iOS垃圾代碼》https://zfj1128.blog.csdn.net/article/details/99086206?

6.刪除註釋

7.敏感詞過濾

過濾博彩類敏感詞

8.修改Hash值

針對項目中的資源文件,我們可以通過修改Hash的方式來進行混淆,運行如下:

?Tips:已忽略的路徑 === ['/Pods/', '/Vendor/', '/LIB/', '/Util/']
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/MainWeb_Back_Icon.imageset/fanhui-4.png
?Infor:[UPdHash Meg] Old:dd03889c2e8647b9377d08775333557ff11425dd<->New:4a72c7b640882ae436b18868aa021331169db3fa
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/60.png
?Infor:[UPdHash Meg] Old:2d73347848d7168c09c48efe28a7ac5a9ec7411b<->New:551483123b5cc2c4c5ff2f5bf876db0d075261a1
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/58.png
?Infor:[UPdHash Meg] Old:c0c671fe3707bca8c5accdcadd8aa9f4f1f2726c<->New:d022db1c1f99c263b69bc09c09bc52dd1fa97fb5
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/120-1.png
?Infor:[UPdHash Meg] Old:5a6a7ec42d7489be18888828c1a9caba0da688ca<->New:8bbddfbbbed9023e4537e9e6caeed79c88ef8955
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/120.png
?Infor:[UPdHash Meg] Old:5a6a7ec42d7489be18888828c1a9caba0da688ca<->New:dcc4b47092bca1d6a6bb6d7bd671a0ef7ce2f4da
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/180.png
?Infor:[UPdHash Meg] Old:fee9220dbba52040517a0f77ffe8335e9300a64b<->New:d28a9118e1cf4a2ce9fc2805184ad42e20500c95
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/GUEG_ICON.png
?Infor:[UPdHash Meg] Old:07ed6c66ec7d5550bfa1e32b4848687417027c90<->New:fb780d87591cc86dd0fd24cdfa41e76a091ad657
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/80.png
?Infor:[UPdHash Meg] Old:ca3b3f61fc4c391515fe895d81360d15ec598049<->New:769ebf182fbb3a3fd69c46c3a595c1669c505f63
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/40.png
?Infor:[UPdHash Meg] Old:1bb7908a2ba1295fa69ad476a81003f2f413a3a8<->New:10793e67b27cdf5ad1ee4b9d37aecc62074b8ffc
?Infor:[UPdHash OK] /Users/zhangfujie/Desktop/Obfuscated/GUEG_MJ/GUEG/GUEG/Assets.xcassets/AppIcon.appiconset/87.png

......等等......

9.加密字符串

編譯前的代碼如下:

- (void)uiConfig{
    ZFJView *zfjView = [[ZFJView alloc] initWithZFJ:@"ZFJ1128"];
    zfjView.backgroundColor = [UIColor yellowColor];
    zfjView.frame = CGRectMake(100, 100, 150, 150);
    [zfjView setZFJViewTitleLab];
    [zfjView setZFJViewTitleLab:@"aaaaaa"];
    [zfjView setZFJViewTitleLab:@"aaa" efg:@"dscvdscsd"];
    [zfjView setZFJViewTitleLab:@"ddscvsdv" efg:@"cdsvdfbdf" hijk:@"cdvsvbdsbdfgnfdhnhdg"];
    [self.view addSubview:zfjView];
    
    [ZFJView svdsvfdsvfdvbzdfb];
}

編譯後的代碼如下:

- (void)uiConfig{
    ZFJView *zfjView = [[ZFJView alloc] initWithZFJ:ZFJ_NSSTRING(((char []) {240, 236, 224, 155, 155, 152, 146, 0}))];
    zfjView.backgroundColor = [UIColor yellowColor];
    zfjView.frame = CGRectMake(100, 100, 150, 150);
    [zfjView setZFJViewTitleLab];
    [zfjView setZFJViewTitleLab:ZFJ_NSSTRING(((char []) {203, 203, 203, 203, 203, 203, 0}))];
    [zfjView setZFJViewTitleLab:ZFJ_NSSTRING(((char []) {203, 203, 203, 0})) efg:ZFJ_NSSTRING(((char []) {206, 217, 201, 220, 206, 217, 201, 217, 206, 0}))];
    [zfjView setZFJViewTitleLab:ZFJ_NSSTRING(((char []) {206, 206, 217, 201, 220, 217, 206, 220, 0})) efg:ZFJ_NSSTRING(((char []) {201, 206, 217, 220, 206, 204, 200, 206, 204, 0})) hijk:ZFJ_NSSTRING(((char []) {201, 206, 220, 217, 220, 200, 206, 217, 200, 206, 204, 205, 196, 204, 206, 194, 196, 194, 206, 205, 0}))];
    [self.view addSubview:zfjView];
    
    [ZFJView svdsvfdsvfdvbzdfb];
}

加密混淆反編譯前後Hopper對比如下:

我們可以看到再通過Hopper看不到硬編碼了!???

10.翻新資源名

找到工程中的圖片資源並翻新,然後自動替換代碼中的引用。

這裏如果有圖片加載不出來的情況,很大可能是你在代碼中引用圖片名是採用字符串拼接的方式,導致資源文件被修改了,但是代碼中找不到無法修改的情況!🤓

11.混淆工程目錄

👉爲了保證目錄混淆的準確性,建議把項目中空的目錄都給刪了;還有一種情況就是沒有引用的文件夾也要刪了,比如本地有這個目錄但是項目沒有引用!👈

 

12.設置混淆前綴

說明:設置混淆前綴,一定要點擊保存哦!!!✌️✌️✌️還有就是可以設置方法混淆的後綴,如果不設置默認是Fun!

屬性混淆類名混淆方法混淆支持只加前綴不修改原來名字的功能,只需要在設置的前綴後面加上‘#’就OK了,如下圖:

13.混淆詞庫

ZFJObsLib自帶二十多萬的字典詞庫,所以不用擔心代碼重複問題;如果你覺得取得詞庫單詞目標性不強或者無意思,你可以自定義詞庫,自定義詞庫解學視頻如下:

鏈接:https://pan.baidu.com/s/1iBc1U-riqNEgVqbvCx8O7g  密碼:wadz

還可以通過讀取混淆詞庫來讀取其他項目的詞庫來混淆自己的項目,在混淆界面的系統欄-設置-詞庫選擇-讀取詞庫;

14.讀取UUID功能 / 翻新項目UUID功能

因爲不知道Xcode的UUID詳細生成規則,此項功能旨在從其他項目中讀取UUID,方便創建垃圾類和修改UUID使用;在混淆的過程中如果使用了創建垃圾類和修改UUID的功能,建議最好使用此功能讀取一個其他項目的UUID,以達到更真實的目的;最好的使用方法是用Xcode新建一個iOS項目,然後自己隨便創建幾個類或者試圖,接着再此功能讀取該新建項目的Xcodeproj來獲取UUID;如果在混淆過程中使用到的UUID數量大於讀取的UUID數量,則會先緊着讀取的UUID使用,當讀取的UUID使用完以後,ZFJObsLib會自動按照自己的規則創建UUID(不推薦)!

建議自己用Xcode創建一個項目,多創建幾個類或者試圖進行讀取!

翻新UUID效果對比圖

15.自定義添加屬性/方法/類名過濾字段

就拿屬性混淆爲例,在混淆過程成,如果你的屬性命名和系統的一些屬性命名重複了,導致在混淆的過程中把系統的屬性也給混淆了,導致報錯不能運行,所以需要把這樣的屬性給過濾掉,ZFJObsLib也有添加好的一些系統過濾字段,但是考慮的項目的多變性和不可能全部添加,所以除了軟件自帶的一些過濾字段,用戶也可以自己添加過濾字段,你也可以設置添加第三庫的屬性字段等等;方法和類目意義相同,這裏就不做過多贅述了!!!

16.魔改界面控件(字體)顏色

在審覈過程中會審覈你界面的UI,如果UI大面積相同肯定也是不行的,這裏有個黑科技,是一鍵修改UI控件的背景顏色或者添加背景顏色,也可以修改字體的顏色!

效果對比如下:

顏色魔改支持魔改類型和參數的自定義,如下:

工具箱

ZFJObsLib集成了幾個工具,這些工具對混淆作用不大,僅供大家方便使用!

1.爬蟲工具

詳情請看?《Python-一鍵爬取圖片、音頻、視頻資源》https://zfj1128.blog.csdn.net/article/details/98212623?

教學視頻

資源爬取:鏈接:https://pan.baidu.com/s/1xa9ruF_hMcN49716BJUx2w  密碼:1zpg

節點爬取:鏈接:https://pan.baidu.com/s/1ebWWYtjoKkiH9mqakR6EMQ  密碼:cosa

使用截圖

2.圖片壓縮工具

ZFJObsLib集成圖片壓縮工具,支持一鍵生成iOS開發三套圖標,也支持自定義壓縮尺寸,還可以移除Alpha通道,轉成RGB圖片模式;實現邏輯可參考:?Python-批量壓縮處理圖片(批量生成@1x, @2x, @3x)https://zfj1128.blog.csdn.net/article/details/94625153?

具體如下圖:

3.資源清理工具

在iOS項目開發的過程中,如果版本迭代開發的時間比較長,那麼在很多版本開發以後或者說有多人開發參與以後,工程中難免有一些垃圾資源,未被使用卻佔據着api包的大小!

這裏我通過Python腳本來查找項目中未被使用的圖片、音頻、視頻資源,然後刪除掉;以達到減小APP包大小的目的!

詳細請看:?Python-一鍵查找iOS項目中未使用的圖片、音頻、視頻資源https://zfj1128.blog.csdn.net/article/details/99290441?

4.翻譯助手

自動翻譯關鍵詞和描述,詳細請看《ZFJObsLib-iOS馬甲包多語言自動翻譯軟件》

如下圖:

混淆示例

這個項目是某位羣友提供的swift項目!

QQ空間裏面大量的過包記錄不是吹出來的,都是網友的真實反饋記錄:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章