被C語言重塑的UNIX——脫胎換骨

UNIX的原型是用匯編語言編寫,但為了更好地開發UNIX,丹尼斯·裡奇發明了C語言,用C語言 重寫了UNIX。每一個主要的計算機供應商都曾經實現過自己的UNIX,甚至連微軟也曾經擁有一個叫做 XENIX的產品,但後來賣給了SCO。

下面是UNIX家譜圖,程序員可以更好地理解UNIX這個“家族”:

被C語言重塑的UNIX——脫胎換骨

UNIX家譜圖

UNIX 本質上有三個主要的分支:

第一個分支是“System V”UNIX,現在我們知道的有IBM的AIX、Oracle的Solaris和惠普的HP-UX。這些被認為是“大傢伙”的操作系統被廣泛應用於世界財富1000強的大企業裡,驅動著關鍵的、面向交易的商業應用和數據庫。沒有System V UNIX,那些被財富雜誌1000強的企業不可能完成任何事情。商業都幾乎停滯了。它們也許只佔任何特定企業百分之十到二十的計算能力,但是這百分之二十相當重要。

第二個分支是BSD(伯克利系統發行版),包含FreeBSD、NetBSD和OpenBSD,這些都是Max OS X和iOS的基礎。它們也被用於支持關鍵的基礎設施骨幹上,互聯網就運行在上面。

第三個分支甚至不能算作一個分支——GNU/LinuxLinux內核(Linus Torvalds開發的)加上GNU用戶空間程序、工具和實用程序,提供了一個完全重新實現的“類似UNIX”,或者說“兼容UNIX”的操作系統。當然Linux也是所有UNIX 操作系統裡最具破壞力的。從非常小的嵌入式微處理器到智能手機、到平板和桌面電腦,甚至強悍的超級計算機都可以看到它的身影。

舉個栗子:IBM的Watson就是這樣一臺Linux超級計算機,Watson 在美國最受歡迎的智力問答電視節目《危險邊緣》(Jeopardy)中亮相,一舉打敗了人類智力競賽的冠軍。IBM Watson是認知計算系統的傑出代表,它可以像人類一樣思考,具備理解,學習和推理能力,實現更智能的人機交互,幫助人們做出更好的決策認知計算代表一種全新的計算模式,它包含信息分析,自然語言處理和機器學習領域的大量技術創新,能夠助力決策者從大量非結構化數據中揭示非凡的洞察。

被C語言重塑的UNIX——脫胎換骨

IBM Watson computer

但我們還是要認識到Linux和GNU沒有包含任何UNIX代碼——因此有自由軟件的遞歸短語 “GNU’s not UNIX”。(譯者注:GNU是GNU’s Not UNIX的縮寫,GNU’s not UNIX => (GNU’s Not UNIX)’s Not UNIX => ((GNU’s Not UNIX)’s Not UNIX)’s Not UNIX => …,有興趣的話還可以找找其它的,比如 PHP、XNA等等)

但GNU/Linux在設計上表現得很像UNIX,可以說如果沒有裡奇和他在貝爾實驗室的同事們(Brian Kernighan、Ken Thompson、Douglas Mcllroy和Joe Ossanna)一起率先開發出UNIX,也就不會有什麼Linux或者任何一個開放源代碼軟件運動。從這個意義上說,自由軟件基金會或者Richard Stallman很高興看到喬布斯離開了。

備註:Richard Stallman,自由軟件運動的精神領袖、GNU計劃以及自由軟件基金會(Free Software Foundation)的創立者、著名黑客。

所以,正是丹尼斯·裡奇用C語言對UNIX進行重塑,加速了軟件的開發和技術的發展,才有今天的雲計算,AWS(亞馬遜網絡服務,Amazon Web Services), Azure(微軟雲)...

被C語言重塑的UNIX——脫胎換骨

未來的人工智能:像人類一樣思考

軟線保護

今天給大家分享軟件保護的意義:

1、為什麼要軟件保護

軟件保護主要為了保護自己的知識產權,防止自己的研發成果被他人輕鬆的竊取。說白了就是不讓自己的勞動成果快速的被人“山寨”或者利用。假設你寫的安卓程序或者window的應用程序沒有進行任何措施的保護就相當於裸奔,那麼一些逆向工程的工具分分鐘鍾就把你的應用改頭換面或者說你的應用相當於赤裸裸的站在別人的面前。對於一些單片機程序也一樣,在某寶上搜索“抄板”或者“pcb”板克隆,我們研發的好幾個月的產品可能被人幾天就抄走了。

2、軟件保護建議

(1)軟件最終發行之前一定要將可執行程序進行加殼/壓縮,使得解密者無法直接修改程序。例如安卓程序和C#程序進行加固,代碼進行混淆。如果採用現成的加殼工具,最好不要選擇流程的工具,因為這些工具已被廣泛深入地加以研究,有了通用的脫殼/解壓辦法。如果時間允許並且有相應的技術能力,最好是設計自己的加殼/壓縮方法。

(2)對於升級包也可以增加校驗,不要僅僅的就是壓縮下或者甚至連壓縮都沒有壓縮。因為升級包,往往使用中是對外提供的,所以對升級包進行加密或者混淆,保證非必要人員無法查看升級包中的文件內容。其實安卓系統的安裝包apk就是一個壓縮文件,如果沒有任何的加殼保護,大家重命名成zip,然後可以解壓看到裡面的內容了。

(3)增加對軟件自身的完整性檢查。例如在芯片的固定的區域在寫入產品相關信息或者寫入對固定區域進行計算檢驗值,在開機的時候通過校驗來判斷是否進行啟動程序,這樣就可以一定程度上防止抄板了。

(4)除了加殼/壓縮之外,還需要自己編程在軟件中嵌入反跟蹤的代碼,以增加安全性。例如在程序中增加一個線程專門監控是否有人對你進行反編譯調試跟蹤,一旦檢測到有人對你進行反編譯就結束程序,不讓其他人對你的代碼進行跟蹤調試。

(5)如果採用註冊碼的保護方式,最好是一機一碼,即註冊碼與機器特徵相關,這樣一臺機器上的註冊碼就無法在另外一臺機器上使用,可以防止有人散播註冊碼。例如,之前給人保分公司做的一個出單程序就是採用了一機一碼的,通過獲取硬盤序列號,MAC碼後進行hash運算,外加有效的截止時間進行防止客戶到處複製黏貼使用該軟件。這種方案或者採用UKEY的方案,只能防止軟件被不斷的複製,如果沒有進行加殼很容易就容易被逆向,然後破解了。

(6)檢查註冊信息和時間的代碼越分散越好。不要調用同一個函數或判斷同一個全局標誌,因為這樣做的話只要修改了一個地方則全部都被破解了。


相關文章鏈接:

媒體記住了喬布斯,但我們不能忘了他——C語言之父

不能忘卻的C語言之父——丹尼斯·裡奇

C語言的誕生——上帝的編程語言

C語言“大爆炸”——C++、Objective-C、C Sharp

覺得不錯,請點贊分享或收藏↓↓↓

請關注IT科研室

作者:Kevin一個不端不裝有夢有趣的原創文字創作與分享者!

相關推薦

推薦中...