iOS5發表的內容除了iCloud雲端服務以外,還有個重點就是跟著iPhone4S一起發表的Siri語音助理(其實背後也是龐大的雲端服務)。可惜的是,目前Siri限定只能在iPhone4S的手機上執行,其他販售中的iDevice(如iPad2/iPhone4/3GS/iPod Touch...)全都被拒於門外。蘋果公司對此輕描淡寫的表示,只有4S才能有良好的回應處理速度與用戶體驗。不過事實上呢?自然會有一群駭客團體去「驗證」蘋果的說法。當Siri的運作祕密隨著時間一一被解密,陸陸續續也有許多在「非iPhone4S」執行Srir的秘技出爐。目前大致上明瞭的是,只要是支援iOS5也Jailbreak過的機器,Siri還是有機會附身,開口說話為您服務。
以iOS開發者的立場來說,本來就不太鼓勵Jailbreak這種事情,所以平常只知道怎麼做就行了,未必需要無私分享,以免為自己招來麻煩(開發者學會JB與原理是一定要的,因為JB的確會造成若干問題,例如In-App Purchase的交易錯誤)。不過我個人決定還是公開無償分享自己的Siri移植經驗與做法,原因只有一個,實在看不慣那些無良「JB書」作者與出版社,將抄來應該免費的內容重新包裝販售,游走法律邊緣大賺黑心錢。這種人從網路上抄了一堆免費訊息內容寫到書裡,左打「JB不是盜版」扭曲外界的批評為自己的侵權行為護航,右推「我的書寫得比網路資訊詳細」騙讀者進來買,試問不是報章期刊雜誌也不是新聞媒體,有取得原作授權(包括程式畫面圖文)允許付費販售嗎?
人總會犯錯,甚至一錯再錯,這些都還好,但人不能不知錯,否則連禽獸都不如(寵物貓狗也有知錯的時候)。這些人可以再無恥一點沒關係...
好了...言歸正傳。要讓Siri在「非iPhone4S」的iOS裝置上顯靈,其實也是有若干的條件限制。首先,Apple的Siri主機採取的是SSH認證連線,目前這台主機只能接受從iPhone4S傳過來的Siri服務訊息,而iPhone4S的Siri也只認識SSH的連線主機。所以整個重點只有兩個:
1.非iPhone4S的機器安裝Siri(因為Siri並不在AppStore上販售,所以機器必須JB才能安裝)
2.非iPhone4S的機器必須偽裝成一台iPhone4S,連線到Siri伺服器(需利用一台真實4S的Siri驗證碼)。
所以,有兩個前提必須同時成立:
1.必須有一台合法取得的iPhone4S--簡單的說,非iPhone4S的機器都要偽裝成這台4S,所以這台4S必須真實存在且合法取得,講白話一點4S必須是自己的,否則就是冒用他人身分,是違法的。
2.要有JB、安裝deb、電腦檔案操作的能力。
3.基本的網路概念,知道DNS這玩意是做什麼的就行了。
4.保證不以任何形式包裝此Siri移植資訊/方法/工具來販售營利。
如果以上四者少了其中一個,很抱歉,以下不用看了。
如果你想藉由此資訊/工具/方法,來偷偷收集每一台不是自己擁有的iPhone4S機器的Siri驗證碼,以取得日後「幫非4S客開通Siri服務」的,很抱歉,這是一種違法的偷竊行為,也是背叛公開資訊分享的初衷,是不允許的,請回。
好了,以下終於要切入正題了。教你如何讓你的「非4S」偽裝成你的4S機器,啓動Siri服務。
整個動作的重點只有三個:
1.非4S的機器升級5.0.1,JB,安裝Spire,及設定。
2.用電腦架設簡易DNS。
3.透過自行架設的DNS,取得你的iPhone4S的Siri服務驗證碼。
4.將服務驗證碼放入非4S的機器。
以上整理出來的重點動作,我是參考以下這篇文章的做法,不過他用的是Windows環境去架設DNS環境。我個人是在MAC OSX 10.6環境下建置的,所以有關架設DNS的內容會以OSX環境下做為說明。
[教程](31/12 update siri key)【Spire教程】Siri直連服務器(有時間我發Key)
建議先熟讀以上的文章,並下載該文當中的附檔,然後再來執行以下的動作:
一、非4S的機器的動作
-1.升級到5.0.1,用redsn0w_mac_0.9.10將機器JB,然後進Cydia安裝Spire。這個動作需下載約100MB的Siri執行檔,所以需要久一點的時間。安裝完機器會自動重開機。
-2.安裝com.ericasadun.utilities-51.deb與com.vlo.cytogenesis_0.0.1-3_iphoneos-arm.deb
-3.設定Spire,將Proxy設定為https://guzzoni.apple.com (這個網址是正宗的Apple Siri服務伺服器)
-4.檢查機器下的/var/mobile/library/preferences/下,應該會有一個com.vlo.libsandwich.plist,把這個檔案拉出來放到電腦上,最後這個檔案會用得到。
所以非4S機器的動作可以先告一段落。
二、用電腦架設DNS服務。我用MAC OSX的操作來說明。DNS需要啓用SSH連線,所以得先建立相關的憑證。
解開該文中的「工具合.rar」,會發現底下有個Applidium目錄,以及一個dns.py。
1.開啓終端機,執行以下的動作(直接從以上連結複製內容過來)
(1)制作签署主体(可用任意名称和密码,建议使用guzzoni.apple.com便于区分)
openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt (common name建议使用guzzoni.apple.com)
(2)制作网站证书
openssl genrsa -des3 -out server.key 4096
openssl req -new -key server.key -out server.csr (common name必须是guzzoni.apple.com,重要!)
(3)去掉密码
openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.passless.crt
openssl rsa -in server.key -out server.key.insecure
————————————————
将 server.key 改名为 server.key.secure
将 server.key.insecure 改名为 server.passless.key
制作完毕会有6个文件,其中的ca.crt通过邮件寄到iPhone上安装。server.passless.key和server.key.secure放入Applidium(附件)工具文件夹中。
2.下載的檔案dns.zip,解壓縮之後是dns.py,修改dns.py將裡面提到的ip='xxx.xxx.xxx.xxx'改成MAC的IP。
3.終端機目錄移到dns.py所在的目錄,執行sudo python dns.py,
這個終端機畫面會停住卡住,顯示pyminifakeDNS:: dom.query. 60 IN A xxx.xxx.xxx.xxx(MAC的IP),然後這表示DNS有起來了。
4.另外再開一個新的終端機視窗,終端機工作目錄移動到Applidium底下
5.執行
gem install CFPropertylist
gem install eventmachine
會跑一段時間安裝上面的東西,結果可以不管。
6.這個終端機執行sudo ruby siriServer.rb,如果正常的話,這個終端機視窗也是會卡住的...
三、取得實體iPhone4S的Siri服務驗證碼
回到實體的iPhone4S的動作,這個步驟很簡單...確定iPhone4S跟MAC電腦在同一個區域網段內。
1.先從郵件信箱將二.1.(3)提到的ca.crt安裝在iPhone4S內。
2.將連線中的Wifi設定,DNS改到MAC的DNS。
3.啓動Siri,這時候Siri會回報錯誤,不過第二步驟的MAC終端機視窗會攔截到來自iPhone4S的訊息,大概長得像這樣:
"class"=>"LoadAssistant",
"properties"=>
{"assistantId"=>"c5aab33e-cd8a-4370-85d9-e23c50a21f4a",
"sessionValidationData"=>
"\002\330E\333(\345^*,!\006\255\2749i[\256\034&\250\334D$\3451wq\257R\234\244\a\305\000\000\000\340\003\000\000\000I\000\000\000\200\270\321P\025mR\322\211S\027?83\230-\27203,\023\307\234\036\355K\b\312\022R\245{\177\303|1p\3421\347)s\242\311q<WF\032\360%\334\021;\025\355\237\3174<\312\025\240XX\356\302;\226\177\030\210\v`\233$e\203O\002\024\177\215,\226\r\206S\200\035\250\"\023\016\317\351r\272y1\323\207\214\331\v^\005\217]\301\253\231bF\355<wq\346^\2629\211W'0\254\244Q\000\000\000\000\000\000\000O\001\034G&\231DI\272\264*\203\373\323F\344\323\207~\275\264\332\000\000\0006\006\b!\024\371(\3534:Ks\252\324\004C\\\301\236N\341-(\037\334\301K\363\300L`\341\310'\250o]q\244\356\276\374d\372\312\257\321\f\031\025Z\276\\T\330",
"speechId"=>"0990dcba-858f-445a-9461-e11d2f1bbf8d"}}
....然後底下可能是一堆錯誤,沒關係,已經抓到iPhone4S的驗證碼了。 就是上述紅字這一段。
4.第3步驟的驗證碼必須經過轉換。以下這篇文章有一個附檔
http://bbs.weiphone.com/read-htm-tid-3657056.html
下載文章最後的convertValidationData.rb.zip,解壓縮是convertValidationData.rb再丟到Applidium目錄下。
5.編輯convertValidationData.rb,有一行sessionValidationData = ""
將上述紅字部份填入引號之中,存檔。
5.再開一個終端機視窗,工作目錄移動到Applidium目錄下,執行ruby convertValidationData.rb,會輸出一段亂七八糟的亂碼,大概成這樣子:
AidJuz6Fnl59zGBXzJtDOuQRPdcsBxbGfylnxJ7tjqfxAAAA9AMAAABJAAAA
fL/ebyS35kCcNP5XDtBrwwTPwX5wD5AbRApQEOsvvJ5PNbX36cHzPOeuITRg
5bw7tGt/Zhal1CUl4WLDkcf9VASSzu8SYqVmV4yGvlJLKpGoUIOYH64xUSP3
J+gffE2ELBtfEDDFX9X7C+a17oCZ9En6V/lkRmq1NOL9rCvZQQ5gAAAAAAAA
AE8B9dwEAnq7+cafbEI3vVBMcfutu2QAAAA2CQNDL4K9yqeMVHmxhB+65C7E
TvljcxUTbqX+hrTdGdsaMuqXdadnMwwzk8GpAEyBaa3zZbT7
6.一.-4步驟的com.vlo.libsandwich.plist內容,有一個<data></data>區段,把藍色的內容填到<data>後面跟</data>前面,丟回機器內覆蓋原本的。
7.機器重開機,Siri可以用了。
===
測試的結果,3GS跟iPad都可以跑,只是3GS的喇叭收音似乎有重聽,似乎常聽錯指令。
iPad就更有趣了...問它天氣跟設定鬧鐘,它會說它出錯了,不然就是當機給你看(因為iPad沒有天氣跟鬧鐘)。
再來...每一次取得的驗證碼,有效期限不到24小時...過期之後Siri就會變成啞巴了,得再用iPhone4S重新取得一次。