天天看點

06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

加殼和脫殼

  • 01-加殼和脫殼
    • 1.1 加殼
    • 1.2 脫殼
    • 1.3 iOS中的脫殼工具
    • 1.4 如何驗證可執行檔案是否已經脫殼?
  • 02-Clutch
    • 2.1 Clutch - 配置
    • 2.2 Clutch – 使用
  • 03-dumpdecrypted
    • 3.1 dumpdecrypted
    • 3.2 dumdecrypted – 細節
      • 3.2.1 在使用過程中,可能會遇到以下錯誤
      • 3.2.2 原因1:簽名失敗
      • 3.2.3 原因2:對dylib所在的檔案夾權限不夠

01-加殼和脫殼

1.1 加殼

  • IPA檔案上傳App Store及下載下傳
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

什麼是加殼?

利用特殊的算法,對可執行檔案的編碼進行改變(比如壓縮、加密),以達到保護程式代碼的目的

06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

1.2 脫殼

什麼是脫殼?

摘掉殼程式,将未加密的可執行檔案還原出來(有些人也稱為“砸殼”)

  • 脫殼主要有2種方法:硬脫殼、動态脫殼
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

1.3 iOS中的脫殼工具

  • iOS中有很多好用的脫殼工具
    • Clutch:https://github.com/KJCracks/Clutch
    • dumpdecrypted:https://github.com/stefanesser/dumpdecrypted/
  • 注意 : 絕大多數的APP使用Clutch脫殼是不成功的,建議使用dumpdecrypted

1.4 如何驗證可執行檔案是否已經脫殼?

  • 檢視Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 通過otool指令行也可以
otool   -l   可執行檔案路徑   |   grep   crypt 
           

02-Clutch

2.1 Clutch - 配置

  • 下載下傳最新的Release版: https://github.com/KJCracks/Clutch/releases
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 建議去掉版本号,改名為Clutch
  • 将Clutch檔案拷貝到iPhone的/usr/bin目錄
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 如果在iPhone上執行Clutch指令,權限不夠,賦予“可執行的權限”
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

2.2 Clutch – 使用

  • 列出已安裝的APP:Clutch -i
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 輸入APP序号或者Bundle Id進行脫殼操作:

    Clutch -d APP序号或BundleId

    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 脫殼成功後會生成一個ipa檔案
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

03-dumpdecrypted

3.1 dumpdecrypted

  • 下載下傳源代碼,然後在源代碼目錄執行make指令進行編譯,獲得dylib動态庫檔案
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • 将dylib檔案拷貝到iPhone上(如果是root使用者,建議放/var/root目錄)
    • 終端進入dylib所在的目錄
    • 使用環境變量DYLD_INSERT_LIBRARIES将dylib注入到需要脫殼的可執行檔案(可執行檔案路徑可以通過ps -A檢視擷取)
    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib   可執行檔案路徑
               
06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted
  • .decrypted

    檔案就是脫殼後的可執行檔案
    06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

3.2 dumdecrypted – 細節

3.2.1 在使用過程中,可能會遇到以下錯誤

06-加殼和脫殼01-加殼和脫殼02-Clutch03-dumpdecrypted

3.2.2 原因1:簽名失敗

  • 解決方案:重新簽名
  1. 終端執行下 :security find-identity -v -p codesigning看看 你電腦 目前有哪些可用的簽名證書
  2. 然後重新簽下名:codesign --force --verify --verbose --sign “iPhone Developer: xxx xxxx (xxxxxxxxxx)” dumpdecrypted.dylib

3.2.3 原因2:對dylib所在的檔案夾權限不夠

  • 解決方案:将dylib放在使用者所在檔案夾,比如
    • 如果是root使用者,請将dylib放在/var/root目錄
    • 如果是mobile使用者,請将dylib放在/var/mobile目錄