2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密

Editor發表於2020-11-04

移動基帶系統作為連線世界的橋樑,是萬物互聯的重要基礎設施,其建設也日益成為5G時代各國競相爭取的科技高地。


而高通作為全球4G/5G端行動通訊裝置最大的晶片和方案供應商、行業標準制定者,一直是業界的重點研究物件,其安全性和可靠性也成為我們關注的重要問題。


在5G領跑新基建的當下,有必要深入瞭解基帶系統的建設,挖掘其中潛藏的安全隱患。


下面就讓我們來回顧看雪2020第四屆安全開發者峰會上《高通移動基帶系統內部揭密》的精彩內容。



演講嘉賓



2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


謝君 ,阿里安全IoT安全研究團隊Leader,資深安全專家,15年安全領域工作經驗。現專注於IoT安全研究與提供解決方案。 

2016年發現小米整個智慧硬體生態高危遠端漏洞,在XPwn2016展示其漏洞利用並協助修復。同年,發現美的智慧生態遠端高危漏洞,並協助修復;2015年發現Broadlink整個智慧硬體生態高危遠端利用漏洞,在GeekPwn2015展示其漏洞利用;2014年發現美國賓士高危遠端漏洞,並控制超過50輛賓士汽車。此前並發現過惠普,富士施樂印表機遠端漏洞和微軟高危漏洞;2011年發現迅雷網路多個高危漏洞,並且驗證利用迅雷網路發起大規模DDOS攻擊。



演講內容



以下為速記全文:

大家好,我是謝君,很高興有這樣一個機會和大家一起探討一下關於移動基帶安全相關的一些議題。自我介紹一下,我叫謝君,來自於阿里安全,一直在安全工業領域持續了15年的安全研究工作,現在主要專注於loT領域的安全以及基礎設施相關的一些安全研究。


今天的議題主要是介紹高通移動基帶的一些技術。我大概去年9月份的時候有寫過一篇關於高通移動基帶基於ARM架構的一篇分析文章,那篇文章是基於高通的MDM6200基帶晶片實現的一個系統的技術,這個晶片2012年的時候在蘋果iphone4上曾用於基帶通訊。


那今天我講的基帶晶片主要是基於高通最新的hexagon硬體架構體系上面來做一些介紹。我會主要介紹一下高通硬體架構平臺的一些資訊以及它的基帶作業系統,QuRTOS的一些特性以及它的一些實現過程,還有它系統內部一些比較有意思的東西。



一.基帶背景介紹


什麼是基帶呢?它是屬於我們移動應用的一個基礎設施。基帶通訊對於普通使用者或者說大眾來講是接觸不到的,沒有互動的。它屬於一個移動處理器的子系統,主要負責我們無線通訊的除錯、解調以及不同行動通訊技術的切換還有處理。


高通的SoC系統是在一個高通自己設計的統一的硬體架構平臺上的,下面執行的子系統是用他們自己設計的叫QuRTOS的系統來執行的,它是有獨立的一個記憶體和獨立的韌體來執行獨立的系統的。子系統和主系統之間通訊是基於記憶體共享和主系統通訊的方式來完成資料交換過程的。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


從現階段我們市面上的基帶晶片的份額分佈和廠商的一些分佈來看,整個市場上超過60%的份額都是被高通所佔有的。其實,我們使用的手機裡面很多基帶晶片都是高通提供的,比如說蘋果手機,6S使用的是高通基帶MDM9635、蘋果10使用的MDM9655系列,並且谷歌手機、小米、三星、OPPO、VIVO、華為、中興都有使用高通的晶片。


在數字通訊領域、數字模組領域,還有一些第三方的廠商用高通晶片來實現通訊模組,主要應用於物聯網領域和車聯網領域。其他應用得比較多的就是華為的海思以及華為巴龍基帶晶片。而英特爾也有自己的基帶晶片,只不過現在已經賣給了蘋果。三星的話也有自己設計的基帶系統,是基於ARM架構的。


這幾個廠商當中我唯一沒有分析過的是聯發科。通過整個韌體分析能判斷這幾家廠商當中架構做得最爛的應該是三星,做得最好的是高通。華為最新的基帶韌體暫時沒法分析,因為太封閉了,韌體都拿不到,可能需要一些特殊的手段才行。




二.高通移動基帶內部架構


接下來我來講一下高通基帶的演進過程以及發展過程。高通的移動基帶最早用的是ARM的架構,而且除了高通之外,其他的廠商都是用ARM架構。到後來由於高通的野心以及其戰略目的,高通設計了屬於自己的硬體架構的晶片,而且這是一種DSP的架構晶片,為什麼會使用這種架構呢?後續我會介紹。


它的作業系統在演變程式中最早是叫REX,後來代號經過不斷迭代,現在它的SoC有兩種型別,主要是通過應用場景的不同來區分。


其中,應用最多的就是MSM,它主要是應用於手機的一個很大的SoC,裡面包含了我們的手機、應用處理器,就相當於是我們在高通平臺上執行的安卓系統,現在最新支援到64位的ARM。另外一個型別就是MDM,主要是用於資料通訊,比如說我們使用的一些4G、Wifi、車聯網、物聯網相關的一些模組,都是基於MDM的平臺來設計的,也就是我之前一張功能圖裡面介紹的MDM9607就屬於其中的一個產品。


那高通的hexagon DSP有什麼特點呢?它是VLIW(非常長的指令流水),單指令多資料流。它的指令跟我們之前所遇到的ARM和x86指令不一樣的地方在於,它有一個指令Packet的概念,一個指令Packet裡面可以並行執行高達4條指令流的操作,就是每一調CPU的時鐘,就可以允許你同時執行4條指令,這叫做一個指令Packet。


它擁有豐富的浮點計算單元和向量計算單元以及硬體多執行緒特性,因此其應用場景非常廣泛,很適合用於神經網路計算,例如AI計算以及一些訊號調製與解調的計算,IQ的樣本處理,以及音訊、影像處理、計算機視覺等其他相關的一些計算處理。


所以,可以預見到也許在不遠的未來,高通的DSP平臺就會把這些計算統一起來。


我們知道應用高通平臺比較多的是小米手機,它支援人臉識別、指紋識別、語音識別、4G以及WIFI,這些功能都可以通過一個DSP平臺去滿足所有相關能力實現。


接下來就是關於DSP指令架構的資訊。它跟我們常見的普通的ARM、X86指令一樣,有一些暫存器資訊,但它只提供一些應用處理的寄存資訊,對於系統程式設計的暫存器的定義是沒有的。所以他的手冊上是沒有這種公開的SDK資訊的,這種系統程式設計資訊只會給一些合作廠商和授權的廠商。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


所以,它這塊做得很封閉,我們沒辦法直接從它的系統手冊去看有哪些系統暫存器的功能,比如說你這個DSP需要去開啟MMU記憶體單元的功能的時候,哪個bit的設定有這個功能。


剛剛我們有說到它的指令Packet可以高達4條,但是這4條指令是分了四個不同的Slot。也就是說它所處的位置是有特定的指令型別的,不是你想放哪裡就放哪裡,還有因為這些指令操作有不同的Slot,所以也有一些約束條件。比如說這四條指令裡面不能同時使用一個暫存器即做讀又做寫的操作,編譯器是不允許的。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


既然我們瞭解了指令架構,有沒有什麼好的辦法去更好地研究、學習它呢?現在為止,基本上高通官方可供下載LLVM的一個供應SDK既可以編譯你的應用程式,也可以去做反彙編的操作,開源的反彙編框架就是在github上面展示的。展示的這兩個外掛是有BUG的,有的時候解析不正確,對一些指令的解析是不完整的。



三.高通基帶系統概要


接下來講高通的基帶系統它在整個應用的SoC當中所扮演的角色,以及它自己的一些特性。首先,基帶系統它是底層的kernel,是用C和彙編來寫的,上層的業務邏輯是通過C和C++來實現。它和主系統之中,比如說安卓系統進行資訊互動是通過共享記憶體的方式,在AP端為了方便去除錯或診斷你的基帶系統,它會提供一個非常方便的診斷介面DIAG,基帶應用系統可以通過QDI(高通裝置介面)介面來進行系統呼叫管理裝置驅動。


接下來我就介紹一下高通基帶的微核心架構,跟我們正常大部分使用的Windows系統和Liunx系統有什麼不一樣的地方。


這種微核心架構,它是區分核心空間和應用空間的,但是核心空間是非常精簡的功能應用,它負責做的事情只是一些任務排程、IPC通訊以及記憶體管理、虛擬記憶體和實體記憶體的對映關係,然而它跟硬體IO相關以及跟驅動相關的一些功能實現,都是在應用層以任務的形式來執行的。這裡面跟我們的Liunx單核心系統有很大的不同之處在於,如果你的驅動寫出來有問題、有漏洞,核心可能就崩掉了,但如果是微核心的話,實現的驅動出現了故障核心也不會崩潰,只是你的任務崩潰。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


在高通基帶的使用者態上面有一個抽象的裝置管理層,主要是為了去管理你裝置驅動,例如各種定時器中斷以及檔案系統,都是在應用層封裝呼叫。使用者態進入到核心態的方式,可以通過Trap這種指令進入到核心態。


為什麼它會有兩個Trap呢?這兩個都可以進入核心,Trap0主要是進入到核心態處理原生作業系統的任務排程,IPC通訊,虛擬記憶體與實體記憶體對映相關操作,而Trap1主要是為了實現QDI介面註冊的相關的功能邏輯,這樣做的好處在於提升了系統的移植性,比如更新作業系統的核心功能只需要關注Trap0對應的核心操作,而如果硬體外設有功能更新的話,那開發者就只需要更新Trap1對應的功能實現了。



四.高通基帶儲存器管理


現在高通的5G基帶SDX55的模組中,對記憶體的管理和實體記憶體的分割更細膩了,可以定義不同的業務邏輯,讓你的業務使用不同的堆。這個特性有點像我們現代經典作業系統裡面隔離堆的技術,也就是說特定的業務只允許使用特定的堆來進行分配或者是回收。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


在基帶記憶體管理當中還有一個非常重要的特性就是MMU這種機制。高通基帶系統和我們現在使用的大部分經典的現代作業系統不一樣的是,在它慢慢演進過程中它開始大量使用TLB直接操作,因為Hexagon DSP支援TLB讀寫指令,直接通過TLB的方式Cache實體記憶體和虛擬記憶體的對映關係。也就是說CPU在執行過程中可以快速地去找到它的程式碼進行執行,大大節省時間。如果使用頁表結構的話,因為你的粒度最大隻有4KB,但是直接使用TLB設定支援到16MB大小的頁面對映。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


在早期的MDM的基帶晶片中,支援傳統的二級頁表的翻譯模式,也就是說CPU首先查TLB裡面,如果沒有快取的話直接產生一個TLB missw/x/r的異常,然後去查頁表,再做地址翻譯。


到了最新的SDX55的5G基帶中,直接引入了一個Virtual TLB的方式,來做一個虛擬記憶體和實體記憶體的翻譯操作。這樣做的好處主要是為了節省實體記憶體,因為用TLB的方式能快速、靈活地翻譯記憶體的對映關係。


而在基帶的業務邏輯層,它的做法跟我們傳統的韌體載入到記憶體當中執行不太一樣的點在於,不是所有的業務邏輯都初始化,只有你需要使用某種業務邏輯的時候,才會把相應的程式碼鋪設到記憶體裡面進行執行。


比如說我們的手機還沒有連入網路的時候,所有的業務邏輯比如說LTE都還沒有準備好,還有3G、2G的網路協議也都沒有準備好,但它有一部分的程式碼在記憶體當中是固定部署好的。當它要執行LTE相關業務,執行相關操作的時候,程式碼就會執行到一些虛擬地址,比如說要執行到0xD00xxxxx開始的地方。


但是,發現這塊地址沒有被對映的時候就會產生一個pagefault異常。核心異常處理中斷會判斷這個pagefault的地址是在哪兒,要找到pagefault地址相應的地址所對應的壓縮程式碼塊,解壓出來後再鋪設到實體記憶體當中進行對映,再去執行相應的程式碼。這是高通自己定義的一種名為Q6zip的壓縮方式。


它主要的目的,第一是為了節省實體記憶體,第二是降低功耗。這個壓縮演算法是一種非常高效的解壓演算法,因為編譯器生成的指令是有一些固定的特徵和特性的,所以它會自己建立一套字典,通過查字典的方式快速做資料的解壓,之後再去執行相應的程式碼邏輯。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


這個就是CPU在執行過程中一個處理的流程。可以看到,靜態對映的一些程式碼在執行過程中,執行到了一些未被對映到的程式碼地址空間裡的時候,會進行TLB查表,發現TLB裡面沒有查到以後,會產生一個TLB Miss的Exception,TLB就會解壓相應程式碼,然後對映到記憶體再去執行。



五.高通基帶裝置管理機制


接下來我們就講一下高通裝置管理的架構體系。剛才我也有提到高通有一個裝置虛擬層的機制,它專門是管理和描述所有高通和高通基帶裝置相關的一些資訊的,比如說它的IO對映資訊以及它的暫存器資訊和初始化資訊,有兩種方式。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


一種就是字元裝置,通過字串的方式來描述你這個裝置是屬於什麼樣的裝置。另外一種就是通過ID的方式來標識。它屬於某種特定的物理裝置的話,我們物理外設常用的串列埠、中斷控制器以及處理器之間通訊的一些控制器,都是屬於在這個DAL中進行描述的。


裡面還有一些通用屬性就是剛才提到的裝置ID還有一些對映資訊、裝置名稱以及這個裝置的中斷註冊等等,以及如何初始化。它的一些裝置驅動會有一些相應的API對你這個裝置的初始化、管理、開關、裝置資訊之類的做一些讀取。


另外,在API層,就是說在使用這些裝置的時候,有一些API專門負責解析你這個裝置抽象層的裝置資訊。而高通的這套裝置管理機制其實適用於所有的高通子系統以及其他的層面。


這裡我寫了一個指令碼,提取了MDM9607裡面的一些外設資訊和裝置ID的對應關係。




六. 高通基帶任務管理機制


說完裝置管理,接下來我們來了解一下高通的任務管理機制。其實高通沒有太多程式的概念,大部分都是一個任務的概念或者可以理解為一個執行緒的概念。


高通定義執行緒的任務定義了不同的型別以及一些不同的優先順序,它會把這些任務分為不同的組,比如說第一種任務只執行一次就結束了。第二種就是這個任務會動態分配記憶體去作為你的一個函式執行的堆疊空間。第四種就是一個系統管理的任務,比如說你要初始化你的外設驅動的時候,是通過這個任務來進行管理和初始化的。第六種就是一種共享裝置、共享驅動資訊的任務型別,比如說兩個不同的處理器在通訊的時候,雙方都需要初始化相應的中斷管理例程以及共享記憶體相關的描述資訊,我們如何去進行資料交換的操作邏輯。第七種也是一種靜態定義的棧地址和棧空間的普通的任務,而且還支援Posix執行緒的定義方式。


最後還有一種任務的依賴性。比如說這次任務執行的是A,你要執行這個任務A之前你必須得先執行任務B,這叫做任務依賴。這個任務管理在核心態是怎麼儲存任務資訊呢?核心會分配記憶體來儲存每個任務的執行上下文資訊,每建立一個任務的時候,都會把上下文資訊存在這個資料結構裡面,用於排程不同的任務的時候保留你任務的一些現場資訊,並且在核心態中也會儲存著你這個任務所能訪問的一些資源的許可權。


至於任務排程過程,剛才我們有提到高通基帶執行的一些任務。任務初始化完後大部分是處於阻塞的狀態,也就是等待訊息的一個狀態,用不同的訊息來處理不同的業務邏輯。還有一個特性就是說,為了保證你這個任務它不是一個殭屍的程式,不是一個殭屍的任務,或者說長時間沒有響應就可能就會認為你是個殭屍任務,裡面會有一個看門狗喂狗的機制專門來保證你的任務一段時間之後是否存活,通過這種機制來判斷任務執行的健康狀態。


任務的型別分為正常的業務處理邏輯,另外一種就是中斷服務接管的任務,傳統情況下我們使用微控制器。如果大家對嵌入式系統瞭解的話,微控制器裡面使用的中斷是通過直接硬體Dispatch到中斷向量表中,然後直接進行處理,處理完了再返回。


因為高通是多工的嵌入式系統,當中斷過來的時候,此時執行的任務可能並不是中斷接管任務,核心會儲存當前任務的執行上下文和寄存資訊,硬體會dispatch到相應的中斷向量表的處理例程中去,該例程會判斷中斷號資訊以及該中斷號對應的中斷接管服務的任務資訊,然後把這個任務加入到任務排程池中去,最後執行這個中斷接管服務任務,完成中斷響應。


另外,IPC在高通基帶處理當中是一種非常重要的通訊機制。因為,3GPP定義的協議棧裡面,會有很多不同層次以及不同原語的互動以及請求之類的,高通就自己定義了一套管理不同層次、不同物件的標識技術,通過UMID的方式去標識。這個UMID是有一些對應關係的,比如說它定義的UMID是32位,第一個最高的一個位元組定義的是你使用這個訊息使用的一個網路技術的邏輯。比如說LTE,4節LTE它的頭部就是4,4來定義LTE這個技術,其他的用來定義WCDMA、GSM、TDSCDMA、CDMA2000等等網路接入技術。


那中間的實體是來定義你這個協議棧當中所處的哪個層次和操作呢?比如說你這是一個配置資訊或者是一個取消等等的操作。


最後就是一個原語操作,這種原語操作是3GPP當中定義好的不同層次間的進行通訊的幾種方式。我這裡提取出來在4G LTE協議棧裡面不同的訊息實體,3GPP協議棧是定義了三層,對於L1、L2、L3,高通在實現過程中會有更豐富細膩度的訊息通訊機制,來管理不同層次的一些操作邏輯。




七.高通基帶資料分組和網路模型


接下來我會簡單介紹一下關於高通基帶的資料分組聚合和網路模型。我們剛剛有提到高通的3GPP裡面定義的不同層次的一些模型,在高通定義的3GPP的PDCP上層,它會自己去定義不同的邏輯層,來做一些網路資料的傳輸和通道的選擇。


再往上就是封裝的IPV4和IPV6的一些協議棧,再頂層就是一些抽象封裝,再往上就是一些業務邏輯了。比如說我們常用的VOLTE,這種IMS的業務邏輯都是在頂層的業務邏輯上進行封裝,往下一直到物理層傳輸出去。




八.高通基帶系統攻擊面


我們瞭解了高通基帶的一些基本資訊之後,再來看一下它有哪些攻擊路徑。因為,基帶它不是一個獨立存在的系統,它是跟AP一起存在的,所以它的攻擊路徑可以從本地的AP打到基帶裡面去,比如說安卓系統當中可以打到基帶當中,AP系統也可以通過基帶打到核心網,從核心網到遠端的基帶。然後也可以從OTA層進行攻擊,比如說OTA就是偽基站,從偽基站信令層打到基帶,從信令層到基帶然後再到AP系統。以上都是一些可能的攻擊路徑。


2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密


那它的攻擊介面有哪些呢?本地有一些診斷介面,以及QMI高通的訊息介面,又比如和AP之間的通訊,遠端的語音通訊和資料,還有就是和基帶和基站之間的O他的信令互動,還有內建的一些GPS和定位系統的解碼相關的一些攻擊面,另外就是其他的一些邊緣計算相關的東西。




九.基帶模糊測試工具包


那我們對高通基帶有一些瞭解之後,是否可以打造一個通過高通基帶來fuzzing測試挖掘對端基站以及核心網的測試工具呢?


比如說可以在信令層要達到一個fuzzing測試操作,在信令承載層SRB可以滿足RRC層次信令漏洞挖掘,在應用層、資料承載層可以在NAS、VoLTE、語音通話和邊緣計算相關,做到這些相關的漏洞挖掘,還需要它的成本足夠低並且合法。所以我們不建議使用SDR軟體去做這種測試。


最後就是它的尺寸要足夠小。這裡我通過改造高通的基帶系統的方式,實現了一個基於基帶的fuzzing工具,能夠滿足網路探測的一些功能,比如說能夠探測核心網,能夠和對端通訊,以及在協議層次,3GPP定義的IP網路協議層次的fuzzing,能夠直接fuzzing基站信令互動。


基於這個模組,最終我發現了幾個與運營商服務相關的漏洞:第一,只需要知道對方的手機號,我就可以知道你這個手機使用的什麼樣的版本、版本資訊以及你使用的什麼樣的手機;第二,可以繞過運營商進行免費的點對點通訊,也可以繞過運營商進行加密通訊。第三,4g資訊洩露,可以把發給別人的手機認證資訊以及簡訊發到我的手機上。


接下來我要介紹一個基帶系統,從基帶系統打到AP系統的一個非常有意思的漏洞,它是屬於一個共享系統裡面的記憶體任意地址讀寫的漏洞型別。它的攻擊鏈路就是從基帶打到你的AP裡面,可以做到任意地址的讀寫,它的原理是什麼樣的呢?


我們看一下,普通的在SoC的共享系統當中,不同的系統之間,子系統和主系統之間的通訊,是通過記憶體共享的方式來進行資料互動的。而且,這個也是在大家一開始都已經協定好的,因為大家屬於不同的系統,所以有不同的MMU體系,不同的MMU體系就有不同的記憶體翻譯機制。


如果說我在基帶裡面能夠篡改MMU的對映關係的話,那我有沒有可能直接通過構造惡意的MMU對映關係,直接把別的系統當中的實體記憶體,對映到我的基帶空間當中進行讀寫呢?這個時候其他主系統是沒辦法干預的。我在高通的MDM9607模組裡面成功實現,可能在手機裡面不一定能夠成功,可能跟實現有關係。後來結合研究發現,高通有非常強悍的三個訪問控制的硬體機制VMIDMT,XPU以及SMMU機制。


第一個VMIDMT是屬於系統來定義你的子系統所使用的一個資源資訊的一個初始器。


第二個XPU機制是在執行過程中,你要訪問相應資源的時候,高通的XPU外部的保護單元會去檢查你這個子系統當中使用的這些資源是否是合法且合理的,會做一個資源訪問的隔離。


第三個保護機制就是SMMU,如果是研究ARM最新Cortex-A系列的小夥伴應該都清楚,SMMU是一個IOMMU用於去做實體記憶體的邊界隔離的機制,通過hypervisor的方式限定你這個系統的實體記憶體地址的訪問空間。


類似這種共享記憶體系統間攻擊的手段,之前我看到360的研究人員龔廣實現了類似的方式,實現了AP系統的地址空間可寫。他通過修改GPU的頁表裡面MMU的實體記憶體對映,構造一個惡意的GPU的物理訪問空間,把AP系統中的地址對映到GPU的地址空間裡面,對AP系統的實體記憶體的讀寫操作,從而完成對它的利用。


我覺得這應該是作為一個共享記憶體機制當中的,不同系統之間通訊的一個通病,如果系統間記憶體隔離做得不妥當就可能造成這種跨系統實體記憶體讀寫的安全問題。我覺得這塊的研究在未來在漏洞利用對抗上面應該會有一個非常大的啟發。




本屆峰會議題回顧


2020看雪SDC議題回顧 | 逃逸IE瀏覽器沙箱:在野0Day漏洞利用復現

2020 看雪SDC議題回顧 | LightSpy:Mobile間諜軟體的狩獵和剖析

2020 看雪SDC議題回顧 | DexVmp最新進化:流式編碼

2020 看雪SDC議題回顧 | Android WebView安全攻防指南2020

2020 看雪SDC議題回顧 | 生物探針技術研究與應用

2020 看雪SDC議題回顧 | 世界知名工控廠商密碼保護機制突破之旅

2020 看雪SDC議題回顧 | 敲開晶片記憶體保護的最後一扇“門”

2020 看雪SDC議題回顧 | 基於量子邏輯閘的程式碼虛擬(vmp)保護方案

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

……



注意:關注看雪學院公眾號(ikanxue)回覆“SDC”,即可獲得本次峰會演講ppt!

其他議題演講PPT,經講師同意後會陸續放出,請大家持續關注看雪論壇及看雪學院公眾號!



2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密
- End -



2020 看雪SDC議題回顧 | 高通移動基帶系統內部揭密

相關文章