2010-03-16

製作金卡 (Gold Card)

根據神人的研究,發現 HTC 的韌體更新程式 RUU (ROM Update Utility),為了怕使用者誤用、拿到不正確語系或版號的韌體去刷手機,於是在安裝程式裡面動了手腳,增加一些檢查機制,阻擋這類跨區或跨版本的韌體升級,這樣能避免不懂的使用者亂刷刷壞,間接也阻止了不同版本的韌體在不同地區的手機上使用。不過,如同之前改機前言所述,如果透過管道弄到「歐洲工程版」的 RUU,這道檢查機制就變成阻擋改機的第一道關卡。先從原理來看,RUU 在執行前,會要求使用者確認手機和電腦已經連接,一旦連接,安裝程式和手機就能溝通,藉由溝通結果來做檢查。而這個檢查機制主要有兩種:第一種開放給電話系統商使用,就是透過 SIM 卡檢查(讀取 ID 或序號之類的),來判斷是不是那一家的系統(Ex. 中華電信 or 台哥大),第二種是手機製造商(就是 HTC 自己啦),依照銷售的區域、機種和型號,判斷更新執行的權限,會檢查的包含了裝置識別碼 (MID; Model Identification) 和客戶識別碼 (CID; Customer Identification)。這次提供改機後門的 RUU 和電話系統商無關、有限定手機型號,所以只要是 Magic 手機應該都能夠用,唯一阻擋在前面的只剩下 CID 檢查(硬去執行 RUU 會因為 CID incorrect 而 update fail)。所以要能做到 CID Unlock,才能開始改機的第一步:安裝歐版的 RUU。(聽說也可以直接修改更新安裝程式,跳過檢查直接達到 SIM Unlock & CID Unlock 的目的..)

實際 CID 檢查的詳細步驟我不是很瞭解,不過聽說在開機時、手機裡的 SPL (Second Program Loader, Android 上的 Bootloader, 類似 BIOS) 會讀取記憶卡做檢查,只要在手機的記憶卡裡寫入一些「引導資料」、讓 SPL 載入,當 RUU 要做 CID 檢查時,就能直接 bypass 啦!這張「被寫入引導資料」的記憶卡,就是所謂的「金卡」(Gold Card)。在製作金卡之前,要先確認幾個前提,首先所有步驟只和記憶卡有關,所以製作過程手機插著哪張記憶卡,就只能用那張卡來進行改機動作(也就是說不能產生寫入金卡資料後寫進別張記憶卡使用)。再者,這張卡必須是 FAT32 檔案系統(目前一般大容量記憶卡的標準格式),最後,有些人認為雜牌爛卡也會是金卡製作的失敗原因之一,所以最好是有品牌或好一點的記憶卡(我自己是用威剛 A-Data 8GB Class 6,買手機送的)。

製作金卡的第一個步驟是先取得手機的 CID。熟悉 Linux 的人可以透過手機的終端機程式(例如用 ConnectBot 連 Localhost、或是其他像 Android Terminal Emulator 之類的終端機工具,請自行安裝)從檢視下述檔案內容,或是先確認過電腦與手機連線狀況後,透過 ADB 工具(可以從下載的 Android SDK 壓縮檔裡 tools 目錄下取得),執行命令查看檔案內容:

adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid

或是使用 adb shell 登入,以及在手機上的終端機程式下命令:

cat /sys/class/mmc_host/mmc1/mmc1:*/cid

它會回一個格式像 11223344556677889900aabbccddeeff 的字串,相當於 16 個 Byte、32 個字元的長字串,這就是 CID。這個字串必須做點處理才能夠用,第一個處理是字串反轉 (Reverse),也就是每個 Byte 倒轉位置,以上面這個字串 11 22 33 44 ... dd ee ff 來舉例,所謂的反轉就是第一個 Byte 移到最後一個位置,第二個 Byte 移到倒數第二個位置....最後一個 Byte 移到第一個位置,所以範例字串反轉完就變成 ffeeddccbbaa00998877665544332211 了。其他教學文章是叫大家抓一個加解密工具 QMAT(試用或破解版),安裝和執行這個工具其實也只是為了做上面這個動作(Cyptoanalysis Tools -> Crypto Toolbox -> Reverse String),懶的弄這套工具的自己反轉字串就行了。反轉完的字串,第二個處理是第一個 Byte 替換成 00,這樣的 CID 才能去產生金卡用的引導資訊。所以範例的 CID 轉換結果為:

11223344556677889900aabbccddeeff -> 00eeddccbbaa00998877665544332211

可以手動,或利用 QMAT 來做字串反轉

得到處理過的 CID,網路上有根據這個 ID 能幫你自動產生引導資訊 (goldcard.img) 的服務,到 Free G1 goldcard generation 網站,填入 E-mail address 和處理過的 CID,網站會自動產生對應 ID 的資料映像檔,以附件直接寄到你的信箱,接下來把這個映像檔寫入記憶卡,金卡就算大功告成啦!(提醒:這個映像檔只能用在產生 CID 的那張記憶卡上,每次換不同記憶卡,就要重新找出 CID 來產生並取得其專屬的映像檔..)

產生映像檔的網頁服務,只要填妥資料就可以收到檔案

這個映像檔 goldcard.img 裡面盡是 Binary 的資料,因此我們需要一個編輯器、用映像檔以資料覆蓋掉記憶卡前端特定的資料區段,完成金卡的製作。這裡用的工具是 HxD Hex Editor,軟體安裝完,並且將手機記憶卡取出、透過讀卡機連接到電腦(會多出一台卸除式硬碟),執行 HxD Hex Editor 後(必須以管理員身份執行,不然不能寫資料進記憶卡),選擇 Extras 選單 -> Open disk -> Removable Disk,要確定這裡選的 Removable Disk 就是那個接記憶卡的讀卡機(不能確定的話就拔掉其他 USB 儲存裝置來確定),按 OK 之前記得取消「以唯獨方式開啟」(Open as Readonly),要修改的資料才能成功寫入。

打開 HxD Hex Editor,選擇 Open disk

選擇記憶卡所在的磁碟機,記得取消 Readonly

開啟成功,會產生一個獨立分頁用來檢視這張記憶卡的詳細資料(有點像硬碟機的前段磁區),接下來再選擇 Extras 選單 -> Open disk image,選定剛收到的 goldcard.img、選擇以 512 (Hard disks/Floppy disks) 開啟,會另外產生這個映像檔資料內容的分頁,資料範圍是 Offset 00000000-00000170,接下來全選、複製 goldcard.img 的所有內容,然後切到記憶卡的資料分頁,選擇 Offset 00000000-00000170 的區段,使用貼上寫入 (Paste write),然後存檔,這樣修改過的記憶卡就是張載入引導資訊 goldcard.img,能夠規避 CID 檢查的金卡 (GoldCard) 啦!

有了記憶卡資料的分頁,接著打開金卡的映像檔,選擇以 512 的 sector size 開啟

說實話,如何驗證金卡是否正確成功只有一種辦法,就是實際去執行會檢查 CID 的 RUU 程式。如果能夠執行、並進行官方韌體更新的話(不會出現 CID incorrect 之類的錯誤),那金卡製作就成功啦!金卡原理其實就是在記憶卡最前端的儲存空間寫入引導資料,這個動作不會影響記憶卡的使用、也不會破壞到記憶卡內的資料(怕的話記憶卡內的檔案可以先備份啦),所以有改機需求的人,即便現在還沒有要改機,也可以先做一下金卡來放著,哪天突然有需要馬上就能用囉!

參考文章:
SIM unlock and CID unlock your HTC Wizard
[HOWTO] Create a GoldCard - Bypassing the RUU/SPL CID check to Root/Downgrade
HTC版G2(32A)制作金卡详解教程

回應: 25

kimihu 提到...

請問關於我使用大大的 Recent Comment 語法為何這幾天
回應總數好像顯示不大對?

匿名 提到...

我不太會用adb,要在CMD上怎麼打才能執行??

匿名 提到...

了不起,看完以後就有改機的勇氣,謝謝啦....

匿名 提到...

請問一下 我照著文章操作 在執行adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid
出現了No such file or directory就沒動作了 手機跟電腦已經確定連接 FAT32的記憶卡也裝上了
請問我漏掉了哪個步驟?

匿名 提到...

Abin大您好,

歐洲版RUU下載位址似乎已失效,請問是否有其他下載位址呢?
能否方便請您幫忙提供一下呢?
謝謝您~~

Abin 提到...

「似乎已經失效」? 請問你有看我另一篇文章裡面的連結嗎?我剛剛試還是可以下載的。

匿名 提到...

Abin大您好,

我剛有再試一次,但當我等待90秒後,按下"Download file now"時,
會回到下載檔案的頁面,用IE或Firefox結果都一樣。

謝謝您的回覆~~

匿名 提到...

Abin大您好,

我剛剛試,已經可以下載了~
非常感謝您撥空回覆~ ^_^

毛毛 提到...

我依照方式取用手機CID碼,再破解~試刷了幾次都是[錯誤訊息131:客戶識別錯誤]
我自己認為應該是金卡製作有問題,再從頭製作一次發現CID的資料匣:後編號會變動,CID夾內碼也會跟著變動耶!!那是不是只要一次刷錯誤了就要重新製作金卡一次??

Abin 提到...

To 毛毛:
我自己沒刷失敗過,所以不知道你的狀況。不過據我所知,同一隻手機(&韌體)+記憶卡產生出來的 CID 應該是一樣的,至少我自己反覆實驗 CID 都沒變動過,編號會變動就很奇怪了,如果真的還是這樣,那可能要換張 SD 卡再試試看。

毛毛 提到...

感激Abin:
終於我在換了張4G_C4的TfCard,在手機裡重做一次金卡,再嚐試了刷歐規RUU,竟然神奇的完成了~ 開心 "\(^o^)/"
原本那張2G TfCard 可能是低於C4的規格,又或者是TfCard非得插在手機裡連接電腦做金卡的動作(我的會出現兩個Removable Disk的選項,我選了另外一個,在讀卡機做時只有一個),我實在也搞不懂捏~ @@"。
唉呀!!真是外行的總是在碰壁中學習、成長~ 我由衷的感謝ABIN您成立了這部落格,我會常常來拜讀的,謝謝!!
PS.CID會變動是真的唷!! (我第一次mmc1:d011;第二次是mmc1:d555)

yankivincen 提到...

不好意思!版主請問我透過您說的方法,但是在使用HxD的時候,一直都找不到Removable Disk,我的Physical disk下面只有optical disk而已,不曉得是那邊有問題?

Alderis 提到...

謝謝大大的文章~我在這邊作個心得分享~
1、我使用x64的win7會130無法連線(但adb跟sync都ok),但回到xp就ok了
2、製作金卡時,我怕卡片寫錯,特意幫它取名字叫GoldCard好分辨,但後來發現要寫的卡片真的是physical區的removeable Disk,不可以用Logical區的GoldCard,金卡才會製作成功
3、成功的金卡是可以寫入東西的,但如果是改GoldCard的話會變成無法寫東西進去。

以上,謝謝

Unknown 提到...

作者已經移除這則留言。

Unknown 提到...

我金卡也是失敗很多次, 還跑去買新的TF卡, 卻一樣一直出現[錯誤訊息131:客戶識別錯誤]…

後來發現取得的CID經過http://hexrev.soaa.me/解碼, 然後將解碼後的CID前兩個字元替換成00來取得goldcard.img

製作的金卡就能順利的躲過RUU的檢查。

在這關卡住的人也可以試試看~

Unknown 提到...

版主你好,
有幾個連結已經更新了, 如QMAT 已經更新為PSAS, Goldcard generator連結也更新了. anyway, 謝謝你分享的方法!!

Unknown 提到...

版大安安~
我點"產生映像檔的網頁服務"連結後,
出現的網頁不是像版大的貼圖 "generate your own G1 goldcard for free"
所以我點右邊的 "Free goldcard generator"
進去後有一個 "Free HTC android goldcard generator"
請問是在這個地方取得 goldcard.img嗎!?

CLPeng 提到...

請問金卡製作完成後,插回手機會顯示無法識別記憶卡,叫我進行格式化,格式化完成後記憶卡就可以被手機讀取並寫入資料,這樣是正確的嗎?謝謝!

Unknown 提到...

大大請問一下 我照著文章操作 在執行
adb shell cat /sys/class/mmc_host/mmc1/mmc1:*/cid
出現了No such file or directory, 手機跟電腦已經確定連接,請問我漏掉了哪個步驟?

cateyesblue 提到...

您這篇寫得清楚極了
我因為 adb 一直出現錯誤訊息
找 cid 那邊卡了好久
後來發現到 market
安裝一個叫做 goldcard helper 的 apk
可以在手機上直接看到 revsed cid
接下來我用您的方式試試
大感謝

Unknown 提到...

請問金卡製作完成後,插回手機會顯示無法識別記憶卡,會一直出現SD卡已卸除的訊息,而我必須進行格式化,格式化完成後記憶卡就可以被手機讀取並寫入資料,這樣是正確的嗎?謝謝!(拜託大大了,急...)

mail:zero1129@livemail.tw

Unknown 提到...

刷金卡的那個SD卡,也要當往後刷rom時用嗎?(應該說,刷金卡sd卡,只能用於這隻手機,除非要換,就要重刷金卡,是這樣嗎?)

匿名 提到...

升级可以完全不用金卡, 只要具备root权限, 透過 ADB 输入 adb shell, 這時候的系統提示符號還是 $, 接著输入su,系統的提示符號就會變成 #,按手機的軌跡球
输入 flash_image空格recovery空格/sdcard/recovery-RA-hero-v1.6.2.img.img 按手機的軌跡球, 出现#即可。
重新啟動,進入recovery模式你會發現recovery已經升級了!

五月花 提到...

金卡可以共用嗎???我的檔案不見了

Unknown 提到...

http://www.androidmi.com/jc/shuaji/201102/CID.html
SD卡改為金卡後若需格式化即沒有設定成功 問題在於
cat /sys/class/mmc_host/mmcX/mmcX:*/cid X可能為0 or 1 or 2
可參考上面連結找出x該填入 0 or 1 or 2
用原廠結鎖的人 要刷回原廠需重新鎖上 (fastboot oem lock)

張貼留言

歡迎留言或發表意見,不過要理性不做人身攻擊。匿名的朋友得到回應的速度會比較慢喔~
發問相關的禮貌和規矩請先參考這篇文章,不當留言、和本文無關的回應可能會被直接刪除無視喔!