iOS - 逆向工程

公司最近搞得物聯網項目,很注重安全,對於我這種架構師,固然考慮到APP使用上的安全。分享一篇逆向基礎文章.html


1.ios逆向工程指的是在軟件層面上進行逆向分析的一個過程
。若是想要達到對ios軟件較強的逆向分析能力,最好能很是熟悉ios設備的硬件構成、ios系統的運行原理,還要具有豐富的ios開發經驗,好比:拿到一個App以後能清晰的推斷出這個App使用的技術,包括引用了那些FrameWork,那些經典的第三方代碼,以及整個App工程大體的文件個數等。python

 

2.逆向工程的主要兩個做用:首先是攻破目標程序,拿到關鍵信息,能夠歸類於安全相關的逆向工程,其次是借鑑他人的程序功能來開發本身的軟件,能夠歸類於開發相關的逆向工程ios

 

3.與安全相關的ios逆向工程
ios 逆向工程最突出的應用領域就是與安全相關的,好比:經過逆向一個金融App,來評定這個軟件的安全等級,安全專家經過逆向ios病毒,來找到殺毒的方法,安全公司經過逆向ios系統電話、短信功能,來構建一個手機防火牆 

git

a.評定安全等級
ios中那些具備交易功能的App通常會先加密敏感數據,而後將加密過的數據存儲在本地或經過互聯網傳輸,而若是安全意識不夠強,就徹底有可能將重要信息直接用明文保存或傳輸,安全隱患極大。App雖然能夠將低維的攻擊防守得如銅牆鐵壁通常,可是擋不住高維的逆向攻擊,不過不能夠據此得出App不安全的結論,由於ios逆向工程的使用均來自一個前提:ios越獄,在這種環境下,咱們使用這些逆向工程技術來分析評估目標App中可被攻擊點有多少,可攻擊點越少的天然就越安全。

github

b. 逆向惡意軟件
ios 是隻能移動終端操做系統,它同計算機操做系統沒有本質區別,惡意軟件就是經過逆向工程定位系統和軟件漏洞,利用漏洞滲透進目標主機,獲取敏感數據

正則表達式

4.與開發相關的ios逆向工程
開發者能夠逆向系統調用,在本身的程序裏使用一些文檔中沒有說起的私有功能,還能夠逆向一些經典的軟件等算法


a.逆向系統調用
開發者編寫的軟件可以運行在操做系統中,提供各類各樣的功能,是由於操做系統自己已經內嵌了這些功能,軟件只是拿來重組使用。絕大多數的App的實現都源於公開的開發文檔,而不能使用諸如鎖屏,關機等文檔中不涉及的功能,若是你的程序面向Cydia,那麼不採用非公開功能將致使程序幾乎沒有競爭力,故能夠經過逆向ios系統調用,還原系統實現相應功能的代碼,並應用到本身的程序中。spring


b.借鑑別的軟件
逆向工程最受歡迎的應用場合就是「借鑑」他人的軟件功能。sql

 

如何判斷是否越獄成功?shell

  •      桌面是否有cydia

 

  •      工具判斷(好比pp助手)

如何使用cydia安裝軟件

 

2、 Mac遠程登陸到iphone

咱們常常在Mac的終端上,經過敲一下命令來完成一些操做,iOS 和Mac OSX 都是基於Drawin(蘋果的一個基於Unix的開源系統內核),因此ios中一樣支持終端的命令行操做,在逆向工程中,可使用命令行來操縱iphone。

Mac 和 iphone 創建鏈接以下圖

爲了創建鏈接須要用到 SSH 和OpenSSH
SSH: Secure Shell的縮寫,表示「安全外殼協議」,是一種能夠爲遠程登陸提供安全保障的協議,使用SSH,能夠把全部傳輸的數據進行加密,"中間人"攻擊方式就不可能實現,能防止DNS 欺騙和IP欺騙

OpenSSH: 是SSH協議的免費開源實現,能夠經過OpenSSH的方式讓Mac遠程登陸到iphone,此時進行訪問時,Mac 是客戶端 iphone是服務器

 

使用OpenSSH遠程登陸步驟以下
* 在iphone上安裝cydia 安裝OpenSSH工具(軟件源http://apt.saurik.com)

 

登陸方式 經過USB進行SSH登陸

  • 22端口

  • 端口就是設備對外提供服務的窗口,每一個端口都有個端口號,範圍是0--65535,共216個

  • 有些端口是保留的,已經規定了用途,好比 21端口提供FTP服務,80端口是提供HTTP服務,22端口提供SSH服務,更多保留端口號課參考 連接

  • iphone 默認是使用22端口進行SSH通訊,採用的是TCP協議

  • 默認狀況下,因爲SSH走的是TCP協議,Mac是經過網絡鏈接的方式SSH登陸到iphone,要求iPhone鏈接WIFI,爲了加快傳輸速度,也能夠經過USB鏈接的方式進行SSH登陸,Mac上有個服務程序usbmuxd(開機自動啓動),能夠將Mac的數據經過USB傳輸到iphone,路徑是/System/Library/PrivateFrameworks/mobileDevice.framework/Resources/usbmuxd

  • usbmuxd的使用

  • 下載usbmuxd工具包,下載v1.0.8版本,主要用到裏面的一個python腳本: tcprelay.py, 下載連接

  • 將iphone的22端口(SSH端口)映射到Mac本地的10010端口
cd ~/Documents/usbmux-1.08/python-client
python tcprelay.py -t 22:10010
加上 -t 參數是爲了可以同時支持多個SSH鏈接,端口映射完畢後,之後若是想跟iphone的22端口通訊,直接跟Mac本地的10010端口通訊就能夠了,新開一個終端界面,SSH登陸到Mac本地的10010端口,usbmuxd會將Mac本地10010端口的TCP協議數據,經過USB鏈接轉發到iphone的22 端口,遠程拷貝文件也能夠直接跟Mac本地的10010端口通訊,如:scp -p 10010 ~/Desktop/1.txt root@localhost:~/test 將Mac上的~/Desktop/1.txt文件,拷貝到iphone上的~/test路徑。

  • 先開一個終端,先完成端口映射 
  *cd 到usbmuxd文件夾路徑

  •python tcprelay.py -t 22:10010

  • 再開一個端口 注入手機

  • ssh root@localhost -p 10010

  • Zhanghua123:~ root# cycript -p SpringBoard

ps: 切記第一個終端不能夠關閉,才能夠保持端口映射狀態

 

3、 Cycript的使用

Cycript 是Objective-C++ JavaScript Java等語法的混合物,能夠用來探索,修改,調試正在運行的Mac\ios App

官網:http://www.cycript.org/
文檔: http://www.cycript.org/manual
經過Cycdia 安裝Cycript,就能夠在iphone上調試運行中的APP

使用上面usb連接的方式進入iphone
Zhanghua123:~ root# ps -e,會出現不少進程,看var開頭的,能夠看到開的進程,退出cy# 可使用快捷鍵 control + D

• cycript 基本語法

• https://segmentfault.com/a/1190000011720125

• 定義變量

• var 變量名 = 變量值

• 用內存地址獲取對象

• #內存地址

• 查看已經加載的全部OC類

• ObjectiveC.classes

• 查看對象的全部成員變量

• 對象

• 遞歸打印view的全部子控件

• view.recursiveDescription().toString()

• 篩選出某種類型的對象

• choose(UIViewController)

• choose(UITableViewCell)

 

注入手機
cycript Zhanghua123:~ root# cycript -p SpringBoard

 

添加一個view

cy# v2 = [[UIView alloc]init]

#"<UIView: 0x111b90ab0; frame = (0 0; 0 0); layer = <CALayer: 0x11002fe40>>"

cy# v2.frame

(extern "C" struct CGRect ":frame"(id, SEL))

cy# [v2 frame]

{0:{0:0,1:0},1:{0:0,1:0}}

cy# v2.frame = {0:{0:0,1:0},1:{0:320,1:200}}

{0:{0:0,1:0},1:{0:320,1:200}}

 

cy# [view addSubview: v2]

cy# v2

#"<UIView: 0x111b90ab0; frame = (0 0; 320 200); layer = <CALayer: 0x11002fe40>>"

cy# v2.backgroundColor = [UIColor redColor]

#"UIExtendedSRGBColorSpace 1 0 0 1"

cy#

 

Cycript 封裝的一些庫
從下面地址下載資源
https://github.com/CoderMJLee/mjcript
而後安裝在手機的 Device/usr/lib路徑下


具體使用以下:

Zhanghua123:~ root# cycript -p SpringBoard

cy# @import mjcript

{}

cy# MJAppId

@"com.apple.springboard"

cy# MJAppPath

@"/System/Library/CoreServices/SpringBoard.app"

cy# MJDocPath

@"/var/mobile/Documents"

cy# MJCachesPath

@"/var/mobile/Library/Caches"

cy#

 

4、sh腳本文件

  • 將常常執行的一系列終端命令行放到sh腳本文件中(shell),而後執行腳本文件,能夠經過sh、bash、source命令來執行sh腳本文件

  • sh bash

  • 當前shell環境會啓動一個子進程來執行腳本文件,執行後返回到父進程的shell環境,執行cd時,在子進程中會進入到cd目錄,可是在父進程中環境並無改變,也就是說目錄沒有改變

  • source

  • 在當前的shell環境下執行腳本文件,執行cd後會跳轉到cd的目錄,source能夠用一個點.來代替,好比「.test.sh」

cuilinhaodeMacBook-Pro:~ cuilinhao$ vim usb.sh

cd /Users/cuilinhao/Desktop/usbmuxd-1.0.8

python tcprelay.py -t 22:10010

 

  • 使用: 命令行直接執行 sh usb.sh

 

5、 ios 脫殼

  • 脫殼就是摘掉殼程序,加未加密的可執行文件還原出來,脫殼主要有2種方法:硬脫殼,動態脫殼
硬脫殼就是直接執行解密算法,動態脫殼,執行殼程序,將真實的內容解密出來,即熱內存中的可執行文件是已經解密過的,則咱們能夠直接導出,因爲手機程序比較複雜,ios 中經常使用的是硬脫殼。

  • ios 中有不少好用的脫殼工具

  • Clutch:

https://github.com/KJCracks/Clutch

 

  • dumpdecrypted: 

https://github.com/stefanesser/dumpdecrypted/

  • class-dump
class-dump的做用就是把Mach-O文件的class信息給dump出來(把類信息給導出來),生成對應的.h頭文件
官方網址: 

http://stevenygard.com/projects/class-dump/

下載完工具包之後將class-dump文件複製到Mac的/usr/local/bin目錄,這樣在終端就能識別class-dump命令了
經常使用的格式:class-dump -H Mach-O文件路徑 -o 頭文件存放目錄
ps: -H表示要生成頭文件 -O用於制定頭文件的存放目錄 
權限問題:

cuilinhaodeMacBook-Pro:脫殼 cuilinhao$ class-dump -H To-Do -o Headers

-bash: /usr/local/bin/class-dump: Permission denied

解決方法:在終端輸入以下命令

cuilinhaodeMacBook-Pro:脫殼 cuilinhao$ chmod +x /usr/local/bin/class-dump

 

1)下載源代碼,而後在源代碼目錄執行make指令進行編譯,得到dylib動態庫文件

2) 將dylib文件拷貝到iphone上,放到/var/root目錄
3) 終端進入dylib所在的目錄
4) 使用環境變量DYLD_INSERT_LIBARIES將dylib注入到須要脫殼的可執行文件(可執行文件路徑能夠經過ps -A查看獲取)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib + 可執行文件路徑

5) 後綴.decrpted文件就是脫殼後的可執行文件,該文件在var/root路徑下

6)檢驗一下是否脫殼成功

otool -l To-Do | grep crypt

cryptoff 16384

cycptsize 2490368

cryptid 0

 經過查看cryptid字段爲0,故脫殼成功。

7)導出頭文件

class-dump -H To-Do -o Headers

 

MJAppTools 使用

1.下載

 https://github.com/CoderMJLee/MJAppTools.git

2.放到Device/usr/bin目錄下

3.若是權限不夠則執行 chmod +x /usr/bin/MJAppTools

 

Zhanghua123:~ root# MJAppTools

-sh: /usr/bin/MJAppTools: Permission denied

Zhanghua123:~ root# chomd +x /usr/bin/MJAppTools

-sh: chomd: command not found

Zhanghua123:~ root# chmod +x /usr/bin/MJAppTools

Zhanghua123:~ root# MJAppTools

  -l  <regex>   列出用戶安裝的應用

  -le <regex>   列出用戶安裝的加殼應用

  -ld <regex>   列出用戶安裝的未加殼應用

  -ls <regex>   列出系統的應用

 

  1.由於該工具含有正則表達式,還能夠指定查找

Zhanghua123:~ root# MJAppTools -l WeChat

# 一共1個應用

-----

# 01 【微信】 <com.tencent.xin>

  /private/var/containers/Bundle/Application/D1F83FA2-BC91-4584-B459-4E1F926003BF/WeChat.app

  /private/var/mobile/Containers/Data/Application/A8964D5A-0046-4C27-AFA1-37882F27F17F

  Universal binary

      arm_v7

      arm_64

Zhanghua123:~ root#

 

7、 Reveal 安裝

  • Reveal 是一款調試ios程序UI界面的神器

  • 官網: https://revealapp.com

  • 下載: https://revealapp.com/download

  • 破解版 https://pan.baidu.com/s/1lz9lwTKXD9bS8DnvT9gkBQ 

提取密碼:b31u

  • 建議下載至少Reveal4版本,支持USB鏈接調試

  • 調試環境配置

  • iphone上安裝Reveal Loader

  • 軟件源: http://apt.so/codermjlee,不要安裝其餘源的版本,有可能不支持新版Reveal

  • 安裝完Reveal Loader後,打開[設置], 選擇須要調試的APP

  • 找到Mac的Reveal中RevealServer文件,覆蓋iphone的/Library/RHRevealLoader/RevealServer文件

  • ps: 在iPhone上沒有RHRevealLoader文件夾,能夠本身建立

  • 重啓SpringBoard

Zhanghua123:~ root# killall SpringBoard

 

8、Hopper 安裝

  •   百度下載安裝

9、安裝theos

  • Theos是一個越獄開發工具包,Theos是越獄開發工具的首先,這個工具是爲了後面對逆向的app進行代碼編寫使用。後面再講tweak時會說到。

 

1、 安裝簽名工具ldid

 

  •      先確保安裝了brew, 點我

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

 

  •      利用brew 安裝ldid

brew install ldid

 

2、 修改環境變量

  • 編輯用戶的配置文件

vim ~/.bash_profile

 

  • 在.bash_profile 文件後面加入如下2行

vim ~/.bash_profile

 

  • 讓.bash_profile配置的環境變量當即生效

vim ~/.bash_profile

 

3、 下載theos

  • 建議在$THEOS目錄下載代碼(就是上面配置的~/theos目錄)

git clone --recursive https://github.com/theos/theos.git $THEOS

               

使用Theos來建立一個使用工具,並進行編譯,編譯後安裝到咱們的越獄手機上,使用theos目錄中bin下的nic.pl命令,在執行nic.pl命令後,會讓你選擇新建工程的模板。目前theos中內置的是12套模板,建立tweak,那麼就選11便可,編譯完成後,咱們要將項目進行打包,這樣咱們的越獄設備才能進行安裝。
cd 到一個存放項目代碼的文件夾。

 

4、 新建tweak項目

•  iOS越獄開發中,各類破解補丁的統稱爲Tweak,一般意義上咱們說的越獄開發,都是指開發一個Tweak.


基本上,tweak都依賴於一個名叫cydia Substrate (之前名字也叫mobile Substrate)的動態庫,Mobile Substrate是Cydia的做者Jay Freeman (@saurik)的做品,也叫Cydia Substrate,它的主要功能是hook某個App,修改代碼好比替換其中方法的實現,Cydia上的tweak都是基於Mobile Substrate實現的.

 

iOS的tweak開發能夠有兩種發佈方式。一種是隻能在越獄設備上安裝的打包成deb格式的安裝包,另外一種是直接使用開發者本身的證書/企業證書直接將補丁打包成ipa,這樣不須要越獄也是能夠安裝的,只是這種非越獄的限制比較大,一般只是用來給某個app打個補丁或者相似的功能啥的。


•  tweak的實質就是ios平臺的動態庫。IOS平臺上有兩種形勢的動態庫,dylib與framework。Framework這種開發者用的比較多,而dylib這種就相對比較少一點,好比libsqlite.dylib,libz.dylib等。而tweak用的正是dylib這種形勢的動態庫。咱們能夠在設備的/Library/MobileSubstrate/DynamicLibraries

目錄下查看手機上存在着的全部tweak。這個目錄下除dylib外還存在着plist與bundle兩種格式的文件,plist文件是用來標識該tweak的做用範圍,而bundle是tweak所用到的資源文件

cd ~/Desktop

nic.pl

 

選擇 iphone/tweak

填寫項目信息
Project Name

項目名稱

Package Name

項目ID (隨便寫)

Author/Maintainer Name
做者, 直接敲回車按照默認

[iphone/tweak] MobileSubstrate Bundle filter
須要修改APP的Bundle Identifier (喜馬拉雅的是com.gemd.iting )
能夠經過Cycript 查看APP 的Bundle Identifier
[iphone/tweak] List of applications to terminate upon installation
直接敲回車就能夠

  Project Name (required): ting_tweak

  Package Name [com.yourcompany.ting_tweak]: com.mj.ting

  Author/Maintainer Name [MJ Lee]:

  [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:

  com.gemd.iting

  [iphone/tweak] List of applications to terminate upon installation (space-

  separated, '-' for none) [SpringBoard]:

  Instantiating iphone/tweak in ting_tweak/...

  Done.

 

5、編輯Makefile
* 該文件相似於配置文件,用來指定工程用到的文件、框架、庫、使用的SDK等等,將整個編譯、打包、安裝的過程進行自動化,在前面加入環境變量, 寫清楚經過那個ip和端口訪問手機
THEOS_DEVICE_IP THEOS_DEVICE_PORT

      export THEOS_DEVICE_IP=127.0.0.1

      export THEOS_DEVICE_PORT=10010

      include $(THEOS)/makefiles/common.mk

      TWEAK_NAME = ting_tweak

      ting_tweak_FILES = Tweak.xm

      include $(THEOS_MAKE_PATH)/tweak.mk

      after-install::

     install.exec "killall -9 SpringBoard"

 

若是不但願每一個項目的Makefile都編寫環境變量,也能夠添加到用戶配置文件中,編輯完畢以後 source ~/.bash_profile 讓配置生效

      $ vim ~/.bash_profile

      export THEOS=~/theos

      export PATH=$THEOS/bin:$PATH

      export THEOS_DEVICE_IP=127.0.0.1

      export THEOS_DEVICE_PORT=10010

      $ source ~/.bash_profile

     

安裝完成以後

cuilinhaodeMacBook-Pro:~ cuilinhao$ cd theos/

cuilinhaodeMacBook-Pro:theos cuilinhao$ ls

LICENSE.md  bin     lib     package.json    toolchain

Prefix.pch  extras      makefiles   sdks        vendor

README.md   include     mod     templates

cuilinhaodeMacBook-Pro:theos cuilinhao$ ls -l

total 96

-rw-r--r--   1 cuilinhao  staff  35367  4 26 10:04 LICENSE.md

-rw-r--r--   1 cuilinhao  staff    754  4 26 10:04 Prefix.pch

-rw-r--r--   1 cuilinhao  staff    829  4 26 10:04 README.md

drwxr-xr-x  19 cuilinhao  staff    608  4 26 10:04 bin

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 extras

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 include

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 lib

drwxr-xr-x  25 cuilinhao  staff    800  4 26 10:04 makefiles

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 mod

-rw-r--r--   1 cuilinhao  staff    655  4 26 10:04 package.json

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 sdks

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 templates

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 toolchain

drwxr-xr-x   7 cuilinhao  staff    224  4 26 10:04 vendor

 

進入bin 進行查看

cuilinhaodeMacBook-Pro:theos cuilinhao$ cd bin

cuilinhaodeMacBook-Pro:bin cuilinhao$ ls -l

total 80

-rwxr-xr-x  1 cuilinhao  staff   491  4 26 10:04 deb_build_num.sh

lrwxr-xr-x  1 cuilinhao  staff    29  4 26 10:04 denicify.pl -> ../vendor/nic/bin/denicify.pl

lrwxr-xr-x  1 cuilinhao  staff    21  4 26 10:04 dm.pl -> ../vendor/dm.pl/dm.pl

-rwxr-xr-x  1 cuilinhao  staff   892  4 26 10:04 fakeroot.sh

-rwxr-xr-x  1 cuilinhao  staff   148  4 26 10:04 install.copyFile

-rwxr-xr-x  1 cuilinhao  staff   313  4 26 10:04 install.exec

-rwxr-xr-x  1 cuilinhao  staff   213  4 26 10:04 install.mergeDir

lrwxr-xr-x  1 cuilinhao  staff    29  4 26 10:04 logify.pl -> ../vendor/logos/bin/logify.pl

lrwxr-xr-x  1 cuilinhao  staff    28  4 26 10:04 logos.pl -> ../vendor/logos/bin/logos.pl

lrwxr-xr-x  1 cuilinhao  staff    24  4 26 10:04 nic.pl -> ../vendor/nic/bin/nic.pl

lrwxr-xr-x  1 cuilinhao  staff    27  4 26 10:04 nicify.pl -> ../vendor/nic/bin/nicify.pl

-rwxr-xr-x  1 cuilinhao  staff   980  4 26 10:04 package_version.sh

-rwxr-xr-x  1 cuilinhao  staff   801  4 26 10:04 post-update

-rwxr-xr-x  1 cuilinhao  staff   437  4 26 10:04 target.pl

lrwxr-xr-x  1 cuilinhao  staff    12  4 26 10:04 update-git-repo -> update-theos

-rwxr-xr-x  1 cuilinhao  staff  1030  4 26 10:04 update-theos

-rwxr-xr-x  1 cuilinhao  staff   552  4 26 10:04 vercmp.pl

cuilinhaodeMacBook-Pro:bin cuilinhao$

 

配置路徑,使nic.pl 讓在任何地方訪問到
在cuilinhaodeMacBook-Pro:~ cuilinhao\(下
ls -alvim .bash_profile
: 表示路徑是並行的。
\)PATH 是引用環境變量的值
PATH = ~/theos/bin:$PATH

export THEOS=~/theos

export PATH=$THEOS/bin:$PATH

 

配置完以後查看

cuilinhaodeMacBook-Pro:~ cuilinhao$ echo $PATH

/Users/cuilinhao/.rvm/gems/ruby-2.2.2/bin:/Users/cuilinhao/.rvm/gems/ruby-2.2.2@global/bin:/Users/cuilinhao/.rvm/rubies/ruby-2.2.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/cuilinhao/.rvm/bin

cuilinhaodeMacBook-Pro:~ cuilinhao$

 

ps: 若是配置完以後,尚未出現路徑,執行命令 source .bash_profile 使路徑生效


* 參考:http://3code.info/blog/2016/11/2_Theos_-install&run.html

 

6、編寫代碼
下方就是在Tweak.xm中的全部代碼。是Logos語法,使用起來是比較簡單的。%hook與%end成對出現,%hook後方跟的是咱們要修改的類名
打開tweak.xm 文件

%hook SBIconParallaxBadgeView

 

- (id)init

{

    return nil;

}

 

%end

 

7、 編譯-打包-安裝
* 編譯

make

 

  • 打包成deb

make package

 

  • 安裝(默認會自動重啓Springboard)

make install

 

8、可能遇到的問題
1. -make package的錯誤

Can't locate IO/Compress/Lzma.pm in @INC (you may need to install the

  IO::Compress::Lzma module) (@INC contains: /Library/Perl/5.18/darwin-

  thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-

  thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2

  /System/Library/Perl/5.18/darwin-thread-multi-2level

  /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-

  multi-2level /System/Library/Perl/Extras/5.18 .) at

  /Users/mj/theos/bin/dm.pl line 12.

  BEGIN failed--compilation aborted at /Users/mj/theos/bin/dm.pl line 12.

  make: *** [internal-package] Error 2

 

  • 錯誤是由於打包壓縮方式有問題,改爲gzip壓縮就能夠了

  • 修改dm.pl 文件,用#號註釋掉下面兩句

vim $THEOS/vendor/dm.pl/dm.pl

 #use IO::Compress::Lzma;

 #use IO::Compress::Xz;

 

  • 修改deb.mk 文件第6行的壓縮方式爲gzp

vim $THEOS/makefiles/package/deb.mk

_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip

 

2 -make 錯誤

 Error: You do not have an SDK in

 /Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/SDKs

 

  • 是由於xcode 致使路徑(有可能安裝了好幾個xcode),須要指定一下xcode

sudo xcode-select --switch

/Applications/Xcode.app/Contents/Developer/

 

  1. 在make是出現Nothing

> Making all for tweak xxx...

  make[2]: Nothing to be done for `internal-library-compile'.

 

  • 是由於以前已經編譯過,有緩存致使的,clean一下便可

make clean

make

相關文章
相關標籤/搜索