閒聊:J-Link (1)
我和J-Link
2008/7,我每天在軍隊站哨做假資料,怨念極深,國家糟蹋了我的時間!
那時放假總想做點什麼彌補。唸書我有玩Samsung S3C2410開發版,玩嵌入式Linux。某次放假發現Wiggler JTAG,利用電腦Parallel Port能和SoC的JTAG打交道。我去買了線材自己焊,也真的下載一些指令進去跑!我撬開SoC的大門,能直接操作CPU,讓我對嵌入式系統開始有另一層次的了解。Wiggler JTAG的速度真的慢,於是我上網買了一顆破解版的J-Link,報價2688。有了這東西下載終於快一點,我也完成bootloader研究,玩了不少Peripheral。
多年後(也快10年了)回想,當時金融海嘯,Bootloader的研究讓我找工作算順利,拿板子就能東扯西扯;另一方面成功的經驗也是成長的絆腳石,我常掉入想要從頭到尾通曉的陷阱,哪來那麼多時間呢?現在我學東西,都要小心避免踏入這個陷阱。
盜版J-Link的通病
回過頭來繼續聊J-Link,我買破解版的時候,應該破解J-Link秘密的人不多。後來線路圖和韌體直接在網路上可以下載,價格暴跌(2688 -> 500)。這類盜版貨都有個通病,用一用可能會掉韌體,或著更新韌體會掛,機器變磚塊。大陸網站很多修復手續,照著做就能重燒韌體,救回磚塊。
開發工具不穩讓人難以忍受,後來我知道是盜版J-Link裡頭的bootloader非原裝,是某種逆向工程的結果。原裝bootloader應該有不少錯誤處理,盜版bootloader只是為了騙過升級程式的簡化版。大陸論壇也有人討論破解線索,不過都沒說得很清楚。多年來,我偶爾會找找破解線索,實在很好奇人家怎麼破解。不然退而求其次,給我一份穩定版本的韌體也可以。可惜原裝的bootloader有商業價值,從沒在網路上公開。
J-Link EDU
大概山寨貨賣得太火,逼得原廠也推出低價開發工具。J-Link陪我完成bootloader研究,我對這套工具是有感情的。如果礙於378USD不得不用盜版,那麼一顆只賣60USD的個人版為什麼不能入手?於是我買了一顆,感謝這幾年SEGGER持續開發各種嵌入式工具。
下圖是我手編兩顆J-Link,盜版貨和正版貨應該很好辨認。
十年的懸念
眾裡尋他千百度,終於最近有人公開J-Link破解的秘密了!步驟非常清楚,還有source code貼在裡面。
J-Link平常是透過jlinkarm.dll和driver打交道,我知道怎麼透過Python + CTYPES直接操作DDL;但是這篇的思路跳過jlinkarm.ddl,直接透過windows API操作J-Link driver。透過SEGGER公司某道隱藏的USB命令,直接讀取J-LINK的記憶體,能取出bootloader了。在這場破解的遊戲裡,韌體本體很早就被公開;但裝置本身的bootloader就得用各種迂迴的方式讀出。
我照著帖子的指引,先安裝Visual Studio 2015 community,再安裝Windows SDK,開始擺弄我的J-LINK。文章的程式故意埋了大量的錯誤,大概想避免太多伸手牌。我查微軟的文件和J-Link driver打交道,終於成功從盜版和EDU版J-Link取出韌體。實際比較兩版的韌體,真的有差異。在盜版J-Link燒入EDU版韌體,就能成功複製J-Link。
終於,解開十年的懸念。
還沒完成的工作
照著上面的文章,其實秘密都已經攤開,剩下只是實作。反而要問的是,最初是誰找到這道隱藏0xFE命令?是透過反解韌體得知?還是反解JLinkARM.dll找到這些秘密?
雖然只是依樣畫葫蘆,不過我知道這些黑客技術的研究還沒結束。包括在韌體內埋木馬的手法,還有反解dll技術。另外J-Link本身的韌體都開圖了,也可以開腸剖肚研究怎麼製作debugger。
研究這些東西,說真的沒什麼用;為的只是滿足弱弱的我,無止境的好奇心。
留言