看板 Programming 關於我們 聯絡資訊
※ 引述《bert.bbs@bbs.csie.ncu.edu.tw (哇哩咧...)》之銘言: : > 有種東西叫做示波器, 它可以探測訊號 : > 有種東西叫做三用電表, 它的好處我舉例不完 : > 硬體高手可以藉著這兩種基本工具和其他測試工具 : > 畫出大概的圖或是 spec. : > 舉例: : > 破解光碟保護不挑片的破解晶片就是這樣來的 : 光靠這兩個東西沒那麼容易出名堂來 : 還有一個動轍百萬台幣起跳的東西叫做邏輯分析儀 (Logical Analyzer) : 這東西才是真正破解硬體的好幫手 : 光是廠商公布的或外流出來的硬體規格而沒有線路圖的話, 是半個影都 : 不可能生得出來的. 光知道 CPU, GPU, Audio Processor 等主要晶片的 : 型號而不知道其它輔助晶片有哪些, 要猜出線路是怎樣兜出來的恐怕比 : 中樂透頭彩或被閃電擊中的機率還低 ====== 設計製造硬體使之相容, 可以使用原廠軟體產品的一個方法就是 emulation . 1.所有的零件完全照用連接線路完全照抄, 這一定觸犯 copyright , 而且原製 造商會掌握幾個關鍵零組件, 成本上因此偏高, 所以行不通. 這個方法就是用三用電表與示波器查出連接的線路圖, 但做成 IC 的零組件就 罩在 IC 封裝裡面, 普通探針是伸不進去的. 像 ROM 程式內建在 processor 的 IC 封裝裡, 如果又被程式鎖遮蔽, 那就不容易被拿出來參考. 這種方法能行得通的是零組件有 2nd source 及代用品, ROM 程式可以用其他 指令合成代替, 特殊的關鍵零組件能找到廉價供應源或用以其他零組件合成. 同時, 電路板的配置與配線不得完全相同. 當然, 不能在專利有效期內觸犯專利. : > 拆解硬體是一樣要的 : 拆電路板量線路重建線路圖也還只算是基本功 : MAME team 在解保護 ROM 有一個方法是把 ROM chip 拆開拿到高倍顯 : 微鏡下去解讀矽晶上的線路邏輯 : > 基本上, 經由 1, 2 的步驟就可以得知大致上的規格 (CPU/訊號 ... 等) : > 如果不知道, 換找一個硬體工程師來幫你檢測 : > 而 CPU 的指令碼資料, 要弄到不是難事, 大部分資料網路上都有 : 沒那麼簡單. 尤其是某些遊戲大廠特別愛用特製型的 CPU 來設計硬體 : 平台以提高某些特定部份的執行效率, 或是加入某些原 CPU 所沒有的 : 特異功能. 那些特異化的部分雖然不多, 可也不是那麼容易就找得到 : 資料的, 甚至都是根本就沒有資料的 undocumented function : 再說如果板子上有用到 FPGA/CPLD 這一類的可程化邏輯陣列, 那要猜 : 出裡面怎麼運做可就更是難囉 2. 如果有關鍵的零組件被捏在原設計/製造者的手上又沒有其他的 2nd source , 例如 cpu 或 某些 chip set 是獨家的; 除了費力找規格功能, 用廉價與來源容 易的組件合成外, 此時, 代用組件的銜接點可以提升到被叫用軟體模組的較高階 層, 下層的硬體就可以偏離原來的實際硬體, 例如用 RAM 與 file 代替的虛擬 光碟. 合成的方法就是用普通的硬體加上軟體代用. PC 裡出名的例子就是 浮點 運算的 FPU , 數學運算的 library 可以按有無 FPU 事先替換, 也可以執行浮點 運算指令時, 才調用軟體代替(相當於關閉 FPU chip)使之合成; 不過, 後一種方 法就要有硬體配合檢測與跳轉, 碰到特殊指令時就要能欄截跳轉代替. 純軟體的方法就是事先撿測, 就程式碼位置查出後, 替代改接一段程式再 接回去就是 patch 法 或 傳統病毒法. 在程式置入後, 再在 RAM 中修改就可 不必破壞原來的檔案(如 ROM 卡夾). 現在的另一種技術跟以前的 microprogramming 類似, 也用在 java code interpreter 裡, 只是把每個指令或特定程式入口(如 system call) 用一段 高階語言程式碼的入口點對映, 對整段機器碼做 block translation , 優點就 是碰到 block loop 就不必再重覆查察與轉換, 可以逕自執行; 每段 block 之 間才做 state update , 也可減少不必要的檢測與切換. 電玩的輸入與顯示裝置跟 PC 是類似的, 多數的功能是能軟體合成代替的 可能的不同是採用不同的 CPU , 但現在的 X86 與 GPU 是相當快的, 像前面 某大說的把 電玩程式碼 當 data 來處理就是一般的 interprter 做法. : > 沒有的話, 最好可以找到有在 "遊戲開發產商" 內部工作的人 : > 因為他們都會有 "整包的開發工具" : 這個也沒有那麼簡單. 第一, 要找得到在遊戲開發廠商內工作有交情的 : 人不是那麼容易, 更何況他們當初被雇用時一定會簽保密合約. 第二, : 就算透過種種正式授權之外的管道取得了開發包, 也不可能直接用, 因 : 為有法律問題. 而且寫模擬器頂多拿這開發包當做模擬正確度的驗證工 : 具, 不可能拿開發包來寫模擬器. 第三, 就算取得開發包沒有法律上的 : 問題, 開發包裡面可能也只給你 object code library 而沒有附上這 : 些 library 的 source code : > 等到這些都完備後, 基本上, 就可以開始寫模擬器 : 其實, 寫模擬器通常都是先寫或找一個可運作的 CPU 模擬核心, 然後 : 再慢慢的把週邊的支援晶片的模擬建立起來. 至於模擬器的正確度, 則 : 是手上有多少資料能有多少正確度就算多少, 不正確的部份再邊猜邊改 找到原製造商的工程師, 其實就是挖角或者是買情報. 現在這部份也有公司機密法與旋轉門的轉職限制, 正規的情報收集就是參加發 表會, 辦研討會, 工程師彼此技術交流. 二戰的列強都會造飛機汽車, 因為都是同一時代一起做, 一起玩, 一起觀看批 評, 細節訣竅彼此都清楚, 落後太多的地區就不行了, 一旦那個時間點過去了 很多竅門就被視為理所當然彼此心照不宣. 而很重要的技術先進國都不太會給 後進者, 除非像老共有大陸的市場做本錢來換. 台灣的硬體製造還不錯, 其實 就是一直是陪著玩這種破解相容跟進突出, 而這些招式是早在 PC 時代之前就 已知的. 所謂軟體業都在替硬體製造業服務就是指這類事. Emulation 是一種技術, 但商業上不僅是相容, 還要有一點點額外的特異功能 才能避免抄襲的困擾. 完成一個好的與堪用的 Emulator 確實不容易, 需要對軟硬體都要有概念, 現 在的技術更是少不了 Language tanslation/compilation 的知識. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.4.12
Dungeon:扯太遠了啦!沒講到重點><218.170.112.114 09/02 21:22
ggg12345:驕車長相用法都類似,但不用emulation一詞 140.115.4.12 09/03 09:00
ggg12345:Emulator強調相容,但用韌(軟)體程示合成 140.115.4.12 09/03 09:06
ggg12345:其基本原理就是 interpreter 140.115.4.12 09/03 09:09