電視機頂盒的方法,收看免費數(shù)字電視。 游走在灰色地帶,大打擦邊球的數(shù)字電視機頂盒共享器 隨著有線電視數(shù)字化發(fā)展進程的加快,數(shù)字電視這一新興的電視觀看及傳輸方式已經(jīng)開始被更多的普通市民 所熟悉,數(shù)字電視以接近于DVD的畫質(zhì)和立體聲甚至5.1聲道伴音這兩大最明顯的特點受到了不少有線電視用戶的關(guān) 注,同時更多可選擇的電視臺、點播節(jié)目也為豐富市民的業(yè)余生活增添了不少色彩,不過在數(shù)字電視剛剛起步的萌芽階段,還有多的不足和缺點需要改進。 按照國際慣例,數(shù)字電視機頂盒(SET-TOP-BOX,簡稱STB)分為數(shù)字地面STB、數(shù)字衛(wèi)星STB、數(shù)字有線STB和網(wǎng)絡(luò)STB這4種,南京市目前正在大力發(fā)展的數(shù)字電視類型是數(shù)字有線STB,是目前成本最為低廉,也最適合大力向普通市民所推廣的。整體來說,數(shù)字機頂盒以支持HDTV和互動性作為發(fā)展方向,而就目前的機頂盒產(chǎn)品來看,一部機頂盒內(nèi)包括了接收數(shù)字信號的調(diào)制解調(diào)芯片、視頻信號編解碼芯片、音頻處理器、音視頻數(shù)模轉(zhuǎn)換芯片等,一些高端的機頂盒中甚至還會整合安全芯片甚至可錄像硬盤,可見數(shù)字電視機頂盒在未來的發(fā)展空間還是相當(dāng)寬廣的。 創(chuàng)維C6000采用了意法的Qami5516方案;熊貓3216采用了意法的5516芯片,帶有180MHZ的CPU,銀河則采用了最為簡單的富士通功能單芯片H20A,雖然這三種機頂盒在內(nèi)部的設(shè)計上有一定的區(qū)別,但它們都是需要通過插入數(shù)字電視智能卡才能夠工作的,而數(shù)字電視智能卡就相當(dāng)于一個人有了駕照才能合法地駕駛汽車一樣。在使用模擬電視信號的時候,大家只需要申請有線電視開戶之后就可以在家中通過自帶電視信號調(diào)諧器的電視觀看節(jié)目,如果有多部電視的話只要購買有線電視信號分配器就可以在所有的電視上觀看有線電 視。而數(shù)字電視卻將這種免費的電視信號共享給“封殺”了,機頂盒需要在插入有效的智能卡之后才能使用就是為了保證數(shù)字電視信號不被盜用的一種方式,同時也能夠保證數(shù)字信號不被盜版商用來作為盜版節(jié)目源。 為了保證數(shù)字信號不被盜用,數(shù)字電視內(nèi)容管理方式以條件式接?。–A)和數(shù)字版權(quán)管理(DRM)作為基本保護機制,目前國內(nèi)的數(shù)字電視機頂盒采用的管理方式就是條件式接取這種機卡分離的方式,用戶必須通過專屬的智能卡來取得授權(quán)才能夠接收被解碼的信號,而服務(wù)提供商也能夠通過這種方式接收用戶的信息,包括用戶戶名、地址、智能卡卡號和收看數(shù)字電視的費用等信息。這種機卡分離的機頂盒使用方式被美國、歐洲和亞洲等國視為數(shù)字電視發(fā)展的機頂策略。 DRM采用的是許可證管理策略,由數(shù)字電視信號運營商對節(jié)目源進行加密,在用戶通過機頂盒發(fā)出節(jié)目接收請求之后 系統(tǒng)會自動檢查是否經(jīng)過許可,而認證的方式也同樣是通過IC卡等帶有帳號、密碼等信息的進行的,不過DRM管理的 規(guī)格相當(dāng)繁多:Windows%20Media的DRM、開放移動聯(lián)盟OMA推出的DRM%201.0/2.0規(guī)格、UT-DRM、NDS、SecureMedia 、WideVine、BesDRM等,規(guī)格的不統(tǒng)一使其并不被大多數(shù)有限數(shù)字電視運營商所接受。 無線機頂盒共享其與有線機頂盒共享器一樣都是通過音視頻接口接受機頂盒上的第二路信號輸出接口來實現(xiàn)數(shù)字電 視信號的“共享”的,不過無線的共享器的傳輸方式是通過紅外、調(diào)頻或2.4GHz來實現(xiàn)的, 值得注意的是,目前的 機頂盒在背后的接口都帶有兩路信號輸出接口,只要使用連接線將機頂盒的信號與兩臺電視連接就同樣可以實現(xiàn)這 樣的所謂“共享”功能,而這樣一來機頂盒共享器的作用也只有在不同房間都可以用遙控器控制機頂盒這種“遙控 共享器”的功能了。 那么這種有限數(shù)字電視機頂盒共享器是不是一無是處呢?事實上有一定動手能力的消費者完全可以將這種共享器與 客廳中的DVD連接使用,這樣沒有DVD的臥室里的電視機也同樣能夠收看DVD影碟。不過需要注意的是,目前的有線電 視管理相關(guān)規(guī)定顯示:如果在有線電視網(wǎng)絡(luò)上連接其他設(shè)備,必須通過廣播電視管理機構(gòu)的審查、批準(zhǔn)和備案,否 則就是非法入網(wǎng)。到目前為止,在有線電視網(wǎng)絡(luò)允許入網(wǎng)的設(shè)備中,還沒有機頂盒共享器這種產(chǎn)品,這也就意味著 沒有入網(wǎng)手續(xù)的機頂盒共享器在有線電視管理部門將被視為一種違規(guī)的產(chǎn)品。 不過目前機頂盒共享器的經(jīng)銷廠家認為:他們銷售的機頂盒共享器與機頂盒連接可以將機頂盒輸出的電視信號放大 ,傳輸?shù)狡渌娨暀C上,達到多臺電視機共看數(shù)字電視的目的。而共享器所解決的只是信號傳輸問題,并未涉及到 、轉(zhuǎn)換數(shù)字電視信號的問題,所以不算是盜取數(shù)字電視信號的行為。 歸根結(jié)底,市場上之所以會出現(xiàn)機頂盒共享器這種產(chǎn)品的最大原因,就在于如果要多部電視 收看數(shù)字電視,需要再 另外購買一部價值680元的機頂盒。而按照南京廣電目前有線數(shù)字電視的以有的有線電視線纜帶寬,每個家庭中最多 能夠同時使用三部機頂盒分別對應(yīng)三部電視,如果你想要使用第4部電視觀看節(jié)目的話就需要再另外開戶,令外開戶 就意味著除了有線初裝費之外,每月的收視費用都要翻倍,相比之下每只售價在200元-500元之間不等的機頂盒共享 器自然有著一定的生存空間。至于這種大打擦邊球的數(shù)字電視信號的共享行為究竟算不算違規(guī)產(chǎn)品,還要待相關(guān)的 法律或法規(guī)修正后才能夠界定。 電視機頂盒,可接多臺電視。錄入者聲明:本意在學(xué)習(xí)電子技術(shù)、交流電子技術(shù)。如有用本技術(shù)去非法接入有線電視線路,造成的不必要損失及觸犯法律,圴與本人無關(guān)!電視機頂盒,可接多臺電視。錄入者聲明:本意在學(xué)習(xí)電子技術(shù)、交流電子技術(shù)。如有用本技術(shù)去非法接入有線電視線路,造成的不必要損失及觸犯法律,圴與本人無關(guān)??! 一、思路 二、原理 三、方法 四、原理圖 一、思路 有線電視加密的原理是這樣的:電視臺把接改來的電視信號先輸入數(shù)字加密設(shè)備,把電視信 號通過算法加密后向外 輸出終端的解密設(shè)備(機頂盒子)解密后輸出普通的射頻信號,再送到我們的終端接收設(shè)備,由電視放出畫面。因 電視只能是接收普通的射頻信號(模擬信號),所以只能解密后再輸入電視,由電視放出畫面。有線電視加密法有 多種,這里的是使用“加擾法”。在加密到解密這段線路,要想非法接入偷接電視信號,成功的可能性幾乎是 10000000分之一。但經(jīng)解密器(機頂盒)解密后的信號任何可以常接收電視信號的電視機都能播放(即通用性,也 可說是共用性),這就是的切入點(軟件也需要切入點)。既然這樣,但為什么一個機頂盒只能接一臺電 視機用呢?我也試驗過,當(dāng)通簡單的方法接上兩臺電視機的時候,什么畫面也沒有了(因機頂盒有智能的識別功能 )。問題就在這里,也是我要教會大家的精要所在。 至于如何利用這個“切入點”進行我們的“小人”行為呢?我們通過什么手段來欺騙機頂盒,讓他以為是一臺電視 機呢?(就如軟件的時候,我們有時也要采用欺騙的方法來進行)。我將會在下一點“原理”中向大 家說明。 二、原理: 裝在我們家里的那個盒子的工作原理:經(jīng)加密的信號經(jīng)輸入端子輸入,由其內(nèi)部有關(guān)電路解除干擾信號(加擾法加 密),再經(jīng)輸出端子輸出正常的信號。其解密電路是否工作要有一個外部條件,就是電視的高頻頭反饋回來的信號 。如果沒有這個信號反饋回機頂盒,則其解擾電路不工作,照樣輸出未解密的信號,因而不能正常收看。其解密的 頻段分做若干段解密,如電視正在接收3頻道,則電視的高頻頭就反饋3頻道的諧振頻率給機頂盒,機頂盒就能輸出1 ——5頻道的正常信號,如此類推。 因此可用以下兩種方法進行: 1、把機頂盒放在其中一臺電視機(下稱電視1)高頻頭附近,讓其可以正常收看,再用分支器從輸出端分支出信號 到另外的電視機。這樣的做法的一個缺點:就是另外的電視機只能接收電視1接收的頻道附近的5個頻道。 2、用非與門電路或555電路制作一個開放式多諧振動器,其諧振頻率只要能履蓋有線電視的整個頻段即可。(制作 成本約6元左右)把這個諧振動器放在機頂盒的旁邊。讓機頂盒能接收到振動器發(fā)出的信號,再用分支器從機頂盒的 輸出端分支出多臺電視機,這樣,所有電視機就能接收所有頻道的信號了。 3、用高頻三極管如9018做一個高頻發(fā)射電路,利用射頻輸出再次發(fā)射,只要小小發(fā)射功率,讓機頂盒能接收得到即 可?;蛴猛S視頻線分支接入輸入或輸出端,的除去外層屏蔽線,只留中間的線長約1米,把這線繞在機頂盒。讓泄 漏出來的信號感應(yīng)給機頂盒接收。 第一章:CA智能卡的與反制 第二章:流行CA系統(tǒng)的漏洞分析實踐 第三章:流行CA應(yīng)用算法的分析設(shè)想 討論綜述 CA安全保障的三層關(guān)鍵:傳輸流的加擾,控制字的加密,加密體制的保護。 這三種技術(shù)是CA系統(tǒng)重要的組成部分,在處理技術(shù)上有相似之處,但在CA系統(tǒng)標(biāo)準(zhǔn)中是獨立性很強的三個部分。加 解擾技術(shù)被用來在發(fā)送端CA系統(tǒng)的控制下改變或控制被傳送的服務(wù)(節(jié)目)的某些特征,使未被授權(quán)的用戶無法獲 取該服務(wù)提供的利益;而加密技術(shù)被用來在發(fā)送端提供一個加密信息,使被授權(quán)的用戶端解擾器能以此來對數(shù)據(jù)解 密;而保密機制則用于控制該信息,并以加密形式配置在傳輸流信息中以防止非授權(quán)用戶直接利用該信息進行解擾, 不同的CA系統(tǒng)管理和傳送該信息的機制有很大不同。在目前各標(biāo)準(zhǔn)組織提出的條件接收標(biāo)準(zhǔn)中,加擾部分往往力求 統(tǒng)一,而在加密部分和保密機制則一般不作具體規(guī)定,是由各廠商定義的部分。 1、對傳輸流的加擾,DVB已有標(biāo)準(zhǔn)。目前在國際上占主流的有歐洲的DVB標(biāo)準(zhǔn)、北美國家的ATSC標(biāo)準(zhǔn)及日本的ISDB標(biāo) 準(zhǔn)三種標(biāo)準(zhǔn)中,對于CA部分都作了簡單的規(guī)定,并提出了三種不同的加擾方式。歐洲D(zhuǎn)VB組織提出了一種稱之為通用 加擾算法(Common Scrambling ALGorithm)的加擾方式,由DVB組織的四家成員公 司授權(quán),ATSC組織使用了通用的 三迭DES算法,而日本使用了松下公司提出的一種加擾算法。通用加擾算法是DVB標(biāo)準(zhǔn)組織推薦的對于TS流的標(biāo)準(zhǔn)加 擾算法。目前,在歐洲的數(shù)字廣播節(jié)目中普遍采用了這個算法。我國目前商業(yè)化的CA中,TS節(jié)目的加擾也基本上是 采用的這個算法。如果從的角度,攻破這個算法的意義要遠遠大于智能卡和攻破CA系統(tǒng)本身。 2、對控制字的加密算法一般采用RSA以及3DES算法,各家CA廠商各不相同。值得一提的是DVB里有一個規(guī)定,提到的 同密技術(shù)要求每個CA系統(tǒng)可以使用不同的加密系統(tǒng)加密各自的相關(guān)信息,但對節(jié)目內(nèi)容的加擾必須采用同一個加擾 算法和加擾控制字,可以方便多級運營商的管理,為多級運營商選擇條件接收系統(tǒng)提供了靈活性。這就為黑客攻破 智能卡創(chuàng)造了條件。 3、對加密體制,不同廠家的系統(tǒng)差別很大,其技術(shù)大體有兩種: 一種是以愛迪德系統(tǒng)為代表的密碼循環(huán)體制,另一 種是以NDS系統(tǒng)為代表的利用專有算法來進行保護,由于牽涉到系統(tǒng)安全性,廠家一般不會公開。因此從角度, 對系統(tǒng)的是難度也是比較大的。 第一章:CA智能卡的與反制 第一節(jié) 對于CA智能卡的分為兩種, 1、從硬件的角度,完全地仿照正版卡來定制IC卡; 2、 從軟件的方向,將正版卡的程序讀出,最后將程序?qū)懭隝C卡中,就變成與正卡無差別的D卡了。 仿制正版卡,可以將IC卡的觸點剝離下來,再將保護的塑料蝕掉,暴露出元件和內(nèi)部電路連接,就可以繪制 成電原理圖,最后交給能訂制生產(chǎn)的IC卡的廠家生產(chǎn)。這些仿制還有一個冠冕堂皇的名稱叫“反向工程”。國內(nèi)在 深圳和廈門等地都有能生產(chǎn)定制IC卡的廠家,在利益的驅(qū)使下,他們往往不會過問敏感問題。 IC卡中的元件如果是通用元件,通常可以通過IC卡的功能原理的分析來確定,雖然困難,但總是可以最終確 定。例如深圳目前直接使用流在市面上的ROM10與ROM11卡來制成D卡,ROM10與ROM11實際上是XX系統(tǒng)正版卡的“基礎(chǔ) 卡”,這些卡具有與正版卡相同的硬件基礎(chǔ),至于怎么流落到社會上的不得而知,但有一個事實就是大家應(yīng)該都收 到過安裝衛(wèi)星電視的短信,這是個可以想象的到的異常龐大的地下產(chǎn)業(yè)! 繼續(xù):IC卡中的元件如果是專用元件,確定元件的事情就變得極其困難和十分渺茫了。那么這個時候硬件仿 制的路走不通了,那么看看軟件仿真的路能不能走得通。 再看軟件仿真的路能不能走得通前,首先闡明軟件仿真的路能不能走得通有不同的判斷標(biāo)準(zhǔn)。 如果僅以在一段時段中,軟件仿真的D卡與正版卡都具有相同的條件收視功能來判斷,那么無疑,從D卡的實踐來看 ,軟件仿真已經(jīng)成功了。 但如果以任何時段中,軟件仿真的D卡與正版卡都具有相同的功能,特別是對抗反制的功能來判斷,那么我要 說,同樣無疑,軟件仿真是不可能成功的。 因此我們僅承認這種事實就夠了:自動對抗新的反制,使D卡與正版卡一樣免除后顧之憂,肯定是D卡研究的 終極目標(biāo)。但是即便達不到這個目標(biāo),只要能保證一段時間的仿真成功,CA的商業(yè)價值就依然存在! 補充說明反制:由于D卡的成功,尤其是帶AU(自動換Key0/Key1)的D卡程序的廣泛擴散,正版服務(wù)商感到 了巨大的壓力,逐步開始采用種種反制手段,讓D版的AU卡實效。 我們先研究一下這個反制是個什么東東:學(xué)習(xí)和搞嵌入式控制器開發(fā)的人都用過仿真器,如“偉?!毕盗械?/font> MCS-51的仿真器等。大家一定知道硬件仿真與軟件仿真存在一個本質(zhì)區(qū)別,即I/O功能的不同。一條取端口引腳值的 指令就足以區(qū)分是硬件仿真還是軟件仿真了。硬件仿真可以真實地取到引腳上的實際輸入,而軟件仿真得到的只能 是不會變化的內(nèi)存仿真值。 利用這個原理實現(xiàn)的反制程序分為兩部分,前面的部分通過I/O端口的訪問,區(qū)別出是真的硬件存在,還是 軟件仿真;后半部分對非法的仿真卡簡單地返回主程序,不能解開Key0/Key1;對正版卡,則修改Key0/Key1,使之 正確,然后返回主程序并保存key,保存的Key0/Key1用于ECM的解碼。 從歷次搜集的反制EMM中的方法中,可以將反制歸納為兩種,一種是從硬件或軟件上區(qū)別D卡與正版卡,從而 產(chǎn)生條件分支指令,使D卡仿真的程序失效;另一種是調(diào)用D卡中不可能有的,只有正版卡硬件才具備的MAP子程序, 使D卡無法執(zhí)行正確的程序。 先介紹前一種方法: 使用硬件端口區(qū)別正版卡與仿真卡的反制方法,由于具有特殊性能的端口數(shù)的限制,因此不可能有多種變化 ,一旦Hacker知道了反制的EMM結(jié)構(gòu)與原理,很容易就可以避開端口判斷的指令,直接轉(zhuǎn)到修改Key0/Key1部分。這 雖然并不是程序指令的直接仿真,只能算是功能仿真,卻可以使已知反制失效。 另外你也許會提出一些其他辦法,如目前的一些Nagra系統(tǒng)在下行的EMM命令中加入了甄別真?zhèn)魏汀皻⒖ā敝?/font> 令,對于“正改卡”,毫不留情地清除卡中程序并且讓它成為廢卡。 我可以說,為了對抗“殺卡”,這類“正改卡”的程序如果采用Block技術(shù),可以抵抗多數(shù)殺卡指令,同樣 能夠使這類“正改卡”得以安全使用。 先寫到這,后面介紹根據(jù)正版卡特有的機器指令代碼,讓正版卡能進行解碼、而沒有正版卡程序的仿真卡 無法正確解碼、從而獲得KEY的EMM思路。 第二節(jié): 以下介紹根據(jù)正版卡特有的機器指令代碼,讓正版卡能進行解碼,而沒有正版卡程序的仿真卡無法正確解碼, 從而獲得KEY的EMM思路。 按照道理,D卡使用的是AVR或其他類型的CPU,“正改卡”中的程序與正版卡也不相同,照理這些卡中都沒有正 版ROM10/ROM11卡的程序。因此,用只有正版卡才有的特定機器指令代碼作為密鑰來解密key0與key1,自然是十分聰 明的反制措施。 該反制的EMM以前146Dream TV可能曾使用過。目前XG有線又重新啟用,大致在一個周期的8天中,有兩天使用本 類EMM,另外6天使用另一個“超級MAP”程序。 這種反制的具體思路是: 下行的EMM中攜帶的Key與Key1是經(jīng)過加密編碼的,不能直接使用。解開它們需要的密鑰“種子”(即產(chǎn)生密鑰 的原始數(shù)據(jù))的地址由下行的EMM給出。注意!EMM中并沒有給出密鑰“種子”,而是給出了它們在正版ROM10/ROM11 卡程序存儲區(qū)中的地址,這個地址是隨機數(shù),不同的key0/key1,地址就不同。它的值總是大于S4000,防止取到 ROM10卡低端的無法讀出的無意義內(nèi)容。反制設(shè)計者設(shè)想,D卡或“正改卡”無法獲得正版卡的內(nèi)部程序,因此,即 使給出了地址,D卡也無法取得正確的機器碼作為密鑰的“種子”,自然也就無法生成密鑰,解開key0/key1了。 對于正版卡,按照給出的地址,取到16字節(jié)的機器指令代碼,經(jīng)過類似計算Hash效驗的方法,產(chǎn)生正確的密鑰 ,再對key0/key1進行DES編碼運算,就解出正確的key0/key1了。 上面介紹的“利用正版卡程序隨機地址處的機器碼作為Key的解碼密鑰”的EMM反制方法非常厲害,曾難倒了一 大批的高手。 對比一下昨天前一篇帖子中給出的EMM與上面介紹的EMM,就會發(fā)現(xiàn),前一篇帖子中給出的EMM是一種簡單的反制 ,只要知道了正確的Key0/Key1,再經(jīng)過認真分析和思考,就會明白其反制原來并找出解出Key的方法,目前Dream TV的反制都屬于這類簡單反制;但上面今天介紹的EMM是一種高級和復(fù)雜的反制,即使知道了正確的Key0/Key1,也 難以得知其反制的原理與找出解key的方法,目前XG有線和國外一些CA系統(tǒng)采用的是這類反制。由于XX的反制匯聚在 低級和高級的兩類難度上,所以黑客們懷疑這是兩類不同水平的技術(shù)人員的作品。低級難度的反制是衛(wèi)視服務(wù)系統(tǒng) 內(nèi)部技術(shù)人員的手筆,而高級的反制則直接出自CA系統(tǒng)研制人員的杰作。 兩種級別的反制也將國內(nèi)修改、編寫D卡程序的高手分成了兩類:有一些寫一點程序應(yīng)付低級反制的,往往采用 “頭痛醫(yī)頭、腳痛醫(yī)腳”的補丁程序,可以對付目前146-Dream TV的反制;只有少數(shù)高手 中的高手具有整體編寫程 序以及仿真MAP功能的能力,能采用更合理的對抗策略,能研制出復(fù)雜程序和新類型的D卡,最終可以對付高級難度 的反制。對付低級反制寫出對抗程序的時間大約是數(shù)小時到幾天,而對付高級反制找到方法并寫出程序的時間往往 需要數(shù)個月之久,而且還需要國內(nèi)外Hacker 們的協(xié)同配合。國內(nèi)高手中的高手人數(shù)很少,都是單兵作戰(zhàn)和埋頭苦干 的,與其他高手之間一般互不交流。 本節(jié)介紹的“利用正版卡程序隨機地址處的機器碼作為Key的解碼密鑰”的EMM反制方法十分成功,但它采用程 序的機器碼作為解開Key的密鑰,可能會出現(xiàn)以下幾個問題: 1. 如果電視系統(tǒng)歷史悠久,在用的卡可能有幾種,那么可能產(chǎn)生內(nèi)部機器指令碼不盡相同的問題; 2. 如果電視系統(tǒng)想要更新程序,也可能存在部分尚未更新程序的正版卡,同樣會產(chǎn)生內(nèi)部機器指令碼不相同的 問題。這個問題還可能阻止正版卡通過下行信號進行的升級:我們設(shè)想一下,正版卡用戶中,有的人天天看衛(wèi)視節(jié) 目,他們的卡順利升了級,而一部分人外出,卡很久都沒有使用了,剛回來想看衛(wèi)視,結(jié)果因為卡的程序不對,無 法收看,肯定對衛(wèi)視服務(wù)商大發(fā)雷霆。在用戶是上帝的外國,電視服務(wù)商對可能引起用戶的怒氣一定很忌諱的。 3. 對該反制最致命打擊是,可以設(shè)法讀出正版卡作為密鑰的那一部分程序機器碼,通過在 D卡的硬件上安排外 部EEPROM,存儲量有64KB、128KB、256KB等,將正版卡作為密鑰的程序機器碼全部保存起來,解開KEY時,照樣可以 從外部EEPROM中取到與正版卡一樣的解Key的密鑰,來對抗反制,使該方法失效,這是該類反制的終結(jié)者。 經(jīng)過了利用軟件仿真在I/O功能上的區(qū)別進行的反制和利用正版卡指令代碼作為密鑰進行的反制之后,目前幾個 在運行的CA系統(tǒng)(146的Dream TV與其他衛(wèi)視,XG以及國內(nèi)一些地方的本地有線數(shù)字電視等)紛紛進入了使用MAP功 能來進行反制的階段。 使用正版卡中的MAP編碼/解碼協(xié)處理器進行反制,是正版卡在設(shè)計階段就預(yù)留的終極反制殺手??梢钥吹?,正 版卡設(shè)計者防范于未然,預(yù)估到終有一天,第一道門(ECM與EMM的解碼)將被攻破,預(yù)先留好了第二道門做最后的 防守。未雨綢繆,是我們不得不佩服這些設(shè)計者的智慧與遠見。 第三節(jié) 在深入討論MAP功能及其仿真實現(xiàn)之前,為了后續(xù)文章讀起來不算費勁,需要先說明兩個方面的知識:一是什么是收 視卡防守的第一道門與第二道門? 二是EMM指令與Logging等知識。 今天讓我們先說說什么是收視卡防守的第一道門與第二道門? 收視卡是防止非法收視的守門員,在卡中設(shè)計了多種加密方法,最主要的有解決收視功能的ECM和自動換key的EMM的 解密,它們的解碼是第一道門。ECM與EMM的編碼與解碼使用的雖是不同的方法,但都是固定不變的標(biāo)準(zhǔn)方法。不同 的條件接收系統(tǒng)僅僅是編碼/解碼采用的數(shù)據(jù)有不同而已。舉個例子,有的卡可以解開多個同一類型CA系統(tǒng),該類卡 是按照下行的ECM或EMM的系統(tǒng)標(biāo)識(如146 Dream TV為4E和4F,XG有線為94和95等)選擇不同的數(shù)據(jù),而運行的程 序基本相同的。 仍然以XX為例,ECM的編/解碼采用DES與EDES算法,其原理早已公之于世。編/解碼所用的S_Boxes數(shù)據(jù)也已經(jīng)公開, 并且在不同的系統(tǒng)中固定不變。與標(biāo)準(zhǔn)的DES相比,XX系統(tǒng)的DES只是多了對字節(jié)進行了反序排列而已。ECM使用的 VerifyKey等數(shù)據(jù),通過后門密碼進入正版卡保留的數(shù)據(jù)空間,可以讀出這些關(guān)鍵的信息,加上BoxKey等信息,只要 能獲得當(dāng)前的Key0/Key1,就可以配合IRD解開解密收視用的控制字(Control Word),可以正常收看衛(wèi)視節(jié)目。 ECM的解碼可以解決收視的問題,但還需要手動輸入Key0/Key1。如果要象正版卡一樣自動換Key即所謂的AU,就需要 能解開EMM,并能正確地找到并保存Key0/Key1。與ECM的解碼相比,EMM的解碼要復(fù)雜的多!經(jīng)過Hacker的努力,EMM 的RSA編碼原理已經(jīng)完全弄明白,所需要的PK,VK等數(shù)據(jù)也可以通過Hacker的軟件和ROM10/ROM11卡的后門讀出,再 算出N1,P,Q,EP,EQ,IQModP,IPModQ,PPrimA,QPrimA等方便編程的數(shù)據(jù), 就可以順利解出EMM。 收視卡的第二道門是對EMM 中Key解密的防守。它的方法沒有固定的套路,可以任意變化。如XX系統(tǒng)的設(shè)計者安排了 可以通過EMM中攜帶程序的執(zhí)行,以及正版卡通過下行信號更新的EEPROM中補丁程序的運行來解碼。正版卡設(shè)計者可 能料到攻破第一道門是遲早的事,于是第二道門上的防守就成了最后的防線。前面章節(jié)介紹的幾種對EMM中的 Key0/Key1進行再加密,就是在第二道門上的防守。它的思路是:當(dāng)EMM解開后,如果其中的Key0,Key1是經(jīng)過加密 的,D卡仍然無法得到正確的Key。 國內(nèi)早期的D卡程序是移植國外Hacker 的,針對想收視的系統(tǒng),修改了相應(yīng)的數(shù)據(jù)就可以實現(xiàn)本地化,由于要得到 正確的Key需要的解碼方法沒有固定的套路,Hacker不可能事先料到,總是要反制后分析它的原理,再更新部分D卡 程序,進行對抗和補救。一般人沒有自己編寫D卡程序的能力,即使有寫卡器掌握了寫卡方法,但程序又難以得到, 這些麻煩會迫使許多人放棄D卡,轉(zhuǎn)而加入正版卡繳費收視的行列。 不過正版卡雖好,但其高額的收視費還是讓國內(nèi)廣大愛好者望之卻步,大家的希望還是寄托在D卡程序的完善上,希 望終有一天,D卡能與正版卡一樣不受反制。 第四節(jié) EMM指令與Logging知識 EMM是“授權(quán)控制命令”,簡單說就是“更改收視卡中信息的命令”?,F(xiàn)有系統(tǒng)如XX系統(tǒng)中 的EMM命令很多,EMM指令 中的FA(針對ROM10卡)和FB(針對ROM11卡)是所有EMM指令中功能最為強大的指令。在該指令中攜帶了6805指令寫 的小段程序。CAM(收視卡)將EMM解碼后,將該EMM攜帶的機器指令碼存入正版卡從S81開始的固定地址。以子程序 調(diào)用的方式,轉(zhuǎn)到該地址,執(zhí)行這段程序。這段程序的結(jié)束可以只是一個簡單的子程序返回指令,也可以用轉(zhuǎn)移指 令轉(zhuǎn)到保存Key的子程序去。前者一般不保存Key,后者才保存Key。 還以XX系統(tǒng)為例,其EMM長度最大為64字節(jié),既要包含Key0/Key1和一些標(biāo)識與過濾指令,又要包含一小段程序。受 到大小的限制,程序的長度不能超過37個字節(jié)。對于復(fù)雜的解碼反制,程序很長時,一般通過下行的信息將大部分 的程序?qū)懙秸婵ǖ腅EPROM中,由EMM中的小段程序來調(diào)用,正如XG有線當(dāng)前的反制所采用的方法。對于二次加密了 的Key0/Key1,只有正確執(zhí)行該段程序后,才可以還原Key0/Key1。 防止D卡正確執(zhí)行該部分程序是不難做到的,實際上,由于D卡采用的CPU不是6805家族的,D卡也不直接執(zhí)行該段程 序,但防止D卡研制者人工判讀該段程序卻是極端困難的。 如果D卡研制者采用人工判讀的方法,讀懂了新的EMM的反制原理,找到對抗反制的方 法,那么就可以在反制后的不 長時間內(nèi)研制出升級改進的對抗程序。這些程序通常會放到專業(yè)的黑客網(wǎng)站上開放給眾多黑客會員下載,具體地址 本文就不討論了,只是要說明這些網(wǎng)站確實存在,而且很活躍,這也是對DVBCN論壇上CA廠家的那些穿著皇帝新裝的 搶手最大的一個諷刺,說什么“ca是很安全的”之類的自欺欺人的瞎話,有空的話還是花點精力去琢磨琢磨仿制和 復(fù)制的區(qū)別,看看自己的水平到了什么地步,能不能入流。 判讀EMM內(nèi)容與反匯編其中的6805程序的步驟如下: 1、 通過某種手段,將EMM紀(jì)錄下來。這個步驟也稱為Logging,Logging通??梢酝ㄟ^1020卡或通過Season 卡等來進行卡等來進行。有的高級黑客用的Logging是用含有自己寫的特殊程序的卡,在新的含Key的EMM到來時寫入 EEPROM,再用寫卡器讀出即可;(一般圈內(nèi)沒有1020卡,都是用自己寫的卡程序log。) 2、 將Logging的文件交給XX程序。該軟件是學(xué)習(xí)和分析EMM、ECM以及XX系統(tǒng)其他信息的優(yōu)秀軟件,其中含 有不少有用的工具,對此有興趣的網(wǎng)友應(yīng)當(dāng)熟悉它的使用; 3、 如果你的XX程序目錄中含有正確的ROM10/ROM11的BIN,Keys.INI,Labels.INI,以及Routimes.INI等 文件,那么XX程序中的EMM XX功能會將該EMM解開,反匯編并加注釋成為易讀的源程序; 4、 閱讀EMM程序與包含的數(shù)據(jù),對比已知的正確的Key0/Key1,分析之后就可能知道反制的原理,但也可能分析之后仍然找不出頭緒。 如果分析明白了,就可以著手編程。對于1020卡,程序按照6805匯編語言編寫,匯編后加入ROM10/ROM11.BIN文件, 放到Fennir的XX目錄下;對于Fun卡,按照AVR匯編語言編程,替換或修改原來卡的部分程序,匯編成*.hex就可以使 用了。對于從事嵌入式控制器工作,或是信息類專業(yè)的人,編這些程序應(yīng)當(dāng)不是什么難事,但要編得好,卻也不容 易。對計算機匯編語言不熟悉的人,要自編程序,當(dāng)然要先學(xué)習(xí)和實踐,能否成功,全看各人努力和造化了。 第五節(jié)MAP 本節(jié)開始說起MAP攻略的技術(shù)基礎(chǔ)知識,有網(wǎng)友該問了為什么是基礎(chǔ)知識而不是詳細介紹?該攻略是全世界高手共同 努力得出的寶貴結(jié)果,可想而知,這份資料的寶貴不言而喻!由于是在DVBCN這種公開論壇,另外當(dāng)初寫這些文字也 是因為一時意氣用事和一個叫tsexpert的網(wǎng)友進行理論,結(jié)果到現(xiàn)在該老兄跑得無影無蹤,偶爾回個帖也是顧左右 而言他,對于技術(shù)的推演無片言只語的貢獻,變成了我孤家寡人在這里賣弄,所以也就沒意思了動力也小了很多, 因此本文不準(zhǔn)備展開和深入介紹。詳細的研究和討論,可以在日后歸納出“MAP技術(shù)專題”資料了專門交流,不過就 不是這種方法了。 OK,切入正題。XG有線“新例”超級反制的程序是利用MAP進行的反制程序。由于反制十分復(fù)雜,程序較長,所以分 為兩部分:小部分的是EMM攜帶的程序,大部分是通過下行信號預(yù)先已經(jīng)存入EEPROM的程序。通過閱讀它們,hacker 們可以了解MAP的調(diào)用($90E3)在反制中的作用。 調(diào)用MAP的EMM有難有易,以Dream TV為例,其MAP $0E功能就可以通過正確的Key,比較容易猜出來,它是與成片數(shù) 據(jù)交換有關(guān)的操作;而XG有線調(diào)用的MAP $11,$28,$39,$3A功能就極難猜出來,就像是一個“謎”。 反制進入使用MAP功能的階段后,D卡要對抗反制,必須研究MAP功能,只有弄懂了有關(guān)的MAP功能,并且在功能上仿 真它們,才可以有效對抗這類反制。大家可能會設(shè)想:如果我們將MAP協(xié)處理器的功能都了解了,將它們都仿真出來 ,那么不就可以與正版卡完全一樣了嗎?不過要弄懂MAP的功能,可不是一件容易的事。先讓我們了解一下協(xié)處理器 是什么東西: iB 一般計算機為了處理數(shù)據(jù)的需要,可以配上協(xié)處理器。協(xié)處理器的程序是不對外開放的,它 的程序存儲區(qū)對其它器 件而言是完全隔離和封閉的。無論如何,用目前的技術(shù)和手段,我們都讀不出Map協(xié)處理器的程序。因此,徹底了解 MAP協(xié)處理器的功能,是不可能的,除非開發(fā)MAP的技術(shù)人員被收買了或派間諜打入了研制MAP協(xié)處理器的公司,盜取 了它的技術(shù)資料...。這又有點像tsexpert老兄前面說的中央情報局的笑話故事了。 gy9 想像帶來虛幻的快感,卻不能解決問題,要解決問題,還是腳踏實地,認真學(xué)習(xí)與研究。 ROMX卡調(diào)用MAP功能是通過一個固定入口地址$9E03的子程序?qū)崿F(xiàn)的,該子程序稱為:CALL_MAP,調(diào)用時必須在A寄存 器中存入MAP的功能號。 我們看到EMM實際執(zhí)行的是一段很長的程序,EMM中的部分只是其中的一小段,絕大部分都存到了EEPROM區(qū),它們是 通過下行信號寫入卡中的EEPROM的。 據(jù)我所知,ROM3或ROM10或ROM11的正版卡在$4000~$99FF的程序代碼都相同,它們存在ROM區(qū),是固定不能改變的, 如果改變了,那么,“利用正版卡程序隨機地址處的機器碼作為Key的解碼密鑰”的EMM反制方法就要產(chǎn)生兼容性問 題了(這也許就是ROM卡稱謂的由來)。Hacker們將這部分程序稱為ROM卡的“ROM區(qū)基本程序”。卡復(fù)位后執(zhí)行的就 是這部分的程序。 ?Kg{q-u- 那么固定程序的ROMX卡是如何改變其程序的功能呢? 不少網(wǎng)友都知道,只要在ROM卡中可以改寫的EEPROM區(qū)中按規(guī)定寫入*.BIN文件的程 序代碼,就可以改變ROMX卡的實 際功能。 那么為什么在EEPROM區(qū)寫入的程序代碼能改變程序執(zhí)行時的實際流程呢?這是如何做到的呢? PC微機的操作系統(tǒng)或程序,如Windows,發(fā)現(xiàn)了Bug,用補丁更改時,需要先下載補丁,然后運行有關(guān)修補程序,改 變原來程序的代碼,才能完成修補。這種修補通常是在原來程序中要修改之處放上轉(zhuǎn)移指令,轉(zhuǎn)到補丁程序,執(zhí)行后再回到原來的程序繼續(xù)完成后續(xù)工作。這是修改程序功能常用的辦法。 但如果原來的程序不像PC微機那樣存在硬盤上可以更改,而是存在不可更改的ROM區(qū),補丁下載后,沒有改變原來程序的任何部分,補丁就可以自動起作用,就是奇怪的事了! 由于ROM區(qū)基本程序不可更改,又要能自動運行裝入EEPROM區(qū)中的補丁程序,ROM卡的設(shè)計者想出了一種巧妙的方法 。該方法能自動檢查EEPROM區(qū)是否有補丁程序,補丁程序補在原來程序的什么地方,如何自動運行這些補丁程序等 等。 有了這種巧妙的方法,在不改變ROM卡基本程序的前提下,只要將添加的程序或數(shù)據(jù)存入可更改的EEPROM區(qū),卡的程 序功能就可以得到增強或修改,就可以在不必收回或報廢原來卡的情況下,適應(yīng)各種不同的衛(wèi)視系統(tǒng)或其他應(yīng)用, 或?qū)ㄟM行升級換代,特別地,可以通過下行信號自動變更原來程序的邏輯功能。 第六節(jié): 為了學(xué)習(xí)和掌握D卡技術(shù),必須能夠讀懂別人編寫的程序,然后再自己修改或編寫自己的程序,所有這些,都需要了 解匯編語言源程序知識??梢哉f匯編語言程序知識是D卡技術(shù)入門的一道門檻,跨過了這道門檻,就得到了一把打開 寶庫的鑰匙。有不少網(wǎng)友開始上信誓旦旦,但往往乘興而來,敗興而去,不少人開始畏難,甚至逃跑了,就是難以跨 越匯編語言這道門檻。同時因為后續(xù)章節(jié)中經(jīng)常提到ASM、HEX、BIN等格式的文件,因此調(diào)整一下文章結(jié)構(gòu),補充一 點匯編語言程序基礎(chǔ)知識,真正想學(xué)習(xí)的網(wǎng)友友,還是要自己找資料踏踏實實系統(tǒng)地學(xué)習(xí)。 匯編語言源程序(簡稱“源程序”)是面向CPU的低層語言,該語言的指令(注意:不稱為“語句”)與CPU的 機器指令代碼一一對應(yīng)。對不同類型CPU的計算機,指令不同。源程序可以編寫或通過反匯編得到。運行匯編程序就 可以將匯編語言源程序轉(zhuǎn)為機器語言目標(biāo)代碼,這個轉(zhuǎn)換稱為“匯編”(注意:不稱為“編譯”)。源程序為純文 本文件,擴展名一般為ASM。目標(biāo)代碼文件格式很多,常用的有Intel的HEX格式和存機器碼的BIN格式等,它們都可 以被編程器接受用于將代碼燒寫入CPU或EEPROM等存儲介質(zhì)中。計算機CPU只能執(zhí)行機器指令。 匯編語言源程序的指令有兩種,一種是對應(yīng)CPU執(zhí)行的機器碼的“助記符指令”,另一種是指示匯編程序工作的 “偽指令”,再有一種“宏指令”實際上屬于偽指令,它可以用一個符號串簡化表示很多符號信息。 用一種類型的CPU執(zhí)行另一種CPU的程序,只能用仿真的方式,實現(xiàn)其功能,而不 能直接照搬來執(zhí)行。 在Nagra系統(tǒng)的Hack領(lǐng)域,常見的匯編語言有ST7/6805和AVR等,前者是正版卡的語言,后者是仿真卡的語言。 以下給出一些范例: 某種EMM攜帶的6805的源程序: Org $0081 ; 指定以下程序或數(shù)據(jù)開始地址 StartAddr81H: Lda $CE01 ; A:=EEPROM單元 [$CE01] Cmp #$01 ; 該單元內(nèi)容是否等于$01 Bne $A7 ; 如果不是,則EEPROM未裝入適當(dāng)?shù)某绦?,退?00A7 Jmp $CE02 ; 否則EEPROM有適當(dāng)?shù)某绦?,轉(zhuǎn)去執(zhí)行該程序 #N9=i7 @3 匯編后的地址、機器碼與源程序為:(該部分是*.LST即列表文件,它包含了源程序和匯編后機器指令或數(shù)據(jù),地址 等) Org $0081 ; 指定以下程序或數(shù)據(jù)開始地址 0081: C6 CE 01 StartAddr81H: lda $CE01 ; A:=EEPROM單元 [$CE01] 0084: A1 01 cmp #$01 ; 該單元內(nèi)容是否等于$01 0086: 26 A7 bne $A7 ; 如果不是,則EEPROM未裝入適當(dāng)?shù)某绦颍说?00A7 0088: CC CE 02 jmp $CE02 ; 否則EEPROM有適當(dāng)?shù)某绦?,轉(zhuǎn)去執(zhí)行該程序 。。。。。。。 以上部分略。 從以上范例中我們可以看到一些普遍規(guī)律(這幾點請認真記錄): 0. 計算機識別的信息都是二進制數(shù),或簡潔標(biāo)示的十六進制形式。 如十六進制與二進制的不同形式:$C6=0xC6=0C6H = 0B11000110=%11000110=11000110B 等 1. 相同程序功能,但CPU不同,則機器指令碼不同,不能互換。 2. 匯編語言源程序由4部分組成: 標(biāo)號 操作碼 操作數(shù) 注釋 StartAddr81H: Lds r16,$CE01 ; A:=EEPROM單元 [$CE01] 3. Org或.Org是偽指令,它不產(chǎn)生對應(yīng)的機器指令,但仍起了一定的作用。 4. 多數(shù)指令是助記符指令,它們都產(chǎn)生了一一對應(yīng)的機器指令,它們都要占據(jù)一定的存儲單元,都有對應(yīng)的地 址。 5. CPU按照指令的地址,逐條取出機器指令并執(zhí)行,如果沒有轉(zhuǎn)移操作,就按照順序執(zhí)行。 6. 匯編語言源程序很難看懂和記憶,因此需要認真寫注釋,一般注釋是用英文寫,也可以用中文。 7. HEX文件有特定的格式,它包含地址,數(shù)據(jù)和效驗和,十分嚴(yán)謹(jǐn)和靈活。 第七節(jié) 為了研究正版卡的反制,特別是XG有線類型的高級反制,不僅要研究帶Key的EMM,還要關(guān)注和跟蹤修改EEPROM的EMM 。一直關(guān)注這些EMM動向的黑客會從相關(guān)論壇得到正版卡修改后的EEPROM代碼,它們一般以*.BIN的形式給出。 如果得到了ROM卡的*.BIN文件,就可以了解到正版卡在EEPROM中加入了哪些新的補丁程序或采取了什么反制方 法。 研究和了解的第一步是反匯編。反匯編是將機器指令或數(shù)據(jù)代碼轉(zhuǎn)為源程序的一種操作,它是匯編過程的反向 操作,是反向工程的一種手段。 一般開發(fā)產(chǎn)品,自主編寫源程序后,主要的工作是匯編,很少反匯編。但黑客在我國衛(wèi)視界的過程中,卻 常常進行反匯編。 原因之一,是因為水平不夠,無法自編源程序,只好用國外或國內(nèi)高手贈送的目標(biāo)代碼通過反匯編來轉(zhuǎn)為源程 序,再進行學(xué)習(xí)和修改,這成了必要的步驟。 原因之二,是研究正版卡的反制方法與原理的需要,必須通過反匯編將EMM或EEPROM中的機器碼轉(zhuǎn)為易讀的源程 序,再進行分析和研究。 匯編是將源程序轉(zhuǎn)換為目標(biāo)代碼的過程,它比較簡單,指令或數(shù)據(jù)轉(zhuǎn)為機器碼時都是唯一的,沒有二義性;而 反匯編就復(fù)雜得多!由于二進制代碼的多義性,即,同一個字節(jié),可以代表多種信息,它即可以代表CPU的操作指令 ,又可以代表各種字符、無符號數(shù)、帶符號數(shù)、浮點數(shù)和其他種種信息,因此,一般情況下反匯編是不可能返回匯 編前的源程序的,如果反匯編能將指令或數(shù)據(jù)正確區(qū)別開來,就是很不錯的了。 大家可能有疑問:要反匯編的是程序,只要轉(zhuǎn)為助記符指令就可以了,怎么還會有轉(zhuǎn)為數(shù)據(jù)的問題呢?為什么 難以區(qū)別程序與數(shù)據(jù)呢? 原來,程序是指令與數(shù)據(jù)的集合,程序存儲區(qū)中即可以存放CPU的指令,又可以存放程序使用的數(shù)據(jù),它們都是 二進制代碼。在源程序中,不僅有CPU執(zhí)行的指令,也還有程序用到的數(shù)據(jù),這些數(shù)據(jù)是用數(shù)據(jù)定義偽指令來描述的 。指令與數(shù)據(jù)匯編后產(chǎn)生的目標(biāo)代碼都是二進制數(shù),它們可能是指令也可能是數(shù)據(jù),單從二進制代碼本身并不能區(qū) 別出它們是指令還是數(shù)據(jù)。 以**卡的EEPROM中的部分機器碼反匯編為例: 在**.BIN文件中,取從地址$CE18開始的機器碼:CD CB 21 00 96 02 70 08 A6 01 用反匯編軟件,如XX軟件中的XX功能,反匯編得到的源程序:(是錯誤的) CE18: CD CB 21 jsr $CB21 ; 調(diào)用子程序$CB21 CE1B: 00 96 02 brset0 $96, $CE20 ; 如果$96單元的位0=1則轉(zhuǎn)到$CE20 CE1E: 70 neg $X ; 對X尋址的單元進行求負操作 CE1F: 08 A6 01 brset4 $A6, $CE23 ; 如果$A6單元的位4=1則轉(zhuǎn)到 $CE23 正確的反匯編應(yīng)當(dāng)?shù)玫揭韵略闯绦颍?/font> CE18 CD CB 21 jsr $CB21 ; 調(diào)用子程序$CB21,將$0096開始的$08個字節(jié)數(shù)據(jù)復(fù)制到$0270開始 的單元中 CE1B 00 96 02 dc.b $00,$96,$02,$70,$08; 這六個字節(jié)是傳給子程序$CB21的數(shù)據(jù),用偽指令“dc.b”來 描述 CE1E 70 08 CE20 A6 01 ld a, #$01 ; a 取值$01 對比以上兩個反匯編的源程序,就可以看出,反匯編后的源程序差別有多大! 前面的反匯編沒有正確區(qū)別指令與數(shù)據(jù),得到的源程序?qū)⒄`導(dǎo)閱讀者,使之無法了解正確的程序思路。 而后面的反匯編正確區(qū)別了數(shù)據(jù)與指令,閱讀者就可以明白程序的思路。 像這樣的情形大量發(fā)生在XG有線的超級反制程序中,正如某黑客所講:“cb 與ce code內(nèi),有很多都是特別的 subroutine,用Xx功能時要小心一點,否則會看到不明所以…尤其是"cd" 等字眼,多是地址位置而不是opcode。早 一頁post 出的就是例子,自己用XX軟件時會出現(xiàn)不同結(jié)果。而keychange 的bytedump 部分全是random parameters for MAP CALL,再多例子也沒分別。再有不明可以大家研究一下,反正結(jié)果都會是『謎』一個! 第八節(jié) 反匯編2 真正的源程序的價值是非常高的,而簡單反匯編得到的所謂源程序就沒有什么價值,因為這樣的源程序難以閱 讀,難以修改。 如何能將目標(biāo)代碼轉(zhuǎn)換成為真正的源程序呢? 以下是正確反匯編的基本步驟: 1. 反匯編首先要選對反匯編的工具程序XX,反匯編工具應(yīng)當(dāng)針對目標(biāo)代碼適用的CPU。亂抓一個來,也可以反 匯編,但產(chǎn)生出來的是莫名其妙的東西。一般的匯編程序都順便帶有反匯編的功能,也有專門的反匯編工具可以使 用。大型的反匯編工具使用起來比較復(fù)雜,初學(xué)者可以先試試簡單的。 2. 其次,反匯編得到的源程序要能再匯編成為目標(biāo)代碼,這個目標(biāo)代碼必須與原先用于反匯編的目標(biāo)代碼完全 相同,這可以檢驗反匯編是否基本正確。 3. 再次,反匯編得到的源程序必須經(jīng)過人工的閱讀、分析和判斷,確定哪些是指令代碼,哪些是數(shù)據(jù),確定之 后,再告訴反匯編工具程序,讓它做相應(yīng)的處理,產(chǎn)生更合理的源程序。這個步驟要反復(fù)進行,直到數(shù)據(jù)和指令正 確分離為止。判斷哪些是數(shù)據(jù),哪些是指令,要有敏銳的觀察力。通常,如果出現(xiàn)“Unknown”字樣,或不合邏輯的 指令(如對同一個變量重復(fù)賦值等),或程序沒有入口標(biāo)號等,就可以認為這部分是數(shù)據(jù);如果程序中出現(xiàn)了不合 理的標(biāo)號,說明其它地方還存在數(shù)據(jù)被當(dāng)成指令的錯誤。 4. 最后,對這種反匯編得到的原始源程序進行人工修改,使用有意義的變量名、常數(shù) 名和子程序名替換原來沒 有意義的標(biāo)號,加上詳細的注釋,最終才形成真正的源程序。這一步是一個再創(chuàng)造的過程,是反匯編中最難和最關(guān) 鍵的工作。不會編程的人,一般無法完成這一步,因此說“反匯編是一個再創(chuàng)造的過程,需要的能力絕不比編程低 !”,是否真正能得到可以供修改和繼續(xù)開發(fā)的源程序,關(guān)鍵都在這一步??梢哉f,反匯編的工作,工具軟件僅僅 幫了我們反匯編工作的其中一小部分,僅處理了那些死板的固定套路的事,而關(guān)鍵的智力活動都必需要人來完成。 許多初學(xué)者可能過分相信和依賴工具軟件,這是不正確的。好的工具軟件可以幫助我們,減輕不少繁瑣的勞動 。但工具是死的,而人是活的,是創(chuàng)造性的源泉。反匯編這種需要高智力的勞動,更是單純依靠工具軟件不可能完 成的。 以下例子是部分取自146-D卡中的Flash程序,用于說明上述反匯編過程: 第九節(jié) 反匯編3 要了解正版卡的反制原理,首先要反匯編ROM卡中EEPROM的程序。仍以XXCA使用的ROM卡為例: 該ROM卡使用的CPU是ST7,它是STMicroelectronix8位處理器家族的成員,指令系統(tǒng)與硬件結(jié)構(gòu)向下兼容Motorola的 6805計算機,可以直接執(zhí)行EMM中攜帶的6805指令集。 通過下行的信號對ROM卡更新后,產(chǎn)生了新的程序。這些新的EEPROM的信息往往以*.BIN文件的形式出現(xiàn)在一些黑客 網(wǎng)站上。我們得到后,可以選擇文件中我們有興趣的一部分信息,交給Xx軟件進行反匯編。之所以選擇Xx軟件,是 因為Xx軟件專門針對ROM卡,它的反匯編具有一定智能,可以自動處理變量名、ROM卡中已知的子程序和特定子程序 夾帶的數(shù)據(jù)等,還可以加上注釋;之所以只對一部分代碼反匯編,是因為Xx軟件對反匯編調(diào)入的代碼長度有限制, 不允許超過4KB即$1000。 下面以XG有線反制的EEPROM程序的反匯編為例,介紹ROM卡的*.BIN文件中部分代碼進行反匯編的基本方法: 根據(jù)Xx軟件解開的EMM,我們可以看到XG有線下行的EMM中夾帶了這樣的一段程序: 。。。。。。。(略) 從中我們知道,一切的關(guān)鍵都在$CE03這個子程序中,必須要反匯編存在ROM卡的EEPROM中的地址為$CE02開始的程序 。 1. 將含有$CE02程序的*.BIN文件讀入某種編程器的緩沖區(qū),緩沖區(qū)地址從$0000開始。記住ROM10/ROM11文件的 *.BIN文件是從$C000地址開始的。 2. 計算保存文件的開始地址=需要反匯編的程序地址的開始地址-$C090。如,希望反匯編$CE02開始的子程序,則 計算出的保存文件開始地址=$ CE02-$C090=$0D72。 3. 用編程器保存文件的功能,保存一份文件,文件類型為*.BIN,保存的緩沖區(qū)地址為計算得到的開始地址,文 件長度為$1000。注意:Xx軟件的Xx只接受長度為$1000的文件。例,保存文件名定為:CE02.BIN,開始地址為$0D72 ,長度為$1000。 4. 進入Xx軟件,點擊Xx功能,點擊“Extract Bss Code From EEPROM Image…”,選擇在3.中保存的文件名,將 Initial Addresses和Code Base 都改為程序的真實地址,如在上例中,地址都改為$CE02,選擇ROM卡的類型,如 ROM10,最后點擊“XX!”,完成反匯編。 5. 當(dāng)然,特殊的子程序,如后面跟隨數(shù)據(jù)的,反匯編可能不正確,需要人工判讀,并采取 特殊處理(處理方法略 )。 第十節(jié)介紹MAP與反制原理,第十一節(jié)介紹如何用程序來仿真。 不過看現(xiàn)在的情形,大家對算法的討論感興趣的比 較多,因此覺得有必要停下來討論討論算法的問題??赡苡腥苏f,一提算法可能又會把問題搞的非常發(fā)散,最終又 會偏離我們的主題太遠,但談CA又不可能不提算法,所以我們暫且轉(zhuǎn)貼一篇網(wǎng)絡(luò)上流行的基礎(chǔ)帖子,從這里插 敘開始談起: 轉(zhuǎn)貼:CA算法的方法 理論上說,CA算法的方法有兩種:一種是解析法,另一種是窮舉法。 解析法是根據(jù)CA的算法,找到其中的要素,推斷出未知因素從而算法,這是一種相對比較有把握的方法。對于 一種固定的算法,從算法理論上說,它由四個要素構(gòu)成:第一是被加密的對象(明文);第二是加密完成的結(jié)果(密文 );第三是實現(xiàn)加密的數(shù)學(xué)模式;第四是采用的密碼。在電視廣播應(yīng)用中,一般來說,明文和密文是可以獲取的,算 法是不能保密的(易泄露),密鑰是大家攻擊的對象,一旦密鑰被攻破,加密的方法也就隨之告破。雖然科學(xué)家們設(shè) 計了很多種巧妙的算法,但是卻沒有人敢保證自己的算法是不可的。但是通過系統(tǒng)實現(xiàn)可以增加算法的難 度:把兩重算法結(jié)合在一起,將第一重加密算法的密文作為第二重加密算法的明文,這樣用戶只能看到原始的明文 和兩次加密以后的密文,如此就無法找到每個算法三大要素的對應(yīng)關(guān)系,從而無法用解析法來推斷密碼。 目前絕大 多數(shù)CA被都使用了窮舉法。由于明文和密文形成了一定的對應(yīng)關(guān)系,只要拿到足夠多的明文和密文對,通過數(shù) 學(xué)的試探方法可以找出中間的對應(yīng)關(guān)系。對窮舉法的防御一方面要加大密鑰的長度,使明文和密文的位數(shù)大大加長 ,另一種方法是讓者無法在一定的時間段內(nèi)拿到足夠多的對應(yīng)關(guān)系,典型的做法是將時間因子作為加密內(nèi)容加 進去。只要時間不重復(fù),明文和密文就很難找到對應(yīng)的關(guān)系。 但有了一個好的算法并不表示系統(tǒng)就是安全的,如果 在實施過程中留下了漏洞,還是有機會被破密。如果CA的算法很嚴(yán)密,但全是由外部計算機軟件實現(xiàn)的,只要有一 個手段高明的黑客,就可以比較容易地將程序下載下來,經(jīng)過反匯編,讀取原始代碼,從而密碼。在歐洲某國 就發(fā)生過這樣的事,有個系統(tǒng)工程師下載了某CA的程序,成功地進行了破譯?,F(xiàn)在,為了提高系統(tǒng)的安全性,人們 普遍采用了軟硬結(jié)合的方法,把核心的算法和密鑰都放在保密性相對較好的專用IC卡里,使破密者無法打開IC卡里 的內(nèi)部程序,從而保護核心機密。所以考察安全性的另一個要素,就是要判斷廠商提供的IC卡是否足夠安全,是否 有國際國內(nèi)的相應(yīng)標(biāo)準(zhǔn)能夠認證其安全等級。如果IC卡本身不夠安全,那么CA再強大也無濟于事。另外,IC卡必須 是專用卡,絕不能將在其他領(lǐng)域通用的卡用作數(shù)字電視IC卡,以免破密者因可以輕易獲得所需的卡而大大增加破密 的機會。 MAP 前幾節(jié)談了不少反匯編的方法,通過反匯編可以閱讀程序,了解不少程序的原理,這種方法對于得到目標(biāo)代碼的情 形,是十分直接和有用的方法,但對于MAP功能,卻無能為力,因為MAP程序的代碼無法得到! 對于MAP功能的分析,只有通過不斷調(diào)用MAP的某個功能,用不同的輸入數(shù)據(jù)喂給它,觀察它的輸出從而判讀出MAP完 成的是何種操作。 由于MAP協(xié)處理器在ROM卡的內(nèi)部,因此要實現(xiàn)不斷測試MAP功能的操作,需要特殊的方法: 1. 需要編寫一段特殊的類似“Trojon Horse(木馬)”的程序(行內(nèi)稱為“MAPLogger”),該程序的功能是在 EEPROM中紀(jì)錄MAP執(zhí)行前ROM卡有關(guān)內(nèi)存的數(shù)據(jù),然后調(diào)用MAP功能,執(zhí)行后在EEPROM中紀(jì)錄MAP調(diào)用后ROM卡有關(guān)內(nèi)存 的數(shù)據(jù); 2. 修改ROM卡EEPROM中的部分程序,用MAPLogger的調(diào)用取代原先MAP的調(diào)用,讓MAPLogger程序起作用; 3. 將特定的EMM發(fā)送給ROM卡,讓它執(zhí)行EMM中的程序,觸發(fā)引起調(diào)用特定的MAP Call,這時,我們埋伏在其中的 MAPLogger會起作用,紀(jì)錄下我們希望看到的數(shù)據(jù); 4. 將ROM卡的EEPROM區(qū)讀出,取出MAPLogger 紀(jì)錄的數(shù)據(jù),供分析和研究。 這種嵌入-logging的方法是hanker們研究的常用手段。 對于ROM卡,需要的工具與軟件有: 1.XX 寫卡器,寫卡器的晶振頻率應(yīng)當(dāng)為3.38MHZ。 圖解: 寫卡器的作用是配合XX和XX軟件,完成:往ROM10卡中寫入*.BIN文件,發(fā)送 或其他信息;從ROM10卡的 EEPROM中讀出紀(jì)錄的信息。 MAPLogger程序由某個高手編寫成功,又經(jīng)其他高手反匯編后加上注釋,列出如下,供參考:(對特定讀者,略) MAPLogger的嵌入與使用方法如下: 例如,我們想了解EMM 解Key中用到的MAP-$28功能,我們可以先找到有關(guān)的程序: 然后,將:jsr $90E3 機器碼為:CD90 E3 改為: jsr $c702 機器碼為:CD C7 02 即,將CE4A地址處的CD 90 E3改為:CD 07 02就可以了。 這個工作要直接針對*.BIN文件修改,最好要有編程器,調(diào)入原來的*.BIN文件,查找定位到要修改的地方,直接將 十六進制數(shù)改到緩沖區(qū)中,存盤后就得到了嵌入MAPLogger的*.bin文件。 第一章:CA智能卡的與反制 第二章:流行CA系統(tǒng)的漏洞分析實踐 第三章:流行CA應(yīng)用算法的分析設(shè)想 討論綜述 CA安全保障的三層關(guān)鍵:傳輸流的加擾,控制字的加密,加密體制的保護。 這三種技術(shù)是CA系統(tǒng)重要的組成部分,在處理技術(shù)上有相似之處,但在CA系統(tǒng)標(biāo)準(zhǔn)中是獨立性很強的三個部分。加解擾技術(shù)被用來在發(fā)送端CA系統(tǒng)的控制下改變或控制被傳送的服務(wù)(節(jié)目)的某些特征,使未被授權(quán)的用戶無法獲取該服務(wù)提供的利益;而加密技術(shù)被用來在發(fā)送端提供一個加密信息,使被授權(quán)的用戶端解擾器能以此來對數(shù)據(jù)解密;而保密機制則用于控制該信息,并以加密形式配置在傳輸流信息中以防止非授權(quán)用戶直接利用該信息進行解擾,不同的CA系統(tǒng)管理和傳送該信息的機制有很大不同。在目前各標(biāo)準(zhǔn)組織提出的條件接收標(biāo)準(zhǔn)中,加擾部分往往力求統(tǒng)一,而在加密部分和保密機制則一般不作具體規(guī)定,是由各廠商定義的部分。 1、對傳輸流的加擾,DVB已有標(biāo)準(zhǔn)。目前在國際上占主流的有歐洲的DVB標(biāo)準(zhǔn)、北美國家的ATSC標(biāo)準(zhǔn)及日本的ISDB標(biāo)準(zhǔn)三種標(biāo)準(zhǔn)中,對于CA部分都作了簡單的規(guī)定,并提出了三種不同的加擾方式。歐洲D(zhuǎn)VB組織提出了一種稱之為通用加擾算法(Common Scrambling Algorithm)的加擾方式,由DVB組織的四家成員公司授權(quán),ATSC組織使用了通用的三迭DES算法,而日本使用了松下公司提出的一種加擾算法。通用加擾算法是DVB標(biāo)準(zhǔn)組織推薦的對于TS流的標(biāo)準(zhǔn)加擾算法。目前,在歐洲的數(shù)字廣播節(jié)目中普遍采用了這個算法。我國目前商業(yè)化的CA中,TS節(jié)目的加擾也基本上是采用的這個算法。如果從的角度,攻破這個算法的意義要遠遠大于智能卡和攻破CA系統(tǒng)本身。 2、對控制字的加密算法一般采用RSA以及3DES算法,各家CA廠商各不相同。值得一提的是DVB里有一個規(guī)定,提到的同密技術(shù)要求每個CA系統(tǒng)可以使用不同的加密系統(tǒng)加密各自的相關(guān)信息,但對節(jié)目內(nèi)容的加擾必須采用同一個加擾算法和加擾控制字,可以方便多級運營商的管理,為多級運營商選擇條件接收系統(tǒng)提供了靈活性。這就為黑客攻破智能卡創(chuàng)造了條件。 3、對加密體制,不同廠家的系統(tǒng)差別很大,其技術(shù)大體有兩種: 一種是以愛迪德系統(tǒng)為代表的密碼循環(huán)體制,另一種是以NDS系統(tǒng)為代表的利用專有算法來進行保護,由于牽涉到系統(tǒng)安全性,廠家一般不會公開。因此從角度,對系統(tǒng)的是難度也是比較大的。 第一章:CA智能卡的與反制 第一節(jié) 對于CA智能卡的分為兩種, 1、從硬件的角度,完全地仿照正版卡來定制IC卡; 2、 從軟件的方向,將正版卡的程序讀出,最后將程序?qū)懭隝C卡中,就變成與正卡無差別的D卡了。 仿制正版卡,可以將IC卡的觸點剝離下來,再將保護的塑料蝕掉,暴露出元件和內(nèi)部電路連接,就可以繪制成電原理圖,最后交給能訂制生產(chǎn)的IC卡的廠家生產(chǎn)。這些仿制還有一個冠冕堂皇的名稱叫“反向工程”。國內(nèi)在深圳和廈門等地都有能生產(chǎn)定制IC卡的廠家,在利益的驅(qū)使下,他們往往不會過問敏感問題。 IC卡中的元件如果是通用元件,通常可以通過IC卡的功能原理的分析來確定,雖然困難,但總是可以最終確定。例如深圳目前直接使用流在市面上的ROM10與ROM11卡來制成D卡,ROM10與ROM11實際上是XX系統(tǒng)正版卡的“基礎(chǔ)卡”,這些卡具有與正版卡相同的硬件基礎(chǔ),至于怎么流落到社會上的不得而知,但有一個事實就是大家應(yīng)該都收到過安裝衛(wèi)星電視的短信,這是個可以想象的到的異常龐大的地下產(chǎn)業(yè)! 繼續(xù):IC卡中的元件如果是專用元件,確定元件的事情就變得極其困難和十分渺茫了。那么這個時候硬件仿制的路走不通了,那么看看軟件仿真的路能不能走得通。 再看軟件仿真的路能不能走得通前,首先闡明軟件仿真的路能不能走得通有不同的判斷標(biāo)準(zhǔn)。 如果僅以在一段時段中,軟件仿真的D卡與正版卡都具有相同的條件收視功能來判斷,那 么無疑,從D卡的實踐來看,軟件仿真已經(jīng)成功了。 但如果以任何時段中,軟件仿真的D卡與正版卡都具有相同的功能,特別是對抗反制的功能來判斷,那么我要說,同樣無疑,軟件仿真是不可能成功的。 因此我們僅承認這種事實就夠了:自動對抗新的反制,使D卡與正版卡一樣免除后顧之憂,肯定是D卡研究的終極目標(biāo)。但是即便達不到這個目標(biāo),只要能保證一段時間的仿真成功,CA的商業(yè)價值就依然存在! 補充說明反制:由于D卡的成功,尤其是帶AU(自動換Key0/Key1)的D卡程序的廣泛擴散,正版服務(wù)商感到了巨大的壓力,逐步開始采用種種反制手段,讓D版的AU卡實效。 我們先研究一下這個反制是個什么東東:學(xué)習(xí)和搞嵌入式控制器開發(fā)的人都用過仿真器,如“偉?!毕盗械腗CS-51的仿真器等。大家一定知道硬件仿真與軟件仿真存在一個本質(zhì)區(qū)別,即I/O功能的不同。一條取端口引腳值的指令就足以區(qū)分是硬件仿真還是軟件仿真了。硬件仿真可以真實地取到引腳上的實際輸入,而軟件仿真得到的只能是不會變化的內(nèi)存仿真值。 利用這個原理實現(xiàn)的反制程序分為兩部分,前面的部分通過I/O端口的訪問,區(qū)別出是真的硬件存在,還是軟件仿真;后半部分對非法的仿真卡簡單地返回主程序,不能解開Key0/Key1;對正版卡,則修改Key0/Key1,使之正確,然后返回主程序并保存key,保存的Key0/Key1用于ECM的解碼。 從歷次搜集的反制EMM中的方法中,可以將反制歸納為兩種,一種是從硬件或軟件上區(qū)別D卡與正版卡,從而產(chǎn)生條件分支指令,使D卡仿真的程序失效;另一種是調(diào)用D卡中不可能有的,只有正版卡硬件才具備的MAP子程序,使D卡無法執(zhí)行正確的程序。 先介紹前一種方法: 使用硬件端口區(qū)別正版卡與仿真卡的反制方法,由于具有特殊性能的端口數(shù)的限制,因此不可能有多種變化,一旦Hacker知道了反制的EMM結(jié)構(gòu)與原理,很容易就可以避開端口判斷的指令,直接轉(zhuǎn)到修改Key0/Key1部分。這雖然并不是程序指令的直接仿真,只能算是 功能仿真,卻可以使已知反制失效。 另外你也許會提出一些其他辦法,如目前的一些Nagra系統(tǒng)在下行的EMM命令中加入了甄別真?zhèn)魏汀皻⒖ā敝噶睿瑢τ凇罢目ā?,毫不留情地清除卡中程序并且讓它成為廢卡。 我可以說,為了對抗“殺卡”,這類“正改卡”的程序如果采用Block技術(shù),可以抵抗多數(shù)殺卡指令,同樣能夠使這類“正改卡”得以安全使用。 先寫到這,后面介紹根據(jù)正版卡特有的機器指令代碼,讓正版卡能進行解碼、而沒有正版卡程序的仿真卡無法正確解碼、從而獲得KEY的EMM思路。 電視機頂盒 數(shù)字機頂盒 機頂盒智能卡 創(chuàng)維數(shù)字機頂盒 第二節(jié): 以下介紹根據(jù)正版卡特有的機器指令代碼,讓正版卡能進行解碼,而沒有正版卡程序的仿真卡無法正確解碼,從而獲得KEY的EMM思路。 按照道理,D卡使用的是AVR或其他類型的CPU,“正改卡”中的程序與正版卡也不相同,照理這些卡中都沒有正版ROM10/ROM11卡的程序。因此,用只有正版卡才有的特定機器指令代碼作為密鑰來解密key0與key1,自然是十分聰明的反制措施。 該反制的EMM以前146Dream TV可能曾使用過。目前XG有線又重新啟用,大致在一個周期的8天中,有兩天使用本類EMM,另外6天使用另一個“超級MAP”程序。 這種反制的具體思路是: 下行的EMM中攜帶的Key與Key1是經(jīng)過加密編碼的,不能直接使用。解開它們需要的密鑰“種子”(即產(chǎn)生密鑰的原始數(shù)據(jù))的地址由下行的EMM給出。注意!EMM中并沒有給出密鑰“種子”,而是給出了它們在正版ROM10/ROM11卡程序存儲區(qū)中的地址,這個地址是隨機數(shù),不同的key0/key1,地址就不同。它的值總是大于S4000,防止取到ROM10卡低端的無法讀出的無意義內(nèi)容。反制設(shè)計者設(shè)想,D卡或“正改卡”無法獲得正版卡的內(nèi)部程序,因此,即使給出了地址,D卡也無法取得正確的機器碼作為密鑰的“種子”,自然也就 無法生成密鑰,解開key0/key1了。 對于正版卡,按照給出的地址,取到16字節(jié)的機器指令代碼,經(jīng)過類似計算Hash效驗的方法,產(chǎn)生正確的密鑰,再對key0/key1進行DES編碼運算,就解出正確的key0/key1了。 上面介紹的“利用正版卡程序隨機地址處的機器碼作為Key的解碼密鑰”的EMM反制方法非常厲害,曾難倒了一大批的高手。 對比一下昨天前一篇帖子中給出的EMM與上面介紹的EMM,就會發(fā)現(xiàn),前一篇帖子中給出的EMM是一種簡單的反制,只要知道了正確的Key0/Key1,再經(jīng)過認真分析和思考,就會明白其反制原來并找出解出Key的方法,目前Dream TV的反制都屬于這類簡單反制;但上面今天介紹的EMM是一種高級和復(fù)雜的反制,即使知道了正確的Key0/Key1,也難以得知其反制的原理與找出解key的方法,目前XG有線和國外一些CA系統(tǒng)采用的是這類反制。由于XX的反制匯聚在低級和高級的兩類難度上,所以黑客們懷疑這是兩類不同水平的技術(shù)人員的作品。低級難度的反制是衛(wèi)視服務(wù)系統(tǒng)內(nèi)部技術(shù)人員的手筆,而高級的反制則直接出自CA系統(tǒng)研制人員的杰作。 兩種級別的反制也將國內(nèi)修改、編寫D卡程序的高手分成了兩類:有一些寫一點程序應(yīng)付低級反制的,往往采用“頭痛醫(yī)頭、腳痛醫(yī)腳”的補丁程序,可以對付目前146-Dream TV的反制;只有少數(shù)高手中的高手具有整體編寫程序以及仿真MAP功能的能力,能采用更合理的對抗策略,能研制出復(fù)雜程序和新類型的D卡,最終可以對付高級難度的反制。對付低級反制寫出對抗程序的時間大約是數(shù)小時到幾天,而對付高級反制找到方法并寫出程序的時間往往需要數(shù)個月之久,而且還需要國內(nèi)外Hacker 們的協(xié)同配合。國內(nèi)高手中的高手人數(shù)很少,都是單兵作戰(zhàn)和埋頭苦干的,與其他高手之間一般互不交流。 |