歡迎來到 黑吧安全網 聚焦網絡安全前沿資訊,精華內容,交流技術心得!

Swiftshield:SwiftOBJ-C 代碼混淆工具

來源:本站整理 作者:佚名 時間:2019-10-06 TAG: 我要投稿


SwiftShield是一個用于為你的iOS項目對象生成不可逆加密名稱的工具,其目的是保護你的iOS apps不被一些逆向工具所破解(如class-dump和Cycript)。
class fjiovh4894bvic: XbuinvcxoDHFh3fjid {
  func cxncjnx8fh83FDJSDd() {
    return vPAOSNdcbif372hFKF()
  }
}
自動模式(僅限 Swift)
使用-automatic標簽,SwiftShield將使用SourceKit自動混淆整個項目(包括依賴項)。請注意,SwiftShield的自動模式的范圍與Xcode的本機重構工具的范圍直接相關,后者不會重構所有內容。雖然文檔中的特定情況不會被混淆,但SwiftShield將對所有可以進行逆向的Swift類和方法進行混淆處理。
手動模式(Swift/OBJ-C)
如果你想要完全混淆所有內容 – 包括typealases和內部屬性名稱,你也可以使用手動模式。這是運行SwiftShield的最簡單方式,但同時也是最耗時的。使用時,SwiftShield將根據你選擇的標簽對其屬性和類進行混淆處理。例如,在手動模式下運行SwiftShield并使用__s標簽,代碼如下:
class EncryptedVideoPlayer__s: DecryptionProtocol__s {
  func start__s() {
    let vc__s = ImportantDecryptingController__s(secureMode__s: true)
    vc__s.start__s(playAutomatically__s: true)
  }
}
混淆后:
class fjiovh4894bvic: XbuinvcxoDHFh3fjid {
  func cxncjnx8fh83FDJSDd() {
    let DjivneVjxrbv42jsr = vPAOSNdcbif372hFKF(vnjdDNsbufhdks3hdDs: true)
    DjivneVjxrbv42jsr.cxncjnx8fh83FDJSDd(dncjCNCNCKSDhssuhw21w: true)
  }
}
對加密的 Crash logs 進行反混淆處理
成功加密項目后,SwiftShield將生成一個包含conversionMap.txt文件的輸出文件夾,其中包含對項目所做的所有更改。
//
//  SwiftShield
//  Conversion Map
//  Automatic mode for MyApp 2.0 153, 2018-09-24 10.23.48
//
Data:
ViewController ===> YytSIcFnBAqTAyR
AppDelegate ===> uJXJkhVbwdQGNhh
SuperImportantClassThatShouldBeHidden ===> GDqKGsHjJsWQzdq
你可以通過運行以下命令來使用此文件自動反混淆任何類型的基于文本的crash文件:
swiftshield -deobfuscate CRASH_FILE -deobfuscate-map PATH_TO_CONVERSION_MAP

必要條件
自動模式
如果app的一個或多個模塊/擴展無法滿足這些條件,則可以使用-ignore-modules參數避免對其進行混淆處理。
1.沒有基于類/屬性名稱的邏輯,比如加載MyClass.xib因為String(describing: type(of:self))為’MyClass’。
2.沒有調用Swift方法的Objective-C類(調用Objective-C方法的Swift類是可以的,除非涉及到接口)
3.最新的Swift版本和Xcode命令行工具(適用于所有版本,但由于SourceKit版本不同,結果可能也會有所不同)
4.確保你的項目不包含SourceKit的bug。雖然這些bug不會阻止項目被混淆,但其中一些可能需要在之后進行一些手動修復。
(在Info.plist中使用NSExtensionPrincipalClass或變體的App Extensions(如Rich Notifications/Watch apps)也會對此類引用進行混淆處理,但會假定你沒有將其更改為默認的$(PRODUCT_MODULE_NAME).ClassName值。如果您修改這些plist指向不同模塊中的類,則必須在運行此工具后手動更改它們。)
手動模式
請確保你的標簽不會被用在那些不應被混淆的內容上,例如硬編碼字符串。
安裝
警告:SwiftShield會不可逆地覆蓋你所有的源文件。因此,建議你只在CI server和release builds上運行它。
從該存儲庫下載最新版本,然后單擊此處查看如何設置SwiftShield。
運行
自動模式
swiftshield -automatic -project-root /app/MyApp -automatic-project-file /app/MyApp/MyApp.xcworkspace -automatic-project-scheme MyApp-AppStore
必要參數:
automatic:啟用自動模式。
project-root:項目的根目錄。SwiftShield將使用它來搜索你的項目文件。
automatic-project-file:你app的main .xcodeproj/.xcworkspace文件。
automatic-project-scheme myScheme:從你的-automatic-project-file構建的main scheme。
可選參數:
ignore-modules:忽略混淆某些模塊,用逗號分隔。如果某個模塊無法正確混淆,請使用此選項。注意,這應該是導入模塊的確切名稱(而不是目標名稱!)。示例:MyLib,MyAppRichNotifications,MyAppWatch_Extension
show-sourcekit-queries:打印發送到SourceKit的查詢。注意,打印的數據內容量會非常大,這會導致你的終端看上去很混亂,因此僅將其用于錯誤報告和功能開發!
手動模式
swiftshield -project-root /app/MyApp
必要參數:
project-root:項目的根目錄。SwiftShield將使用它來搜索你的項目文件,storyboards和源文件。
可選參數:
tag:使用自定義標簽。默認為__s。
兩種模式的額外參數
verbose:打印詳細信息。
obfuscation-character-count:設置混淆名稱的字符數。默認情況下,為32。注意,由于名稱沖突的可能性較高,因此使用較小的數值會導致運行速度變慢。
dry-run:實際上不會覆蓋文件。對調試有用!
貢獻
我們非常歡迎對SwiftShield的貢獻!目前沒有貢獻指南,因此你可以自由使用“Issues”選項卡來討論未來的功能和改進。
 

【聲明】:黑吧安全網(http://www.eyhadu.live)登載此文出于傳遞更多信息之目的,并不代表本站贊同其觀點和對其真實性負責,僅適于網絡安全技術愛好者學習研究使用,學習中請遵循國家相關法律法規。如有問題請聯系我們,聯系郵箱[email protected],我們會在最短的時間內進行處理。
  • 最新更新
    • 相關閱讀
      • 本類熱門
        • 最近下載
        彩票大数据